orderby orderでちょっと躓いたのでメモ

2019年1月23日

某案件の作品ページ(カテゴリーページ)で、1ページに1記事を掲載し、ページ遷移で作品を紹介しているが、このページのヘッダー部分にNews項目(新着記事を3件リスト表示)掲載。
ページ自体は表示させたい作品の番号とページ番号をリンクさせたいので、昇順での表示。
これをfunctions.phpで指定したら、ヘッダー部分のNews部分まで昇順になってしまった。

対処方法はいたって簡単なのだが、ここに気付くのに時間がかかてしまったので以下に記載。
最初はこのように記載。worksというカテゴリーの例。

//worksカテゴリーページの表示を昇順に変更
function my_pre_get_posts($query) {
	if (is_category(array(1,3,4,5,6,7,9,10,11,12,13))) {
		$query->set('order', 'ASC');
    }
}
add_action('pre_get_posts', 'my_pre_get_posts');

しかしこれでは他の部分にも影響してしまうので

//worksカテゴリーページの表示を昇順に変更
function my_pre_get_posts($query) {
	if( is_admin() || ! $query->is_main_query() ){
     return;
 }
	if (is_category(array(1,3,4,5,6,7,8,9,10,11,14))) {
		$query->set('order', 'ASC');
    }
}
add_action('pre_get_posts', 'my_pre_get_posts');

このように変更すれば良い。

if( is_admin() || ! $query->is_main_query() ){
     return;
 }

この部分を追加することで他の部分への影響がなくなる。
「最初のis_admin()でダッシュボードまたは管理パネルが表示されているかどうかをチェックしています。
ダッシュボードが表示されている場合はreturnとなって以降の処理を中断します。
メインクエリを変更するため、ダッシュボード等の表示に影響が出るのを防いでいます。
同じようにis_main_query()でメインクエリかをチェックしています。「!」がついているので「メインクエリではない場合」に処理を中断します。
「->」はアロー演算子と呼ばれるもので、クラスやオブジェクトのプロパティやメソッドを参照するという意味です。」
ということですね。

参考サイト:http://yuji-okayama-designersworks.com/wordpress/599/

PAGE TOP