根据帖子id和自定义字段值查询自定义帖子类型

时间:2013-02-04 作者:Ray Gulick

这里的某个地方可能有答案,但我找不到它,如果我找到了,也无法识别它。情况如下:

我有一个自定义的帖子类型“region”,它显示在单个区域上。php。地区名称为北、南、东、西。

我有另一个自定义帖子类型“news”。与之关联的是一个名为“news\\u region”的自定义字段。创建新闻项时,作者需要为news\\u region(All、N、S、E、W)指定一个值。

我希望在North region页面上列出news\\u region值为“all”或“N”的所有新闻项目。

最终版本有效(感谢@milo让我走上正轨):

// get title of region page for comparison with news_region key
$this_region = get_the_title($post->ID);
// query news items with news_region All or $this_region
$args = array(
    \'post_type\' => \'news\',
    \'posts_per_page\' => 4,
    \'meta_query\' => array(
    \'relation\' => \'OR\',
        array(
            \'key\' => \'news_region\',
            \'value\' => \'All\',
            \'compare\' => \'LIKE\'
            ),
        array(
            \'key\' => \'news_region\',
            \'value\' => $this_region,
            \'compare\' => \'LIKE\'
            )
        )
    );
$newslist = new WP_Query( $args );
注意:将news\\u region的值更改为“All,North region,East region,South region,West region”,以匹配完整的地区名称(与single region.php的帖子标题相同)。

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

如果我理解正确,你想news_region meta_query IN 的比较All 或当前地区帖子标题的第一个字母(N, S, E, W)

// get first letter of this region post title
$this_region = substr($post->post_title, 0, 1);
// query news items with news_region All or $this_region
$args = array(
    \'post_type\' => \'news\',
    \'meta_query\' => array(
        array(
            \'key\' => \'news_region\',
            \'value\' => array( \'All\', $this_region ),
            \'compare\' => \'IN\'
        )
    )
);
$news_posts = new WP_Query( $args );

SO网友:mrwweb

@如果你想用你提出的解决方案来解决问题,米洛的答案是对的,但我认为把“地区”变成a taxonomy 这样更有意义。(有关背景知识,请阅读XY Problem.) 这是因为区域帖子类型的行为与默认分类法归档页面的行为完全相同。分类法也有更好的UI。

此外,默认情况下,分类术语有一个描述字段。虽然它不是在每个主题上都启用,但它很漂亮easy to add 到您的分类区域。php模板(假设您创建了一个名为region的分类法)。

最后,术语描述字段默认为纯文本,但Rich Text Tags 插件添加了一个很好的所见即所得编辑器来处理这个问题。

结束

相关推荐

使用IS_MAIN_QUERY选择特定页面上的自定义帖子类型

我一直在尝试实施安德鲁·纳辛讨论的一些想法http://wordpress.tv/2012/06/15/andrew-nacin-wp_query/ 在我的工作流中,特别是尝试不再使用query\\u帖子或新的WP\\u查询,而是更改主查询。到目前为止,我已经在我的主页上使用以下代码很好地实现了这一点:function some_name($query) { if ( $query->is_main_query() && $query->is_home() )