Вопрос или проблема
в cpt я могу проверить некоторые значения (флажки) в метабоксе. Я могу получить доступ к этим значениям с помощью
$meta = get_post_meta(get_the_ID(), '_custom-meta-box', true );
после этого я делаю цикл foreach:
foreach ($meta as $key11 => $value11) {
if($meta[$key11] > 1) {
$my_postid11 = $value11;
$funktion11 = get_post_meta($my_postid11, 'funktion', true );
echo '<a href="'.get_the_permalink($my_postid11).'">'.get_the_title($my_postid11).' <div class="arrow"></div></a>';
} }
пока работает отлично. но: у меня нет представления, как упорядочить их по своим нуждам, как в обычном wp_query, например
$args=array('order'=>'asc','orderby'=>'wpse_last_word' );
Все, что мне нужно, это упорядочить результаты в цикле foreach по “wpse_last_word” или по заголовку…
Какие идеи?
Попробуйте следующий код, чтобы отфильтровать данные по заголовку в порядке возрастания:
$meta = get_post_meta(get_the_ID(), '_custom-meta-box', true );
$title_array = array();
foreach ($meta as $key11 => $value11) {
if($meta[$key11] > 1) {
$my_postid11 = $value11;
$title = get_the_title($my_postid11);
$id = $my_postid11;
$title_array[$id] = $title;
}
}
asort($title_array);
foreach ($title_array as $key22 => $value22) {
$my_postid22 = $key22;
$funktion11 = get_post_meta($my_postid22, 'funktion', true );
echo '<a href="'.get_the_permalink($my_postid22).'">'.$value22.' <div class="arrow"></div></a>';
}
Если вы пытаетесь отсортировать массив (по которому вы итератируете в цикле foreach) по чему-то, что вы узнаете в самом цикле, тогда это невозможно без предварительного получения этой информации.
Одним из способов сделать это было бы использовать цикл foreach заранее, чтобы получить эту информацию.
$array = [ 1, 8, 12, 16 ];
foreach ($array as $key => $entry) {
unset($array[$key]);
$array[$key]['value'] = $entry;
$array[$key]['title'] = uniqid(); // Это может быть вашим заголовком (
}
Возвращает
Array
(
[0] => Array
(
[value] => 1
Упорядочите по моим нуждам в цикле foreach, например по заголовку или что-то еще?
=> 5ecfb2ee803fa
)
[1] => Array
(
[value] => 8
Упорядочите по моим нуждам в цикле foreach, например по заголовку или что-то еще?
=> 5ecfb2ee803fd
)
[2] => Array
(
[value] => 12
Упорядочите по моим нуждам в цикле foreach, например по заголовку или что-то еще?
=> 5ecfb2ee803fe
)
[3] => Array
(
[value] => 16
Упорядочите по моим нуждам в цикле foreach, например по заголовку или что-то еще?
=> 5ecfb2ee803ff
)
)
Таким образом, вы можете упорядочить массив, используя функции сортировки PHP для массивов, чтобы упорядочить по 'title'
На что я указывал в своем комментарии, так это на то, что это совершенно возможно сделать с помощью wp_query
Если вы уже ищете посты и данные постов и метаданные – вы можете сделать это за один раз.
Если ваш $meta = get_post_meta(get_the_ID(), '_custom-meta-box', true );
получает массив идентификаторов постов.
$meta = get_post_meta(get_the_ID(), '_custom-meta-box', true );
$args = array(
'post_type' => 'my_custom_post_type',
'orderby' => 'tite',
'order' => 'ASC',
'post__in' => $meta,
);
Это будет ваш запрос.
Затем вы будете проходить через цикл, чтобы получить свои заголовки, постоянные ссылки и т. д.
Ответ или решение
Для того чтобы упорядочить результаты цикла foreach
в WordPress по определённому критерию, например по заголовку или мета-значению, необходимо выполнить несколько шагов. Давайте рассмотрим, как можно это реализовать.
Шаг 1: Получение данных
Ваша задача начинается с получения массива мета-данных. Вот несколько примеров:
$meta = get_post_meta(get_the_ID(), '_custom-meta-box', true);
На этом этапе $meta
должен представлять собой массив идентификаторов постов, которые вы хотите обработать.
Шаг 2: Сбор данных для сортировки
Чтобы отсортировать посты, мы должны собрать информацию в массив, который будет содержать как идентификаторы постов, так и, например, их заголовки. Это делается через дополнительный foreach
:
$title_array = array();
foreach ($meta as $key11 => $value11) {
if ($meta[$key11] > 1) {
$my_postid11 = $value11;
$title = get_the_title($my_postid11);
$title_array[$my_postid11] = $title; // Сохраняем заголовок с идентификатором поста
}
}
Здесь мы создаём ассоциативный массив $title_array
, где ключами являются идентификаторы постов, а значениями — их заголовки.
Шаг 3: Сортировка массива
Теперь, когда мы собрали информацию, необходимо отсортировать массив. Для этого мы можем использовать функцию asort()
или ksort()
, в зависимости от того, нужно ли нам отсортировать по значениям (заголовкам) или по ключам (идентификаторам):
asort($title_array); // Сортируем по заголовкам в восходящем порядке
Шаг 4: Цикл вывода отсортированных данных
Теперь вы можете пройтись по отсортированному массиву и вывести данные, как вам нужно. Вот как это можно сделать:
foreach ($title_array as $key22 => $value22) {
$my_postid22 = $key22;
$funktion11 = get_post_meta($my_postid22, 'funktion', true);
echo '<a href="' . get_the_permalink($my_postid22) . '">' . $value22 . ' <div class="arrow"></div></a>';
}
Альтернативный подход: Использование WP_Query
Существует более оптимальный способ получить и отсортировать посты сразу, используя WP_Query
. Это особенно эффективно, если вы уже получаете посты по их мета-данным:
$meta = get_post_meta(get_the_ID(), '_custom-meta-box', true);
$args = array(
'post_type' => 'my_custom_post_type',
'orderby' => 'title', // Или замените на ваше нужное поле сортировки
'order' => 'ASC',
'post__in' => $meta,
'orderby' => 'post__in' // Это важно, чтобы сохранить порядок IDs из $meta
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<a href="' . get_the_permalink() . '">' . get_the_title() . ' <div class="arrow"></div></a>';
}
wp_reset_postdata();
}
Заключение
Выбор подхода зависит от конкретных потребностей вашего проекта. Если изначально нужна только сортировка по заголовку, можно собрать массив и отсортировать его, как показано выше. Если же вам нужно получить и отсортировать посты сразу, лучше воспользоваться WP_Query
, что будет более эффективно и потребует меньше запросов к базе данных.
Эти методы помогут вам динамично получать и сортировать данные в WordPress, создавая удобные и функциональные решения для управления контентом.