按 metabox 值自定义 post 类型查询
Custom post type query by metabox value
我已经为“投资组合”创建了一个自定义 post 类型,其中包含一个带有许多额外字段的自定义元框,其中之一是一个复选框,我用它来确定是否 post type 包含一个案例研究,但我遇到了一个障碍,我看不出哪里出了问题。复选框的输出是 'yes' 或 ''.
我的 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 显示元值确实存在并且等于 'yes'。 (如果我注释掉 meta_key/meta_value 行,自定义 post 类型的所有 post 都会显示)
有人看到我没看到的东西吗?
试试下面的代码,可能对你有帮助。
$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 );
万一它对任何人有帮助...我无法找到一种优雅的方式将这个额外的过滤器合并到我的查询中,但是因为这个项目的自定义 post 类型将很少(少于 30 ) posts,我选择在我的循环中简单地添加一个 IF 语句以仅过滤匹配 case_study
字段的 posts:
$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;
我觉得这样做很笨拙,而不是找到一种方法来过滤查询,但为了继续使用此页面,它确实如此。
我已经为“投资组合”创建了一个自定义 post 类型,其中包含一个带有许多额外字段的自定义元框,其中之一是一个复选框,我用它来确定是否 post type 包含一个案例研究,但我遇到了一个障碍,我看不出哪里出了问题。复选框的输出是 'yes' 或 ''.
我的 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 显示元值确实存在并且等于 'yes'。 (如果我注释掉 meta_key/meta_value 行,自定义 post 类型的所有 post 都会显示)
有人看到我没看到的东西吗?
试试下面的代码,可能对你有帮助。
$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 );
万一它对任何人有帮助...我无法找到一种优雅的方式将这个额外的过滤器合并到我的查询中,但是因为这个项目的自定义 post 类型将很少(少于 30 ) posts,我选择在我的循环中简单地添加一个 IF 语句以仅过滤匹配 case_study
字段的 posts:
$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;
我觉得这样做很笨拙,而不是找到一种方法来过滤查询,但为了继续使用此页面,它确实如此。