Related posts meta_query CPT

时间:2014-04-27 作者:Behzad G.

我有两个帖子类型“艺术家”和“歌曲”,在“歌曲”中,我有一个带有“艺术家”姓名复选框列表的元框。

我想显示相关帖子,如果任何帖子具有与艺术家姓名相同的帖子元值:

wp_reset_postdata();
global $post;
$artist_name = get_post_meta(get_the_ID(), "artist_name", true);

$args = array(
    \'post_type\' => array(\'songs\'),
    \'meta_key\' => $artist_name
);

$query = new WP_Query;
return $query;
查询应自动显示具有相同元框值的帖子。

这是可能的?!

更多信息:

post type of artists names:

Meta box of artists names in Songs post type

Showing related songs by artists name in single page

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

我假设您正在尝试这样做:

$artist_name = get_post_meta(get_the_ID(), "artist_name", true);

$args = array(
    \'post_type\' => array(\'songs\'),
    \'meta_key\' => $artist_name,
);
$related = new WP_Query($args);
在你的问题中,你说你想要的帖子“具有相同的value 上面的代码不会搜索与关键字关联的值,而是搜索与艺术家匹配的关键字名称。请尝试:

$artist_name = get_post_meta(get_the_ID(), "artist_name", true);
var_dump($artist_name);    
$args = array(
    \'post_type\' => array(\'songs\'),
    \'meta_key\' => $artist_name,
);
$related = new WP_Query($args);
var_dump($related->request);
你应该看看发生了什么。

你想要的是这样的:

$artist_name = get_post_meta(get_the_ID(), "artist_name", true);
$args = array(
    \'post_type\' => array(\'songs\'),
    \'meta_key\' => \'artist_name\',
    \'meta_value\' => $artist_name,
);
$related = new WP_Query($args);
或者更复杂但更灵活meta_query:

$artist_name = get_post_meta(get_the_ID(), "artist_name", true);
$args = array(
    \'post_type\' => array(\'songs\'),
    \'meta_query\' => array(
      array(
        \'key\' => \'artist_name\',
        \'value\' => $artist_name,
      )
    )
);
$related = new WP_Query($args);
我会倾向于meta_query 因为它很好地封装了相关的“元”参数allows for more options.

当然,您必须循环返回结果才能返回任何有用的内容。例如:

if ($related->have_posts()) {
  while ($related->have_posts()) {
    $related->the_post();
    the_title(); 
    // etc
  }
}

结束

相关推荐

为自定义字段创建Metabox

我使用自定义字段将视频添加到WordPress帖子的视频格式中。我想知道是否有任何方法可以在post editor中为特定的自定义字段创建一个元框(如摘录或其他内容)。只需要一个文本区域来添加iframe代码。例如,自定义字段是嵌入视频。