根据元键/值获取帖子

时间:2013-06-04 作者:Titan

我有一个自定义帖子类型“custom\\u author”,它是在使用带有字段键“selected\\u author”的元框下拉列表制作新帖子时选择的。

这就是我的wp\\U Posteta的样子:

enter image description here

其中13088是分配了“author”13112的博客文章。

我试图通过以下方式获取特定作者的所有帖子:

$args = array(
        \'post_type\'     => \'post\',
        \'post_status\'   => \'publish\',
        \'meta_query\' => array(
            array(
                \'key\' => \'chosen_author\',
                \'value\' => \'13112\' (tried with and without quotes)
            )
        )
    );

    $getPosts = new WP_Query($args);
但它只是返回我所有的帖子。

我做了一些调试:

$getPosts = new WP_Query($args);
echo $GLOBALS[\'wp_query\']->request;
以及该输出

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND (wp_posts.post_author != 0) AND wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\') ORDER BY wp_posts.post_date DESC LIMIT 0, 10
完全忽略meta\\u查询数组!

如果重要的话,在循环外使用

2 个回复
最合适的回答,由SO网友:Titan 整理而成

通过使用修复

get\\u posts($args),而不是新的WP\\u查询($args);

不知道为什么。。。

SO网友:birgire

问题似乎是您正在将数据保存为:

$a = array( "13112" );
update_post_meta( $post_id, "article_author", $a);
这将为您提供meta_value

a:1:{i:0;s:5:"13112";}
您的第一个查询将提供转义引号:

LIKE \'%\\"13112\\"%\'
方法1如果使用数字保存作者数组:

$a = array( 13112 );
update_post_meta( $post_id, "article_author", $a);
然后对应的meta_value 将是

a:1:{i:0;i:13112;}
因此,当您尝试元查询时:

 \'meta_query\' => array(
            array(
                \'key\' => \'article_author\',
                \'value\' => \':13112;\',
                \'compare\' => \'LIKE\'
            )
    )
相应的SQL部分将是

LIKE \'%:13112;%\'
你可以试着用这个来代替。

方法2另一种方法是用非转义引号删除转义引号:

add_filter(\'posts_where\',\'my_posts_where\');
$getPosts = new WP_Query($args);
remove_filter(\'posts_where\',\'my_posts_where\');
在哪里

function my_posts_where($where){    
    $where = str_replace(\'\\"\', \'"\', $where);    
    return $where;  
}
但我不想再提了。

结束

相关推荐