#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() ) { .
Важное примечание: это решение содержит только имена в вашем текущем цикле, поэтому, если ваш запрос содержит не все записи или смещен / выгружен и т. Д., Тогда массив не получит все имена, которые у вас есть в вашем пользовательском типе записи. Если вы хотите иметь все имена в массиве, а ваш запрос цикла не содержит всех записей, тогда вам нужно выполнить запрос еще раз — только для заголовков (имен).