#wordpress #advanced-custom-fields
Вопрос:
Я создал поле ACF, в которое я могу добавить 1 ключевое слово для каждого сообщения. Теперь я хочу получить список всех ключевых слов, заданных во всех моих сообщениях, отсортировать его по алфавиту и добавить ссылку на сообщение, в котором оно было найдено. Каждое ключевое слово будет уникальным. Так что это было бы своего рода оглавление. Как я могу сделать это программно? Прямо сейчас я понятия не имею, как перебирать записи и получать значения полей.
Комментарии:
1. Здравствуйте. Спрашивать мнения не по теме для этого сайта. Если вы сможете переработать свой вопрос, включив в него пример кодирования того, что вы пробовали, тогда люди вам помогут.
2. Я немного изменил вопрос. Спасибо за вашу помощь.
3. @ReneDasbeck, это должно помочь :: advancedcustomfields.com/resources/query-posts-custom-fields и это для упорядочивания : advancedcustomfields.com/resources/orde-posts-by-custom-fields
Ответ №1:
Поместите следующую функцию в functions.php . Используйте его непосредственно в своем шаблоне или в качестве шорткода или w / e
function keywords_post_list() {
//We build our query for posts containing any value in meta field
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'meta_query' => array(
'key' => 'keyword', //change with your meta key
'value' => '',
'compare' => '!='
)
);
$query = new WP_Query($args);
global $post;
$items = array();
if($query->have_posts()):
while($query->have_posts()):
$query->the_post();
//Looping each post we collect the keyword and the link for a post.
//Grab any other information if you need and add in the array
$keyword = get_post_meta($post->ID,'keyword',true);
$link = get_the_permalink($post->ID);
//Our array
$items[] = array('keyword'=> $keyword,'link' => $link);
endwhile;
endif;
// We need to sort results by keyword currently ASC
array_multisort(array_column($items, 'keyword'), $items);
// If we need to sort DESC uncommnet bellow coment above
// array_multisort(array_column($items, 'keyword'),SORT_DESC, $items);
// error_log(print_r($items,true));
if($items):
echo '<ol class="keyword-list">';
foreach($items as $item):
$keyword = $item['keyword'];
$link = $item['link'];
echo '<li><a href="'.$link.'">'.$keyword.'</a></li>';
endforeach;
echo '</ol>';
endif;
}