[英]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 );
這是行不通的。 更新 - 我設法讓這件事發揮作用。 我沒有改變任何東西,經過幾次測試后它起作用了....
有人可以回答這些問題中的任何一個(或全部)嗎?
我還想補充一點,我正在使用兩種語言 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.