Wordpress запрос пользовательское поле даты упорядочено по дням - PullRequest
1 голос
/ 24 марта 2020

У меня есть собственный тип поста, который называется "сотрудники". В этом у меня есть настраиваемое поле даты, которое называется «день рождения».

Теперь мне нужно запросить список всех дней рождений текущего месяца, упорядоченный по дню поля даты (дня рождения), а не по году.

Это то, что у меня пока есть:

<?php 
$current_month = date('m'); // get current month
$filter_month = $current_month; // show current month only
$args = array(
    'post_type'  => 'employees',
    'meta_key'=>'birthday',
    'posts_per_page' => -1,
    'orderby'=>'meta_value', 
    'order'=>'DESC', 
    'meta_query' => array(
        array(
            'key'     => 'birthday',
            'value'   => $current_month,
            'compare' => 'REGEXP',
            'value'   => '[0-9]{4}' . $filter_month . '[0-9]{2}',
        ),
    ),

);
$query = new WP_Query( $args );if ( $query ->have_posts() ) : ?>

С этим я получаю список вроде:

  • 05.03.2002 - Человек A
  • 11.03.1998 - Лицо B
  • 24.03.1995 - Лицо C
  • 03.03.1970 - Лицо D

Моя цель - список, предложенный день, а не год, например:

  • 03.03.1970 - лицо D
  • 05.03.2002 - лицо A
  • 11.03.1998 - лицо B
  • 24.03.1995 - Персона C

Любые подсказки для меня? Спасибо

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Итак, вот решение вашей проблемы. Я подумал, что было бы проще добавить дополнительные мета-поля, "birthday_month" и "birthday_day" - поэтому, если вы добавляете их в post_save ловушку, вам не нужно вводить какие-либо дополнительные данные.

add_action('save_post', 'he_add_birthday_details', 10, 1);
function he_add_birthday_details($postid){
// Check if birthday is set 
if (!empty(get_post_meta($postid, 'birthday', true))) {
    // if it is set - get it
    $birthday = get_post_meta($postid, 'birthday', true);
    // parse the date into components
    $month = date('m' , strtotime($birthday));
    $day = date('d', strtotime($birthday));
    // Save new postmeta fields
    update_post_meta($postid, 'birthday_month', $month);
    update_post_meta($postid, 'birthday_day', $day);
}

Тогда вы можете сделать свой l oop с новыми полями.

 $current_month = date('m'); // get current month
 $filter_month = $current_month; // show current month only
 $args = array(
    'post_type'  => 'employees',
    'posts_per_page' => -1,
    'meta_query' => array(
     array(
        'key'     => 'birthday_month',
        'value'   => $current_month
     ),
     'date_clause' => array(
        'key' => 'birthday_day',
        'compare' => 'EXISTS'
        )   
    ),
    'orderby' => 'date_clause',
    'order' => 'ASC'
 );

$posts = new WP_Query($args);
0 голосов
/ 24 марта 2020
    <?php 
 $current_month = date('m'); // get current month
 $filter_month = $current_month; // show current month only
 $args = array(
       'post_type'  => 'employees',
       'meta_key'=>'birthday',
       'posts_per_page' => -1,
       'orderby' => array(
               'birthday' => 'DESC',
               'meta_value'=> 'DESC',
        ),
    'meta_query' => array(
     array(
        'key'     => 'birthday',
        'value'   => $current_month,
        'compare' => 'REGEXP',
        'value'   => '[0-9]{4}' . $filter_month . '[0-9]{2}',
     ),
  ),
 );
    $query = new WP_Query( $args );if ( $query ->have_posts() ) : ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...