使用高级自定义字段筛选和排序wordpress get_posts

使用高级自定义字段筛选和排序wordpress get_posts

问题描述:

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

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

,这是工作。 但是如果我想通过closing_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在get_posts的参数列表中有相同的 参数列表中的meta_key,meta_value和meta_query吗?

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

编写查询的方式是

$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.Yes这是一个呼叫尝试上面的代码,或者如果没有woeking那么试试这个可能。

$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 
} 

好吧, 我设法自己回答这个问题。 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.Answer就像上面的例子一样。