我需要修改主循环(index.php),以排除具有特定元值集的帖子(通过ACF真/假字段)。
function exclude_featured_post( $query ) {
if ( $query->is_home() && $query->is_main_query()) {
// in case for some reason there\'s already a meta query set from other plugin
$meta_query = $query->get(\'meta_query\')? : [];
// append yours
$meta_query[] = [
\'key\' => \'featured_post\',
\'value\' => \'1\',
\'compare\' => \'!=\'
];
$query->set(\'meta_query\', $meta_query);
}
}
add_action( \'pre_get_posts\', \'exclude_featured_post\' );
这不会返回帖子。我想我需要将其与主查询合并,例如:
global $wp_query;
$merged_args = array_merge( $wp_query->query, $exclude_featured_args );
$query->set(\'meta_query\', $merged_args);
然而,这也不会返回任何帖子。
Update:
使用“比较”=>“不存在”,而不是“比较”=>“!=”似乎返回所有帖子并排除meta\\u查询。
function exclude_featured_post( $query ) {
if ( $query->is_home() && $query->is_main_query()) {
// in case for some reason there\'s already a meta query set from other plugin
$meta_query = $query->get(\'meta_query\')? : [];
// append yours
$meta_query[] = [
\'key\' => \'featured_post\',
\'value\' => \'1\',
\'compare\' => \'NOT EXISTS\'
];
$query->set(\'meta_query\', $meta_query);
}
}
add_action( \'pre_get_posts\', \'exclude_featured_post\' );
从这里开始:
https://core.trac.wordpress.org/ticket/18158
最合适的回答,由SO网友:Misha Rudrastyh 整理而成
Dave,你的代码看起来不错,除了其中的一些东西,所以请尝试一下:
function exclude_featured_post( $query ) {
if ( is_front_page() && $query->is_main_query() ) {
$meta_query = $query->get(\'meta_query\') ? $query->get(\'meta_query\') : array();
// append yours
$meta_query[] = array(
\'key\' => \'featured_post\', // please make sure that key is correct
\'value\' => \'1\',
\'compare\' => \'!=\' // you can also try \'NOT EXISTS\' comparison
);
$query->set(\'meta_query\', $meta_query);
}
}
add_action( \'pre_get_posts\', \'exclude_featured_post\' );
如果上述代码不适用于您,请执行以下步骤:
确保它正在运行主页主查询-只需尝试回显其中的内容即可-此步骤可帮助您了解第2行的条件是否正确。
尝试使用更简单的参数,如orderby
等等。检查它是否工作。
在没有其他帖子的帖子中测试此代码meta_query
参数
尝试使用meta_key
, meta_value
和meta_compare
params而不是meta\\u query,示例如下https://rudrastyh.com/wordpress/meta_query.html
确保feature_post
是正确的,令人难以置信,但在我的学生中,这是最常见的错误。