查询由post_object自定义字段过滤的帖子

时间:2014-03-29 21:41:37

标签: php wordpress custom-fields

我正在尝试查询任何已选择某个post_object作为其“父级”的帖子。父值必须与当前帖子的ID匹配。我已经能够通过查询此帖子类型的所有帖子,然后比较循环中的值来复制此功能,如下所示:

<?php
    $wp_query = new WP_Query();
    $wp_query->query(  array (
        'post_type' => 'my_post_type',
        'meta_key'=>'post_object_field'
)); 

if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <?php 
    $parent = get_field('post_object_field'); 
    $parentId = $parent->ID; ?>

    <?php if ($postId == $parentId): ?>

        // content 

    <?php endif; ?>
<?php endwhile; endif; ?>

我很想知道是否有办法在查询中检查这个值,如果是,那么它是否更快或更正确。

3 个答案:

答案 0 :(得分:2)

要获取给定帖子/页面的子项的所有帖子/页面,您可以使用参数post_parent,使用父帖子的ID。

例如,如果您有帖子

$wp_query->query(  array (
    'post_type'    => $children_post_type
    'post_parent'  => $postId
)); 

当然,是的,执行查询将比执行查询+获取字段值+创建变量+循环结果进行比较更有效...


编辑 :根据您的评论,您似乎真的想要在发布对象。此字段包含一个数字,它是与其相关的帖子的ID,因此您只需在查询中添加参数meta_value_num

$wp_query->query(  array (
    'post_type'      => 'my_post_type',
    'meta_key'       => 'post_object_field'
    'meta_value_num' => $postId
));

这将检索包含post_object_field值为$postId的自定义字段的所有帖子。


编辑 :试试这个:

$args = array(
'post_type'  => 'my_post_type',
'meta_query' => array(
    array(
        'key'     => 'post_object_field',
        'value'   => $postId,
        'compare' => '='
    )
)
);

答案 1 :(得分:1)

我能够使用以下方法在查询中过滤结果:

<?php
    $wp_query = new WP_Query();
    $wp_query->query(  array (
        'post_type' => 'my_post_type',
        'meta_query' => array(
            array(
                'key' => 'post_object_field',
                'value' => $postId,
                'compare' => '=='
            )
         )
    )); 

if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    // content 

<?php endwhile; endif; ?>

答案 2 :(得分:1)

<?php
$wp_query = new WP_Query();
$wp_query->query(  array (
    'post_type' => 'my_post_type',
    'meta_query' => array(
        array(
            'key' => 'post_object_field',
            'value' => $postId,
            'compare' => '=='
        )
     )
)); 

if(have_posts()):while(have_posts()):the_post(); ?&GT;

// content 

enter code here