Сетка сообщений Wordpress сортируется по настраиваемому полю только тогда, когда оно имеет значение

У меня есть настраиваемое поле для сообщений с именем «сортировать по дате». Я хочу иметь возможность сортировать свою настраиваемую сетку по дате создания сообщения, если только это пользовательское поле «сортировка по дате» не имеет значения... другими словами, если пользовательское поле имеет значение, я хочу, чтобы WordPress взял эту дату и использовал ее. для целей сортировки.

Прямо сейчас у меня есть переменные, определенные как

$fields['customDate'] = get_field('updated_date', $post->ID);
    
    if (!empty($fields['customDate'])) {
            $fields['orderDate'] = $fields['customDate'];
        } else {
        $fields['orderDate'] = get_the_date('Ymd', $post);
    }

Для отображения дат на странице это отлично работает <?php echo date('F j, Y', strtotime($fields['orderDate']));?>

Для моего запроса у меня есть

$posts = get_posts(array(
            'post_type' => 'post',
            'numberposts' => $numberposts,
            'tax_query' => $taxQueries,
            'post__not_in' => $exclusions,
            
            'orderby' => array(
                'orderDate' => 'DESC'
            )
            ));

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

Есть ли способ сортировки путем объединения двух полей (дата создания и настраиваемое поле), чтобы, если настраиваемое поле имеет значение, использовать его для сортировки, если не использовать дату создания публикации?

Заранее спасибо!

Я ответил на ваш вопрос. В целом гораздо лучше сохранять даты в формате mysql и преобразовывать их при отображении. может лучше сортировать и т. д.

Moishy 11.11.2022 17:10
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
Тенденции развития PHP - почему люди выбирают его?
Тенденции развития PHP - почему люди выбирают его?
Framework ранее был известен как Personal Home Page, а затем был переименован в Hypertext Preprocessor. Это наиболее широко используемый язык для...
Принцип подстановки Лискова
Принцип подстановки Лискова
Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь...
0
1
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Определите функцию сортировки

function my_sort($a,$b){
    $t1 = strtotime($a['date']);
    $t2 = strtotime($b['date']);
    return $t1 - $t2;
}

Получить все идентификаторы сообщений

$post_ids = get_posts(array(
    'fields' => 'ids',
    'post_type' => 'post',
    'numberposts' => $numberposts,
    'tax_query' => $taxQueries,
    'post__not_in' => $exclusions,
));

Установите массив для последующего использования

$get_posts = $post_ids = array();

Прокрутите идентификаторы и проверьте, установлено ли мета-значение и сохранено ли оно в новом массиве.

foreach($post_ids as $id){
    $updated_date = get_field('updated_date', $id);
    $date = $updated_date ? $updated_date : get_the_date('Ymd', $id);
    $get_posts[] = array('id' => $id, 'date' => $date );
}

Сортировка нового массива записей

usort($get_posts, 'my_sort');

Перебрать отсортированный массив и получить идентификаторы

foreach($get_posts as $p ){
    $post_ids[] = $p['id'];
}

И, наконец, получить сообщения из отсортированного массива, упорядоченного нашей сортировкой

$posts = get_post(array(
    'posts_per_page' => -1,
    'post_type' => 'post',
    'post__in'  => $post_ids,
    'order' => 'DESC',
    'orderby'=> 'post__in',
));

Другие вопросы по теме