- ベストアンサー
WordPressの記事表示に問題が発生しています
- WordPressの質問(q10032703)に関連して、記事が表示されない問題が発生しています。
- set_template_info関数は、テンプレート情報を設定するためのものです。
- get_template_number関数は、テンプレート番号を取得するためのものです。
- みんなの回答 (82)
- 専門家の回答
質問者が選んだベストアンサー
基本的に同じコードですのでもとのsearch.phpに戻して、 実行してみてください。 と言いましたが、問題が発生していることを確認してください。 削除したものが表示されるのと、タイトルも何も表示されないことです。
その他の回答 (81)
- dell_OK
- ベストアンサー率13% (776/5747)
検索結果が表示されないのは、アーカイブやカテゴリーから検索した時で、検索ボタンが「検索」になっている時ではないでしょうか。 検索される時は検索ボタンが「Q」になっていると思います。 もしそうであれば、検索ボックスはget_search_form()を使わずに、他の画面のようにdisplay_search_form()を使ってください。
補足
回答ありがとうございます。アーカイブやカテゴリーページではなく、下記ページから検索しております。 $tkに改良が必要かもしれません。 single_rss_feed1でSQLが正しく動作してことが、No.60のdell_okさんの回答で確認取れました。 http://www.last.cfbx.jp/ http://www.last.cfbx.jp/画像2タイトル1/ http://www.last.cfbx.jp/画像3タイトル1/
- dell_OK
- ベストアンサー率13% (776/5747)
【検索 その10】 ・記事タイトルに該当するワードで検索してみましたが何も表示されなくなってしまいました… $tkがうまく機能していないようです。 http://www.last.cfbx.jp/?s=テスト&tn=1 この時とほぼ同じSQL文が以下のものです。 phpMyAdminで実行して、結果がどうなるか確認してみてください。 ---- SELECT distinct post.* FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_title LIKE '%テスト%') ORDER BY post.post_date DESC ----
補足
回答ありがとうございます。 single_rss_feedのテストとつけられた記事が出力されております。 https://imgur.com/xKZqn5w.jpg
- dell_OK
- ベストアンサー率13% (776/5747)
・1度削除or一時的に保存、タイトルを変更した記事のデータがずっと記録されているようです。 そのようなデータがずっと記録されているのは、WordPressの仕様だと思います。 それがいつ削除されるのか、削除されないのかまでは把握していませんが、目障りなデータがたくさんある思って、削除するために私が使っているプラグインは「WP-Optimize」です。 いろいろと不要っぽいデータを削除してくれます。 そのようなデータがあったとしても、wp_postテーブルから取得するデータは、SQL文で以下のようにしているので、投稿タイプ(post_type)が「記事」(post)のもので、かつ投稿ステータス(post_status)が「公開済」(publish)です。 ---- AND post.post_type = 'post' AND post.post_status = 'publish' ---- なので、そのようなデータを取得することはないはずです。 なので、そのようなデータのせいで重複しているように見えるようなこともないはずです。 まずは重複しているかどうかを確認してみてはいかがでしょうか。 記事IDを表示するようにして、同じ値のものが表示されているかどうかを確認してみてください。 画像の横か下に記事IDをカッコ括りで表示します。 display_rss_post_1() ---- echo "<figure class=\"entry-thumnail\"><a href=\"{$item->guid}\"><img src=\"{$item->thumbnail}\"></a>({$item->ID})</figure>"; // サムネイル画像 ---- display_rss_post_2() ---- /* 画像をため込む */ $images .= "<a href=\"{$item->guid}\"><img src=\"{$item->thumbnail}\"></a>({$item->ID})"; ---- 関係ないもの、が表示されることについては、改めて確認方法を提案したいと思います。
- dell_OK
- ベストアンサー率13% (776/5747)
【カテゴリー その52】 現在のコードを見てみました。 カテゴリーにパターンが混在するとのことで追加した部分がなくなっています。 回答No.54の内容です。
補足
回答ありがとうございます。 記事タイトルに該当するワードで検索してみましたが何も表示されなくなってしまいました… $tkがうまく機能していないようです。 http://www.last.cfbx.jp/?s=テスト&tn=1
- dell_OK
- ベストアンサー率13% (776/5747)
【検索 その7】 ・検索したワードと全く関係ないものが表示されており本来の役割が果たされていないようです。 全く関係ないものかどうかは、質問者さまの全データが見れないとわかりません。 以下の3つの項目で検索しているので、どれかに該当するデータがあるとしか思えません。 全角と半角、ひらがなとカタカナ、大文字と小文字、などを同一視するようになっているのかも知れません。 ---- AND (post.post_content LIKE %s OR post.post_title LIKE %s OR post.post_excerpt LIKE %s) ---- ・該当しない記事で検索をかけても何かしら表示されるようになっております。 該当記事がない場合の処理が加えて必要かもしれません。 そうですね。 その場合にどのような表示をするか検討してください。 ただし、固定で表示されるランキングやRSSがあるので、「該当なし」のような文字を表示してもまったく目立たず、検索結果があったのかなかったのかわかりづらいと思います。 ・tn=3で'ふぉー'と記事タイトルを検索した場合、下記画像のように関係のない記事が表示されております。 重複しないように格納するためのコードは問題ないでしょうか? 画像は重複しているように見えませんが、重複しているのでしたら、SQL文にDISTINCTを入れてみてください。
お礼
これは他の記事も同じです。いれぶんという記事を1件用意しているのですが、同じ順番で表示されているため検索ページそのものがまったく機能していません。 この部分において訂正いたします。申し訳ありません。 いれぶんという記事を1件公開している状態で、 いれぶんと検索した場合テストと検索した時と同じ記事が同じ順番で表示されています。 これがほかのワードでも起きていてSQLが適切に動いていないようです。 明日自分なりに原因を考えてみます。
補足
【検索 その7】 Q.以下の3つの項目で検索しているので、どれかに該当するデータがあるとしか思えません。 全角と半角、ひらがなとカタカナ、大文字と小文字、などを同一視するようになっているのかも知れません。 A.検索ワードをどれだけ変えても同じ記事しか表示されないようです。 今現在の状況ですが、投稿テストと付けられた記事を画像2のページに10件用意しました。 テストと検索した場合1ページ目の10件表示されて2ページ目に残りの関係ない記事が表示されています。 これは他の記事も同じです。いれぶんという記事を1件用意しているのですが、同じ順番で表示されているため検索ページそのものがまったく機能していません。 Q.「該当なし」のような文字を表示してもまったく目立たず、検索結果があったのかなかったのかわかりづらいと思います。 A.該当なしの場合の処理はもう少し考えた方がよさそうです。 Q.画像は重複しているように見えませんが、重複しているのでしたら、SQL文にDISTINCTを入れてみてください。 A.重複データを削除して、DISTINCTを入れてみたのですがエラーになっています。削除した記事が何故か出力されている状態です。 キャッシュ系のプラグインを入れてみたのですが効果ありませんでした。 エラーが多発していてどこから手を付けていいのかわからなくなっています。1度削除or一時的に保存、タイトルを変更した記事のデータがずっと記録されているようです。 記事を変更する際にその都度データベースから削除する必要がありそうです。wp_postsから投稿タイトル削除のみでは完全に削除しきれていないようで表示されています。 SQLで定期的に記事を削除するのは半年周期でまとめて実装したいため、1回ごとの投稿ミスの記事削除についてもどうしたものかと悩んでいます。 ※表示画面 https://imgur.com/zWMDVTm.jpg ※キャッシュプラグイン(WP Super Cache) https://fox-wp.com/clear-wp-super-caches-cache/ ※現在のコード https://wandbox.org/permlink/StyLVzgpKlWYcepZ
- dell_OK
- ベストアンサー率13% (776/5747)
検索にも前後の記事を取得する処理を入れてください。
補足
回答ありがとうございます。 前後の記事の処理とは白黒の処理ではないのでしょうか? 白黒の処理はすでに実装済みです。 https://wandbox.org/permlink/StyLVzgpKlWYcepZ
- dell_OK
- ベストアンサー率13% (776/5747)
ひとつの記事に複数のパターンのキーが設定されていないですか。 'single_rss_feed1'と'double_rss_feed2'と'triple_rss_feed3'のいずれかふたつ以上が設定されない前提です。
お礼
エラー原因の特定ができました。wp_postsテーブルに記事タイトルが重複して格納されておりました。 検索ページの重複はおそらくこれが原因のようです。 distinctを加えて重複の格納を制御するように考えたのですが、検索ページで確認が取れませんでした。 検索したワードと全く関係ないものが表示されており本来の役割が果たされていないようです。 該当しない記事で検索をかけても何かしら表示されるようになっております。 該当記事がない場合の処理が加えて必要かもしれません。 tn=3で'ふぉー'と記事タイトルを検索した場合、下記画像のように関係のない記事が表示されております。 重複しないように格納するためのコードは問題ないでしょうか? ※エラー表示 https://imgur.com/8HEnEc4.jpg ※重複を制御 $sql = " SELECT distinct post.* FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = %s AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_content LIKE %s OR post.post_title LIKE %s OR post.post_excerpt LIKE %s) ORDER BY post.post_date DESC LIMIT %d,%d "; ※該当テーブル https://imgur.com/GQ2452w.jpg ※SQL検索コード SELECT * FROM `wp_posts` WHERE post_title LIKE '%ふぉー%'
補足
回答ありがとうございます キー設定は1つずつのみ行っております
- dell_OK
- ベストアンサー率13% (776/5747)
混ざるのでしたら、以下のようにしてみてください。 該当パターンのカスタムフィールドを設定するようにしています。 ----category.php $sql = " SELECT post.* FROM wp_posts AS post INNER JOIN wp_term_relationships ON post.id = wp_term_relationships.object_id INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE wp_term_taxonomy.term_id = %d AND post.post_type = 'post' AND post.post_status = 'publish' AND meta.meta_key = %s ORDER BY post.post_date DESC LIMIT %d,%d "; $query = $wpdb->prepare($sql, $cat, $tk, $posts_offset, $posts_per_page); ----
お礼
DISTINCTでデータベースからの取得時に重複データを除外するのを思い浮かんだのですが、どうでしょうか? //ブロックあたり投稿グループ件数 $group_per_block = 5; で制御するのは難しい気がします。($tn/5)のように最大5件と設定できれば5件でなくても重複エラーが起きるようなこともない気がしますが。 https://kino-code.com/sql17-distinct/
補足
回答ありがとうございます。 INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id AND meta.meta_key = %s で$tkに対応してパターンに適応するんですね。 search.phpとファイル構成は同じで起きているエラーも同じものが表示されています。 エラー箇所は依然と同じ箇所です。 // サムネイルの画像URLを設定 $post->thumbnail = $image_src[0]; archive.phpはエラー文がなくページナビが表示されていない状態です。 アーカイブのページナビがなぜ表示されないのか、記事の重複がなぜ表示されるのか自分で調べながら考えてみます。 ※エラー文 Warning: Creating default object from empty value in /home/zblgibzx/public_html/display.php on line 618 ※表示画面 https://imgur.com/4Tz0vvL.jpg(front-page.php) https://imgur.com/vYCvnnF.jpg(category.php) https://imgur.com/9287zvp.jpg(archive.php)
- dell_OK
- ベストアンサー率13% (776/5747)
「カテゴリー6」を画像1にも画像2にも設定していませんか。 ひとつのカテゴリーが複数のパターンに混ざることはない前提です。
お礼
可能であれば実装したいのですが、既にエラーが起きている状態で更に機能を複雑化する事になる事が想定されるのであれば諦めます…
補足
回答ありがとうございます。 混ざることも視野に入れていたのですが、実装する事は困難でしょうか?
- dell_OK
- ベストアンサー率13% (776/5747)
・今更ながらになるのですがAS cgというのはcategory_groupの略称でしょうか? そうだったと思います。 ・もしかすると大がかりな修正が必要になるのではないかと不安視しているのですが、記事の重複を制御しつつページナビが機能するように修正することは可能でしょうか? 大がかりな修正になりますし、負荷のかかる処理になると思いますが、可能だと思います。 ・※なぜか別カテゴリーのものが画像1件だけ補充されている(search.php) この記事のカスタムフィールドを確認してください。 おそらく'single_rss_feed1'もしくは'triple_rss_feed3'であるべきなのに、'double_rss_feed2'になっているのではないでしょうか。 ・検索カテゴリーアーカイブページの修正策を考えていきたいのですが、記事の重複を制御する必要がありそうです。 まずは、カテゴリーページの重複を直していきましょう。 category.phpとdisplay.phpをいただけますか。
お礼
最新の回答になります。 同一カテゴリーを設定する場合カスタムフィールドキーではじくんですね… 問題はSQLで同じカテゴリーを設定したときに判別する方法の実装が必要なところでしょうか 'meta_key' => $tk,
補足
おそらく'single_rss_feed1'もしくは'triple_rss_feed3'であるべきなのに、'double_rss_feed2'になっているのではないでしょうか。 A.回答ありがとうございます。category.phpとdisplay.phpはこちらになります。https://wandbox.org/permlink/RTwvw3IhkKD6tWJr 投稿記事の順番を確認しましたが問題なさそうです。ふぉーイ,ふぁいぶイでエラーが発生していますがwhite,blackの組み合わせなので順序は合致しています。 わんア,とぅア,すりーア single_rss_feed (なし) ふぉーイ,ふぁいぶイ,しくすイ,せぶんイ double_rss_feed (white,black) えいとウ,ないんウ,てんウ, triple_rss_feed (red,blue,green) いれぶんエ,とぅえるぶエ,さーてぃーんエ,ふぉーてぃーんエ double_rss_feed (white,black) ふぃふてぃーんオ,しくすてぃーんオ,せぶんてぃーんオ triple_rss_feed (red,blue,green) えいてぃーんカ,ないんてぃーんカ,とぅえんでぃカ single_rss_feed (なし)
お礼
SQLに関して勘違いがありました。申し訳ありません。 meta.meta_key = ''を変更して検索したところテーブルのデータは記事データと合致しておりました。 SELECT distinct post.* FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_title LIKE '%イ%') ORDER BY post.post_date DESC
補足
削除したものが表示されるのと、タイトルも何も表示されないことです。 A.回答ありがとうございます。削除したものは表示されておらず、タイトルも表示されています。 1つ気付いたことがあるのですが、get_search_query():で出力できなかったタイトルがfilter_input():で出力できています。 何かしらの法則があるようです。 例えばイで検索した際にえいてぃーんカという記事があったと仮定します。 get_search_query():の方では該当記事として出力できていませんが、filter_input():では出力できています。 いくつかこのような記事があり、SQLで検索に使用したコードでもイが含まれるのに出力されない記事があります。 get_search_query():の検索の精度は低い気がしています。 タイトルから表示されていない状態ですが、先にページナビの修正から行うのでしょうか? ※現在表示されている記事 https://imgur.com/IupD3AB.jpg ※現在のコード https://wandbox.org/permlink/VReuDuARbgCZ1OJM ※確認の際に使用したコード SELECT distinct post.* FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_title LIKE '%イ%') ORDER BY post.post_date DESC