Отсортируйте по моим потребностям в цикле foreach, например, по заголовку или чему-то еще?

Вопрос или проблема

в 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, создавая удобные и функциональные решения для управления контентом.

Оцените материал
Добавить комментарий

Капча загружается...