簡體   English   中英

使用高級自定義字段過濾和排序 wordpress get_posts

[英]filter and sort wordpress get_posts with advanced custom fields

我有兩個使用高級自定義字段創建的自定義字段。 一種是復選框類型(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 ); 

這是有效的。 但是,如果我想按類型日期的自定義字段 closed_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?

我還想補充一點,我正在使用兩種語言 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.是的,這可以在一次調用中嘗試上面的代碼,或者如果不工作,那么試試這個。

$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 is Yes 如上例所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM