Получить заголовок сообщения WordPress в массиве

#php #arrays #wordpress

#php #массивы #wordpress

Вопрос:

Я хочу иметь заголовок сообщения WordPress в массиве.

У меня есть заголовки моих сообщений в моем пользовательском типе сообщений в виде имен людей с их фамилиями. Я хочу отображать свои сообщения в алфавитном порядке по их фамилиям и сохранять их в массиве. Как мне сделать это в цикле?

Ответ №1:

Вы можете получить сообщения для своего пользовательского типа сообщения, используя WP_Query , а затем просмотреть каждое из них, чтобы получить заголовки.

 // just get IDs rather than whole post object - more efficient
// as you only require the title
$post_ids = new WP_Query(array(
    'post_type' => 'custom_post_type_name', // replace with CPT name
    'fields' => 'ids',
    'orderby' => 'meta_value',
    'meta_key' => 'surname_field_name' // replace with custom field name
));

$post_titles = array();

// go through each of the retrieved ids and get the title
if ($post_ids->have_posts()):
    foreach( $post_ids->posts as $id ):
        // get the post title, and apply any filters which plugins may have added
        // (get_the_title returns unfiltered value)
        $post_titles[] = apply_filters('the_title', get_the_title($id));
    endforeach;
endif;
 

Преимущество использования WP_Query заключается в том, что оно не изменяет основной цикл на вашей странице, и вы можете получать сообщения в том порядке, который вам требуется, используя orderby вместе с именем настраиваемого поля, которое содержит фамилию.

Ответ №2:

Вы можете создать массив вне цикла, затем заполнить массив именами, а затем отсортировать массив.

 <?php
// the array for the names
$name_array = array();

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        $name_array[] = $post->title;
        //
        // Post Content here
        //
    } // end while
    if ( sizeof( $name_array ) > 0 ) {
      sort( $name_array );
    } // end if for sizeof()
} // end if
?>
 

Если вы не можете создать массив вне цикла, вы можете переместить его в if (have_posts() ) { .

Важное примечание: это решение содержит только имена в вашем текущем цикле, поэтому, если ваш запрос содержит не все записи или смещен / выгружен и т. Д., Тогда массив не получит все имена, которые у вас есть в вашем пользовательском типе записи. Если вы хотите иметь все имена в массиве, а ваш запрос цикла не содержит всех записей, тогда вам нужно выполнить запрос еще раз — только для заголовков (имен).