【问题标题】:How to get posts filtered by custom field that is post object type?如何按帖子对象类型的自定义字段获取帖子过滤器?
【发布时间】:2016-08-16 20:59:08
【问题描述】:

我想获取特定帖子类型的帖子,其中这些帖子具有帖子类型类型的自定义字段。

我有一个名为“旅游”的帖子类型,而旅游帖子类型有一个名为“国家”的自定义字段,它的类型是帖子对象。

查询他们的国家是“土耳其”的所有旅游:

$located_tours = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'tour',
    'meta_query'    => array(
        'key'       => 'country',
        'title'     => 'Turkey',
        'compare'   => 'LIKE'
    )
));

但此查询返回所有游览,没有对国家/地区进行任何过滤

有人知道吗? 谢谢

【问题讨论】:

    标签: php wordpress custom-post-type advanced-custom-fields


    【解决方案1】:

    首先,meta_queryexpects nested arrays,所以不是:

    'meta_query'  => array(
        'key'    => THE_KEY,
        'value'  => THE_VALUE,
    ),
    

    但是:

    'meta_query' => array(
        array(
            'key'     => THE_KEY,
            'value'   => THE_VALUE,
        ),
    ),
    

    请注意,compare 在您的情况下不是必需的,因为它的默认值为 =

    无论如何,你在这里有一个概念错误。如果您使用ACF 并且您的country 自定义字段类型为Post Object,则存储在数据库中的此字段的值不是title,而是相关帖子ID(您的返回格式 是 Post ObjectPost ID)。

    类似的东西(在你的wp_postmetatable 中):

    因此,您需要按国家/地区的ID 进行查询,而不是按国家/地区的标题。您可以使用get_page_by_title 来检索您想要的国家/地区ID:

    // Assuming your Country's CPT slug is 'country'
    $country = get_page_by_title( 'Turkey', 'OBJECT', 'country' );
    
    $tours_args = array(
        'posts_per_page'    => -1,
        'post_type'         => 'tour',
        'meta_query'        => array(
            array(
                'key'   => 'country',
                'value' => $country->ID
            )
        )
    );
    
    $located_tours = get_posts( $tours_args );
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      试试这个:

      $tour_args = array(
          'posts_per_page'   => -1,
          'post_type'     => 'tour',        
          'meta_query' => array(
           array(
              'key'     => 'country',
              'value'   => 'Turkey',
              'compare' => '=',
          ),
         ),
      );
      $located_tours =  new WP_Query($tour_args);
      

      【讨论】:

      • 感谢@vrajesh,但它仍然返回所有帖子
      猜你喜欢
      • 2015-07-14
      • 2019-11-24
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多