Получить все значения поля ACF во всех сообщениях и ссылки на сообщения

#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;
}