閲覧したカテゴリに応じてposts_per_pageオプションを設定する機能があります。
私は本当に理解できないエラーを発見しました。最初にこれが私がエラーを得る方法です:
function custom_posts_per_page($query) {
if ( !is_admin() && is_category(4)) {
// Leaving this empty or with content
}
}
add_filter( 'pre_get_posts', 'custom_posts_per_page' );
そのため、WP_Debugがtrueになっていて、存在しないカテゴリにアクセスしたときには、エラーが発生します。 http://localhost/zz/category/uncategorized
と入力しても問題ありませんが、例えばhttp://localhost/zz/category/aaaaaaaa
(カテゴリaaaaaaaaは存在しません)と入力すると、404ページに正しく移動しますが、次のエラーがスローされます。
Notice: Trying to get property of non-object in C:\xampp\htdocs\zz\wp-includes\query.php on line 3420
Notice: Trying to get property of non-object in C:\xampp\htdocs\zz\wp-includes\query.php on line 3422
Notice: Trying to get property of non-object in C:\xampp\htdocs\zz\wp-includes\query.php on line 3424
なにが問題ですか?
ちょっと調べた後….
カテゴリをis_category
に渡すと、データを取得するためにget_queried_object
を使用します - ソースを参照してください 。 get_queried_object
は存在しないカテゴリに対してNULL
を返します。あなたはそれを実証することができます:
function custom_posts_per_page($query) {
var_dump(get_queried_object());
}
add_filter( 'pre_get_posts', 'custom_posts_per_page' );
有効なカテゴリアーカイブをロードしてから、無効なアーカイブをロードしてください。
is_category
メソッドは、そのオブジェクトを使用しようとする前に、それが有効なオブジェクトを持っているかどうかをチェックしません。そのため、エラーになります。私は間違いなくそれをバグと考えるでしょう。
私がこれを回避する唯一の方法は、まずカテゴリの存在を確認することです。
function custom_posts_per_page($query) {
if ( !is_admin() && term_exists(4,'category') && $query->is_category(4)) {
// Leaving this empty or with content
}
}
add_filter( 'pre_get_posts', 'custom_posts_per_page' );
またはロジックを自分で処理します。
function custom_posts_per_page($query) {
if ( !is_admin() && $query->is_category()) {
$qobj = get_queried_object();
if (!empty($qobj)
&& (isset($qobj->taxonomy) && 'category' == $qobj->taxonomy && 4 == $qobj->term_id)
) {
var_dump($qobj);
}
// Leaving this empty or with content
}
}
add_filter( 'pre_get_posts', 'custom_posts_per_page' );
ほとんどテストされていません。おそらくバグがあります。買い手責任負担。返金なし。