【问题标题】:Query posts filtered by post_object custom field查询 post_object 自定义字段过滤的帖子
【发布时间】:2014-03-29 21:41:37
【问题描述】:

我正在尝试查询将某个 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; ?>

我想知道是否有办法在查询中检查此值,如果有,是否更快或更正确。

【问题讨论】:

    标签: php wordpress custom-fields


    【解决方案1】:

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

    例如,如果您有帖子

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

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


    编辑:根据您的 cmets,您似乎实际上是在尝试在 发布对象。该字段包含一个数字,即与它相关的帖子的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' => '='
        )
    )
    );
    

    【讨论】:

    • 感谢您的回答,但我应该更具体。父级的帖子类型与子级不同。有没有办法在帖子类型之间分配这些关系?
    • @johnnyd23,在查询中您应该使用儿童帖子的post_type!或者根本不设置任何post_type(就像我编辑的那样)。这样,您将检索父帖子的所有子帖子,无论其帖子类型如何...
    • 我已经在按帖子类型查询了。我需要按帖子类型以及自定义字段值进行查询。此自定义字段是 post_object,问题是我不知道如何检查该 post_object 的值
    • @johnnyd23,所以您不希望获得那些属于给定帖子的子帖子的帖子,但您想获得那些具有给定值的自定义字段的帖子,对吗?
    • @johnnyd23,如果您使用get_field() 函数,Post Object 字段会“返回”WP_Object。但是,如果您浏览 DB 表 wp_postmeta,您会看到存储在 DB 中的是相关帖子的 Id(只是一个数字)作为字段的值。 ACF get_field() 函数使用该 ID 为您提供 WP_Object,但您应该能够使用该 ID 进行查询!您确定您使用的是正确的 post_typemeta_keymeta_value_num 并且查询没有返回任何内容?
    【解决方案2】:
    <?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() ) : 而 ( have_posts() ) : the_post(); ?>

    // content 
    

    enter code here

    【讨论】:

      【解决方案3】:

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

      <?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; ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-29
        • 2021-07-17
        • 2021-01-03
        • 2015-07-14
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多