WordPress Wp_query и мета-запрос проблема с полем даты - PullRequest
0 голосов
/ 01 апреля 2019

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

Например, сегодня истекает 2 проекта, а на главной странице будут отображаться 2 проекта, срок действия которых истекает сегодня, и 1 проект, который был опубликован последним.это означает, что в общей сложности будет отображаться 3 проекта.

проверьте ниже WP_query, который возвращает только последний опубликованный проект

$args = array('post_type' => 'ignition_product', 'posts_per_page' => $project_count, 'paged' => $paged);

$newargs = apply_filters('project_query', $args);
$wp_query = new WP_Query($newargs);

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

$args = array(
        'post_type' => 'ignition_product',
        'posts_per_page' => $project_count,
        'paged' => $paged,        
        'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'ign_fund_end', // Check the start date field
                'value' => date('m/d/Y'), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                'type' => 'DATE' // Let WordPress know we're working with date
            )
    ));

пожалуйста, проверьте изображение ниже для справки.enter image description here

Любое решение приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Поскольку ваше настраиваемое поле ign_fund_end не соответствует формату, совместимому с датой MySQL, это является основной причиной того, что WP_Query не работает ожидаемым образом.Я рекомендую сохранить временную метку даты окончания в пользовательском поле, используя save_post, а затем изменить $args на WP_Query для работы с этим полем.

Вот полное решение для вашей проблемы:

1: сохранить временную метку в пользовательском поле

add_action( 'save_post', function( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( $parent_id = wp_is_post_revision( $post_id ) ) {
        $post_id = $parent_id;
    }

    if( isset( $_POST['ign_fund_end'] ) && !empty($_POST['ign_fund_end']) ) {
        $end_date = $_POST['ign_fund_end'];
        $end_date = strtotime($end_date);
        update_post_meta( $post_id, '__end_date', $end_date );
    }
} );

2: изменить $args

$args = array(
    'post_type' => 'ignition_product',
    'posts_per_page' => $project_count,
    'orderby'   => 'meta_value_num',
    'order'     => 'ASC',
    'meta_key'  => '__end_date',
    'paged' => $paged,        
    'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
    array(
        'key' => '__end_date', // Check the start date field
        'value' => strtotime('today'), // Set today's timestamp
        'compare' => '>=', // Return the ones greater than today's date
        'type' => 'NUMERIC'
    )
));
0 голосов
/ 01 апреля 2019

Вам просто нужно удалить type из параметров массива.

$args = array(
        'post_type' => 'ignition_product',
        'posts_per_page' => $project_count,
        'paged' => $paged,        
        'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'ign_fund_end', // Check the start date field
                'value' => date('m/d/Y'), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                'type' => 'DATE' // Let WordPress know we're working with date
            )
    ));

Кому:

$args = array(
        'post_type' => 'ignition_product',
        'posts_per_page' => $project_count,
        'paged' => $paged,        
        'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'ign_fund_end', // Check the start date field
                'value' => date('m/d/Y'), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                //'type' => 'DATE' // Let WordPress know we're working with date
            )
    ));

Примечание: Причина в том, что в таблице meta_value нет типа DATE.

В PHPMyAdmin тип даты по умолчанию:

2019-04-16
...