質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1919閲覧

WordPressでアーカイブが取得できなくなりました

nichino

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/03 07:38

編集2018/12/04 01:43

前提・実現したいこと

お世話になります。

Wordpressでニュースページを作成し、年ごとのアーカイブを設定しています。
設定自体は2年ほど前にしていて当時は問題なく動いていたのですが、気付いたら動かなくなっていました。
プラグインは使用していません。

今年5月にサーバのシステムが更新されたのかログインが出来なくなったことがあり、アカウントを登録し直してもらいました。
また、7月にドメインのhttpsへの移行がありました。

ただ、動かないと気付いたのが4日ほど前のため、関係があるかは分かりません。
知識が足りず設定のどこが間違っているか分からない状態のため、お力お貸しいただければと思います。

発生している問題・エラーメッセージ

アーカイブの年をクリックしても各年一覧に飛ばず最新からの一覧が表示されます。
例えば2017や2016をクリックしても、最新から10件までが表示されます。(10件表示設定のため)
次ページへのリンクは表示されますが、クリックしても最新から10件までで変わりません。

該当のソースコード

管理画面のパーマリンク
https://example.jp/news/%year%/%monthnum%/%day%/%post_id%.html

生成される各記事のURL
https://example.jp/news/2018/09/10/276.html

sidebar.phpに

<?php wp_get_archives('type=yearly'); ?>

でアーカイブを設定しhtml上は各リンクが以下のように表示されます。

<ul> <li><a href='https://example.jp/news/2018'>2018</a></li> <li><a href='https://example.jp/news/2017'>2017</a></li> <li><a href='https://example.jp/news/2016'>2016</a></li> </ul>

エラーログを確認したところ以下のエラーが出ていました。
PHP Warning: Missing argument 1 for query_posts(), called in /opt2/web/example.jp/htdocs/news/wp-content/themes/example/archive.php on line 24 and defined in /opt2/web/example.jp/htdocs/news/wp-includes/query.php on line 96

それぞれのファイルの該当箇所が以下になっていましたので、こちらのquery_posts();の書き方に問題があるのでしょうか。
archive.php

<?php query_posts(); ?>

query.php
function query_posts($query) {
$GLOBALS['wp_query'] = new WP_Query();
return $GLOBALS['wp_query']->query($query);
}

試したこと

http→httpsへのリンクを確認修正しました。

補足情報(FW/ツールのバージョンなど)

WordPress 4.9.8

ログインされているプラグイン
・Disable Emojis (GDPR friendly)
・Disable REST API
・Disable XML-RPC
・Google Captcha (reCAPTCHA) by BestWebSoft
・Login rebuilder
・Really Simple SSL
・WP Mail SMTP
※勝手に停止が出来ません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/12/03 08:28

例示でつかうドメイン名は、「ご自身が所有する実際のドメイン名」か「例示用に用意されているドメイン名( example.com / example.netexample.jp 等)」を使ってください。( 例示用ドメイン名については、http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html 等を参照してください。)
CHERRY

2018/12/03 08:31

「Webサーバーのエラーログ」か WordPressの「デバッグモード」で出力される(orログファイルに保存する設定の場合はログファイルに記録された)メッセージに 何か表示されていたりしないでしょうか?
CHERRY

2018/12/03 08:34

テーマファイルやアーカイブのテンプレートファイルで、どのような処理をしているのでしょうか? 標準のアーカイブテンプレートのままでしょうか?
nichino

2018/12/03 08:52

すみません、WorPressのデバッグモードについて、今wp-config.phpの変更権限が無いので改めて確認します。
nichino

2018/12/03 08:54

テーマはarchive.phpも含め全ページ1から作成しました。
CHERRY

2018/12/04 02:32

エラーログとデバッグモードで表示される内容はほぼ同じなので、エラーログが確認できるのであれば、デバッグモードは見なくても大丈夫です。
nichino

2018/12/04 02:36

ありがとうございます。いただいたご回答を基に修正を試してみます。
guest

回答1

0

ベストアンサー

質問文に記載された内容から分かる範囲で...

PHP Warning: Missing argument 1 for query_posts() は、query_posts() を呼び出す時の引数の数が、定義された内容と異なっているよというメッセージですね。

query_posts は、1つの引数が必要ですが、質問文に書かれたコードの

archive.php

<?php query_posts(); ?>

では、 引数を渡していないのが 原因ですね。
ただし、Warning は、致命的なエラーではないので、(希望とは異なりますが、デフォルトの条件で)検索するという動作はしていると思います。


どのような検索がされているかというと....

query_posts() を引数なしで呼び出すと WordPress のデフォルトの検索条件が設定されて検索されます。

管理画面の設定によりますが、WordPress インストール直後のデフォルトの条件は、 最新の投稿10件を新しい順に表示 になっていると思いますので、管理画面で件数などを変更してない場合は、この状態だと思います。


テーマファイルの PHP コードをどこかの段階で書き換えていなければ、おそらく製作された直後からこの状態だったのではないかと思われます。


なお、https://wpdocs.osdn.jp/テンプレートタグ/query_posts

注 1: この関数はプラグインまたはテーマの中で使われることを想定されていません。後ほど出てくる説明にあるように、メインクエリーを変更するにはパフォーマンス面でも優れたより良いオプションが存在します。

 

注 2: query_posts() はページ内のメインクエリーを書き換え、新しいクエリーのインスタンスと置き換えるために使う関数としては過度に単純化され、問題が発生しやすい方法です。非効率的で(SQL クエリを再実行します)、一部の状況では適切に実行することもできません(特にページング処理)。モダンな WordPress コードではもっと安定したメソッドを使うべきです。例えばpre_get_posts フックを使った方法などです。ひとことで言うと、query_posts() は決して使うべきではありません。

と書かれているように query_posts をテンプレート内で使用することは、非推奨とされていますので、WP_Query か pre_get_posts あたりで、書き換えるのが良いと思います。

投稿2018/12/04 02:25

編集2018/12/04 02:33
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nichino

2018/12/04 04:42

ありがとうございます、大変参考になります。 こちらを基にpre_get_postsに書き換えたところエラーが出なくなりました。 また、アーカイブも表示出来るようになりました。 archive.phpで <h3><?php printf( __('年別: %s'), '<span>' . get_the_date( _x( 'Y', 'yearly archives date format') ) . '</span>' ); ?></h3> と年を表示するようにしていて、2017や2016のリンクをクリックしても2018と出てしまうのですが、過去データは拾えるようになりました。 年別表示は必須では無いので、取りあえず外してしまおうかと思います。 ご助力いただき助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問