【问题标题】:filter and sort wordpress get_posts with advanced custom fields使用高级自定义字段过滤和排序 wordpress get_posts
【发布时间】:2016-06-30 05:51:06
【问题描述】:

我有两个使用高级自定义字段创建的自定义字段。 一种是复选框类型(isEvent),另一种是日期类型(close_date)。 如果我想获取所有事件的帖子,我会做这样的事情

<?php $args = array(
  'posts_per_page'   => 7,
  'offset'           => 0,
  'category'         => '',
  'category_name'    => '',
  'orderby'          => '',
  'order'            => '',
  'include'          => '', 
  'exclude'          => '',
  'meta_key'         => 'is_event',
  'meta_value'       => 'a:1:{i:0;s:4:"true";}',
  'post_type'        => 'events',
  'post_mime_type'   => '',
  'post_parent'      => '',
  'author'           => '',
  'post_status'      => 'publish',
  'suppress_filters' => 0 
);
$my_posts_array = get_posts( $args ); 

这是有效的。 但是,如果我想按类型为 date 的自定义字段 close_date 进行排序,则在 ACF 文档中进行排序建议我应该这样做:

<?php $args = array(
  'posts_per_page'   => 7,
  'offset'           => 0,
  'category'         => '',
  'category_name'    => '',
  'orderby'          => 'meta_value_num',
  'order'            => 'asc',
  'include'          => '', 
  'exclude'          => '',
  'meta_key'         => 'closing_date',
  'meta_value'       => '',
  'post_type'        => 'events',
  'post_mime_type'   => '',
  'post_parent'      => '',
  'author'           => '',
  'post_status'      => 'publish',
  'suppress_filters' => 0 
);
$my_posts_array = get_posts( $args );

这不起作用。更新 - 我设法让这件事发挥作用。我没有改变任何东西,经过几次测试后它起作用了......

有人可以回答这些问题中的任何一个(或全部)吗?

  1. 在 wordpress 中有两个自定义字段的方法是什么? 按一个排序并按另一个过滤?
  2. 这是否可以在一次 get_posts 调用中实现,或者是否有其他任何方法 原生 wp 技术?
  3. get_posts 是否可以同时包含 meta_key、meta_value 和 meta_query get_posts 的参数列表?

我还想补充一点,我正在使用具有 2 种语言 en 和 fr 的 WPML 翻译插件。

【问题讨论】:

    标签: php wordpress advanced-custom-fields wpml


    【解决方案1】:

    查询的写法是

    $my_posts_array = get_posts( array(
            'post_type'         => 'events',
            'posts_per_page'    => '7',
            'offset'            => 0,
            'post_status'       => 'publish',
            'suppress_filters'  => 0,
            'meta_query'        => array(
                array(
                    'key'       => 'is_event',
                    'value'     => 'a:1:{i:0;s:4:"true";}',
                    'compare'   => '='
                )
            ),
            'orderby'  => 'meta_value_num',
            'meta_key' => 'closing_date',
            'order'    => 'ASC',
            )
        );
    

    2.是的,这可以在一次调用中尝试上面的代码,或者如果没有,那就试试这个。

    $my_posts_array = get_posts( array(
        'post_type'         => 'events',
        'posts_per_page'    => '7',
        'offset'            => 0,
        'post_status'       => 'publish',
        'suppress_filters'  => 0,
        'meta_query'        => array(
            array(
                'key'       => 'is_event',
                'value'     => 'a:1:{i:0;s:4:"true";}',
                'compare'   => '='
            )
        ),
        )
    );
    
    // The Loop
    foreach ($my_posts_array as $key => $value) {
        $allowed_posts[] = get_the_ID();
    }
    
    
    $sorted_array = get_posts( array(
        'post_type'         => 'events',
        'posts_per_page'    => '7',
        'offset'            => 0,
        'post_status'       => 'publish',
        'suppress_filters'  => 0 ,
        'post__in'          =>  $allowed_posts,
        'orderby'           => 'meta_value_num',
        'meta_key'          => 'closing_date',
        'order'             => 'ASC',
    );
    
    foreach ($sorted_array as $key => $value) {
        //do the stuff here
    }
    

    【讨论】:

      【解决方案2】:

      好的, 我设法自己回答了这个问题。 1. 这是一种方法:

                   <?php $args = array(
                    'posts_per_page'   => 7,
                    'offset'           => 0,
                    'category'         => '',
                    'category_name'    => '',
                    'orderby'          => 'meta_value_num',
                    'order'            => 'ASC',
                    'include'          => '', 
                    'exclude'          => '',
                    'meta_key'         => 'closing_date',
                    'meta_value'       => '',
                    'post_type'        => 'events',
                    'post_mime_type'   => '',
                    'post_parent'      => '',
                    'author'           => '',
                    'post_status'      => 'publish',
                    'meta_query' => array(
                                  array('key' => 'is_event',
                                        'value' => 'a:1:{i:0;s:4:"true";}'
                                  )
                              ),
                    'suppress_filters' => 0
                  );
                  $my_posts_array = get_posts( $args ); 
      

      2。我假设您可以使用 WP_Query 以类似的方式完成此操作,因为 get_posts 我实际上使用此方法。 3.答案是肯定的,就像上面的例子一样。

      【讨论】:

        猜你喜欢
        • 2018-09-02
        • 2018-01-21
        • 1970-01-01
        • 2016-12-18
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 2016-06-10
        • 2017-08-28
        相关资源
        最近更新 更多