###前提・実現したいこと
WordPressを使用しています。
カスタム投稿タイプを作成し、そこに日付のカスタムフィールド(start_date)を作成しています。
カスタム投稿タイプはfunctions.phpに記述し、カスタムフィールドはAdvanced Custom Fieldsで作成しています。
pre_get_postsを利用してカスタムフィールドの日付の新しい順で並び替えを行っています。
具体的なコードは以下です。
PHP
1function pre_get_posts_report($query){ 2 if($query->query['post_type'] == 'report'){ 3 $query->set('meta_key', 'start_date'); 4 $query->set('orderby' , 'meta_value'); 5 $query->set('order' , 'DESC'); 6 } 7} 8add_action('pre_get_posts', 'pre_get_posts_report');
###発生している問題
一覧では正常にカスタムフィールドの日付順で並んでいるのですが、個別ページの次のページ・前のページのリンクが正常に表示されません。
その部分のコードは以下です。
PHP
1 next_post_link('%link', '前へ'); 2 previous_post_link('%link', '次へ'); 3
当然ループ内で上記コードを呼び出していますし、$wp_queryを確認しても一覧と同じSQL文を発行しているようです。
###試したこと
当初pre_get_postsのコードが
PHP
1 if($query->is_post_type_archive('report')){
このようになっていたので、これではアーカイブページでしか有効にならないと思い、
PHP
1 if($query->is_post_type_archive('report') || $query->is_singular('report'){
としましたが、これでは正常にSQLが発行されませんでしたので、最初に挙げたコードになっています。
なぜ正常に前後のリンクが取得・表示できないかおわかりになる方、
または、別の方法で正常に前後のリンクを取得できる方法を知っている方がいましたら、よろしくお願いします。
あなたの回答
tips
プレビュー