根据特定的帖子元值查询帖子

时间:2016-01-23 作者:Pete

我的索引中有一个循环。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();
?>

1 个回复
最合适的回答,由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 );

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the