Вопрос или проблема
У меня есть пользовательский тип записи для деятельности на временной шкале.
Каждая запись имеет настраиваемое поле типа ДАТА. Имя поля: activity-date
Я использую плагин TYPES для пользовательского типа записи и настраиваемых полей.
Я хотел бы отсортировать эти записи по настраиваемому полю даты, я пробовал следующее, но это не сработало.
<?php $activities = new WP_Query( array(
'post_type' => 'timeline',
'posts_per_page' => -1,
'key' => 'activity-date',
'orderby' => 'meta_value_num',
'order' => 'ASC'
)); ?>
Правильный ключ массива для использования – это meta_key
, а не key. Вы можете использовать key
только как часть подмассива meta_query
, где часть ‘meta’ подразумевается.
Всё это описано в кодексе.
Попробуйте
<?php $activities = new WP_Query( array(
'post_type' => 'timeline',
'posts_per_page' => -1,
'meta_key' => 'activity-date',
'orderby' => 'meta_value_num',
'order' => 'ASC'
)); ?>
После долгих поисков выяснилось, что плагин TYPES хранит имя meta_key как
'meta_key' => 'wpcf-yourmetakey'
Решение:
<?php $activities = new WP_Query( array(
'post_type' => 'timeline',
'posts_per_page' => -1,
'meta_key' => 'wpcf-activity-date',
'orderby' => 'meta_value',
'order' => 'DESC'
));
?>
Ответ или решение
Для того чтобы отсортировать пользовательские типы записей по заданному полю даты в WordPress, необходимо использовать некоторые специфические параметры для настройки запроса. Вы упомянули, что используете плагин TYPES для создания пользовательских полей и типовых записей. Это имеет значение, так как плагин может изменять форматы хранения метаданных.
Шаг 1: Используйте правильный ключ для метаданных
При использовании плагина TYPES имя поля метаданных будет храниться в формате wpcf-{имя вашего поля}
. Поэтому в вашем случае, если ваше поле называется activity-date
, то оно будет храниться как wpcf-activity-date
.
Шаг 2: Правильный запрос WP_Query
Теперь давайте правильно настроим ваш запрос WP_Query, чтобы он использовал данный ключ. В вашем случае запрос должен выглядеть следующим образом:
<?php
$activities = new WP_Query( array(
'post_type' => 'timeline', // Укажите тип записи
'posts_per_page' => -1, // Получить все записи
'meta_key' => 'wpcf-activity-date', // Корректный ключ метаданных
'orderby' => 'meta_value', // Сортировка по метадатам
'order' => 'ASC' // Порядок сортировки
));
?>
Шаг 3: Вывод данных
Для вывода полученных данных в цикле используйте следующий код:
<?php if ( $activities->have_posts() ) : ?>
<ul>
<?php while ( $activities->have_posts() ) : $activities->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<span><?php echo get_post_meta( get_the_ID(), 'wpcf-activity-date', true ); ?></span> <!-- чтобы вывести дату -->
</li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p><?php _e('Нет записей для отображения.'); ?></p>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
Шаг 4: Проверка формата даты
Убедитесь, что поле activity-date
сохранено в правильном формате. Если вы используете стандартный формат даты (например, Y-m-d
) или метасостояния типа timestamp
, это упростит сортировку.
Если же у вас есть необходимость в сортировке по дате, но данные хранятся в другом формате, вам может понадобиться использовать meta_value_numeric
с обеспечением кратности формата (например, преобразование даты в timestamp).
Заключение
Теперь вы знаете, как правильно отсортировать пользовательские посты по пользовательскому полю даты, используя необходимые параметры и корректный формат для плагина TYPES. Следуя этим шагам, вы сможете вывести ваши записи в нужном порядке. Если у вас возникнут дополнительные вопросы или потребуется помощь в дальнейшей настройке, не стесняйтесь обращаться!