按元框值自定义帖子类型查询

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 - 特色图像元框未显示在自定义帖子类型上

PHP wordpress自定义帖子类型元框和字段

Wordpress - 从自定义帖子类型查询第一个和名称

自定义元框 Save_Post 回调未在 functions.php 中触发

Wordpress 自定义元框多张图片上传

自定义帖子类型动作挂钩/瞬态