按元框值自定义帖子类型查询
Posted
技术标签:
【中文标题】按元框值自定义帖子类型查询【英文标题】:Custom post type query by metabox value 【发布时间】:2022-01-10 07:05:47 【问题描述】:我为“portfolio”创建了一个自定义帖子类型,其中包含一个带有许多额外字段的自定义元框,其中一个是我用来确定此帖子类型是否包含案例研究的复选框,但我遇到了障碍,我看不出我哪里出错了。复选框的输出是“是”或“”。
我的 metabox 构建中的设置是:
<input type="checkbox" name="rccustom_fields[case_study]" value="yes" <?php if ( isset($meta['case_study']) && $meta['case_study'] === 'yes' ) echo 'checked'; ?>>
我可以通过输出看到这些值按预期存在:
$meta = get_post_meta( $post->ID, 'rccustom_fields', true );
print_r($meta);
但是,当我使用 args 提取基本 WP 查询来过滤这些结果时:
$args = array(
'numberposts' => -1,
'post_type' => 'portfolio',
'meta_key' => 'case_study',
'meta_value' => 'yes',
我没有得到任何返回,即使执行 print_r 显示元值确实存在并且等于“是”。 (如果我注释掉 meta_key/meta_value 行,自定义帖子类型的所有帖子都会显示)
有人看到我在这里看不到的东西吗?
【问题讨论】:
所有自定义字段都被包装到 rccustom_fields 数组中,以便更轻松地保存它们(至少这是我的理解——处理我不久前构建的东西,逻辑有点模糊)......如果我要查询 meta_key => 'rccustom_fields',我不知道如何进入该数组来测试 meta_value。 【参考方案1】:试试下面的代码,可能对你有帮助。
$args_portfolio = array (
'post_type' => 'portfolio',
'posts_per_page' => -1,
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'case_study',
'value' => 'yes',
'compare' => '=',
),
),
);
$data_portfolio = new WP_Query( $args_portfolio );
【讨论】:
是的,这应该可以,但由于某种原因它不是。我要回去重写整个自定义元框并删除数组。我知道使用长格式保存功能逐个字段地进行操作会起作用,并且真的不能再花时间在这里摆弄了。感谢您的帮助!【参考方案2】:以防万一它对任何人有帮助...我无法找到一种优雅的方式将此附加过滤器合并到我的查询中,但是因为该项目的自定义帖子类型将只有很少(少于 30 个)帖子,我选择在循环中简单地添加一个 IF 语句,以仅过滤与 case_study
字段匹配的帖子:
$portfolio_query = new WP_Query( $args_portfolio );
if( $portfolio_query->have_posts() ) :
echo '<ul>';
while( $portfolio_query->have_posts() ) : $portfolio_query->the_post();
$meta = get_post_meta( $post->ID, 'rccustom_fields', true );
if ( isset( $meta['case_study'] ) ) :
the_title();
endif;
endwhile;
echo '</ul>';
endif;
这样做对我来说感觉很笨拙,而不是找到过滤查询的方法,但为了继续浏览此页面,它确实如此。
【讨论】:
以上是关于按元框值自定义帖子类型查询的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress - 特色图像元框未显示在自定义帖子类型上