Настройка — Сортировка Сообщений По Нескольким Значениям Мета-Ключей.

  • Автор темы Dima111111111
  • Обновлено
  • 19, Oct 2024
  • #1

Я не новичок в WordPress, но не очень хорошо разбираюсь в PHP. Надеюсь, кто-нибудь сможет мне помочь, так как я уже более 5 часов пытался найти решение, но безуспешно.

Итак, у меня есть страница archive.php, на которой я хочу отсортировать сообщения по 3 мета-ключам. Все они имеют числовые значения. Это названия метаполей: «vorstellung-filmdatum» (Дата), «vorstellung-uhrzeit-stunde» (Час) и «vorstellung-uhrzeit-минута» (Минута).

В данный момент я использую следующий код, но он сортируется только по последнему мета-ключу (в данном случае vorstellung-uhrzeit-mine).

 global $wp_query;
$args = array_merge( $wp_query->query, array( 'posts_per_page' => 12, 'meta_key' => 'vorstellung-filmdatum', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_key' => 'vorstellung-uhrzeit-stunde', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_key' => 'vorstellung-uhrzeit-minute', 'orderby' => 'meta_value_num', 'order' => 'ASC', ) );
query_posts( $args );
while (have_posts()) : the_post(); ?>
 

Как я могу изменить это, чтобы оно сортировалось по всем трем мета-ключам?

Я хочу, чтобы он сортировал сообщения следующим образом:

-- Дата 1

--- Час 1

------ Минута 1

------ Минута 2

--- Час 2

------ Минута 1

------ Минута 2

-- Дата 2

--- Час 1

------ Минута 1

и т. д.

Может ли кто-нибудь мне помочь?

#индивидуализация #заказ

Dima111111111


Рег
17 Apr, 2007

Тем
79

Постов
184

Баллов
589
  • 25, Oct 2024
  • #2

Я думаю, что лучшим способом было бы сохранить полную дату и время в одном метаполе, сохранить ее как метку времени в метаполе и преобразовать ее с помощью функций объекта datetime php для отображения.

Шаг 1)
Создайте метабокс с текстовым вводом для ввода даты+времени. Вы можете найти хорошее введение в метабоксы. здесь.

Шаг 1.5), если вы хотите, чтобы его было легко использовать, вы можете добавить плагин jquery для выбора даты/времени на экране редактирования сообщения, например Вот этот.

Шаг 2)
в функции myplugin_meta_box_callback преобразуйте метазначение $value в желаемый формат отображения, используя функции php datetime, например:

 
 
 
 $day = 0;
while $query->have_post {

$query->the_post;

$newday = get_post_meta(get_the_ID(),'NAME_OF_METAFIELD',true);

$newdate = date_create($newday);

$newday = date_format($newdate,'d');

if(!($newday==$day)) {

$day = $newday;

echo "Date:".date_format($newdate,'Y-m-d');

}

echo "Time:".date_format($newdate,'H:i');

//All the other stuff that needs to be displayed
}
 

Шаг 3)
В действии save_metabox преобразуйте значение даты/времени с помощью функции php strtotime в временную метку unix, например:

Заменять:

orderby

с:

$my_data = strtotime($_POST['myplugin_new_field']);

Шаг 4)
В своем архиве присвойте запросу запрос $my_data = sanitize_text_field( $_POST['myplugin_new_field'] ); "meta_value_num", ordering it by numerical meta values of your custom field

Шаг 5)
НЕ используйте query_posts.

Шаг 6)
Проверьте в цикле while, превышает ли день текущего метазначения день последнего метазначения.

if($value){ $date = date_create($value); $value = date_format($date, 'Y-m-d H:i'); }

Шаг 7)
Готово (более или менее)... Сделайте некоторые настройки.

Я не включил в этот час вопросы «если-то», но думаю, вы с этим разберетесь^^

 

Banana13


Рег
16 Jan, 2013

Тем
86

Постов
170

Баллов
620
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно