我的索引中有一个循环。php用于我的主页,如下所示。。。
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
我有一个按升序日期查询帖子的功能。。。
function order_home_asc($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set(\'orderby\', \'date\');
$query->set(\'order\', \'asc\');
}
}
add_action(\'pre_get_posts\', \'order_home_asc\');
我被告知以上是查询帖子的最佳方式。
现在,我想通过特定的帖子元键(“job\\u status”)和值(“open”)以及日期和asc查询这些帖子。
我试过了,但没用。。。
function order_home_asc($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set(\'orderby\', \'date\');
$query->set(\'order\', \'asc\');
$query->set(\'meta_query, array(
array( \'key\', \'job_status\', \'value\', open, \'compare\', \'!=\' )
)
}
}
add_action(\'pre_get_posts\', \'order_home_asc\');
如果有一个更简单的解决方案,而不需要函数,那就太好了。
这和我的回路一样好吗?
<?php
$args = array( \'posts_per_page\' => 10, \'order\'=> \'ASC\', \'orderby\' => \'title\', \'meta-key\' => \'job_status\',\'meta_value\' => \'open\' );
$postslist = get_posts( $args );
foreach ( $postslist as $post ) :
setup_postdata( $post ); ?>
<?php the_title(); ?>
<?php
endforeach;
wp_reset_postdata();
?>
最合适的回答,由SO网友:Pieter Goosen 整理而成
您的语法完全错误meta_query
. 数组中的键/值对的格式应为\'key\' => \'value\'
. 您的格式为\'key\', \'value\'
在数组上下文中转换为0 => \'key\', 1 => \'value\'
. 这就是为什么你meta_query
不起作用。
你的失败也是由于没有很好的内务管理。作为您的meta_query
是书面的,很难正确阅读,因此您会错过明显的错误。
让我们以更可读的方式重写该部分
$meta_query = [
[
\'key\' => \'job_status\',
\'value\' => \'open\',
\'compare\' => \'!=\'
]
];
$query->set( \'meta_query\', $meta_query );
正如您所看到的,我的代码很容易阅读,并且很容易发现明显的错误。
如果需要在meta_query
, 只需添加另一个数组即可。
$meta_query = [
[
\'key\' => \'job_status\',
\'value\' => \'open\',
\'compare\' => \'!=\'
],
[
\'key\' => \'another key\',
\'value\' => \'another value\',
\'compare\' => \'!=\'
]
];
$query->set( \'meta_query\', $meta_query );