サポート » 使い方全般 » pre_get_postsフィルターについて

  • 解決済 vanilla87

    (@vanilla87)


    pre_get_postsフィルターを使って、特定の親を持つカテゴリのアーカイブ一覧の1ページあたりの表示件数を変更したいのですが、「特定の親」の条件の書き方がわかりません。

    【カテゴリの構成】
    親--Aカテゴリ
     Aの子-Bカテゴリ
     Aの子-Cカテゴリ
     Aの子-Dカテゴリ

    B~Dは全部、同じAを親に持ちます。
    B~Dに適用したいのですが、書き方がわからず、
    現在、functions.phpに、B~Dそれぞれのカテゴリを書いています。

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

    if ( $query->is_category(‘B’) || $query->is_category(‘C’) || $query->is_category(‘D’)) {
    $query->set( ‘posts_per_page’, ‘表示件数’ );
    }
    }
    add_action( ‘pre_get_posts’, ‘change_posts_per_page’ );

    B~Dのカテゴリが変わらなければ、上記でいいのですが、Aを親に持つカテゴリが変化するので、子のカテゴリを指定するのではなく、「Aを親に持つカテゴリ」という指定の方法があれば、そのようにしたいのです。

    手元の参考書や、サイトを調べたのですが、該当するものを見つけることができず、こちらにお聞きしました。
    よろしくお願いします。

     

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    カテゴリーである場合、

    $query->get( 'cat' );

    で表示するカテゴリーのIDを取得できます。

    カテゴリーが特定の親、祖先を持つかどうかは、cat_is_ancestor_of で判別できます。

    トピック投稿者 vanilla87

    (@vanilla87)

    jim912さん、ありがとうございます。

    functions.phpで、$query->get( ‘cat’ );
    では、IDを取得できなかったので、

    $categoryname = single_cat_title(”,false);
    $categoryid = get_cat_ID($categoryname);
    のように、カテゴリ名を取得→IDを取得し、

    教えていただいた、cat_is_ancestor_of で、求めていた動きが実現できました。

    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「pre_get_postsフィルターについて」には新たに返信することはできません。