WP_QUERY用于打印帖子(如果有X个自定义字段值

时间:2021-06-23 作者:Puneet Verma

如果任何帖子都有自定义字段值X,我会尝试打印帖子。我的代码工作正常,但如果自定义字段有多个值X、Y、Z,这就不起作用。Location是CF Meta,X是value。在这里[get_post_meta(get_the_ID(), \'Location\', true)));] Location Meta也插入到我想要输出的页面上,并且在该页面上还有CF值X。如果帖子的值是X、Y、Z,那么代码无法打印帖子。抱歉,这里缺乏解释技巧。

<?php
    $posts = get_posts(array(
    \'numberposts\' => 10,
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\',
    \'orderby\' => \'date\',
    \'meta_key\' => \'Location\',
    \'meta_value\' => get_post_meta(get_the_ID(), \'Location\',true)));
    if($posts) {
        foreach($posts as $post) {
?>
          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
         <?php 
             }
         } 
         ?>
         <?php wp_reset_query(); ?>

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

你可以使用meta_query, 它可以处理数组和字符串。

就像这样

// get location meta, will be easier to determine what is the type of value
$location = get_post_meta(get_the_ID(), \'Location\',true);

$posts = get_posts([
    \'posts_per_page\' => 10,
    \'post_type\'      => \'post\',
    \'post_status\'    => \'publish\',
    \'orderby\'        => \'date\',
    \'meta_query\'     => [
        [
            \'key\'     => \'Location\',
            \'value\'   => $location,
            \'compare\' => is_array($location) ? \'IN\' : \'=\'
        ]
    ]
]);
现在你可以像往常一样做剩下的事情了。

所以我们在这里做的是

获取和分配Location 元到变量,$locationmeta_queryget_permalink() 和the_title() 将输出/返回当前帖子的链接和标题,而不是循环帖子。

使用时get_posts() 它们可以作为对象属性使用,如下所示

foreach($posts as $post) {
    $post->post_title; // the post title
    get_permalink($post->ID) // the looped post permalink, we need to pass the looped post ID as argument to "tell" get_permalink what link we need
}