我在WordPress的编辑类别页面中有带有自定义字段的类别模板。有一个自定义字段用于在分类页面中显示每页的帖子数量。我正在使用pre_get_posts
更改默认值posts_per_page
对于类别页面。
以下是我的功能:
function my_limit_posts_per_cat_page( $query ){
$cat_id = get_query_var(\'cat\');
$cat_data = get_option("category_$cat_id");
$category_posts_pp = \'\';
if(isset($cat_data[\'category_posts_pp\'])){
$category_posts_pp = $cat_data[\'category_posts_pp\']; //this is the custom field value available in edit category page
}
if(isset($cat_data[\'category_posts_pp\'])){
$post_show_limit = $category_posts_pp;
} else {
$post_show_limit = get_option(\'posts_per_page\'); //if the custom field is empty the Reading Settings posts per page will be using
}
if ( is_category() ){
$query->set( \'posts_per_page\', $post_show_limit );
return;
}
以及
pre_get_posts
我用于该功能的挂钩:
add_action( \'pre_get_posts\', \'my_limit_posts_per_cat_page\' );
问题是,没有在此处传递自定义字段值。无论我在编辑类别页面的自定义字段中输入什么,该值在我的函数中都不起作用。但是,相同的自定义字段值在其他地方也起作用(即模板页)。
然而,有时我看到自定义字段值在那里工作,但在这种情况下分页会产生问题。例如:类别页面中有19篇帖子,其中10篇是通过阅读设置设置的。因此,默认情况下将有2页。现在,如果在自定义字段中输入4,那么将有5页。正确显示分页中的5页。但是,这些页面一直持续到第二页。第3页、第4页和第5页不起作用。如果我们在阅读设置中设置7而不是10,那么分页的页面将一直工作到第3页,然后其余页面变为空白或404。
有人告诉我哪里出了问题吗?如果你需要更多的解释,请询问。
干杯
SO网友:Milo
如果启用了相当多的永久链接,并且访问了类别存档,则填充的查询变量为category_name
. 这个cat
只有在运行查询后,才会填充查询变量。因此,虽然您的代码将在模板中工作,但在pre_get_posts
为此原因采取的行动。
要解决此问题,需要从类别slug中获取类别ID:
function my_limit_posts_per_cat_page( $query ){
if( $query->is_main_query() && is_category() ){
$cat_slug = get_query_var( \'category_name\' );
$category = get_term_by( \'slug\', $cat_slug, \'category\' );
$cat_id = $category->term_id;
// the rest of your code using $cat_id goes here...
}
}
add_action( \'pre_get_posts\', \'my_limit_posts_per_cat_page\' );
注:此处的另一个补充是
$query->is_main_query()
将此代码限制为仅在主查询上运行。
开发时,我的一般建议是记录所有内容,并验证您使用的数据是否符合预期。在WordPress中,时间就是一切。