Wordpress Wp_query и проблема метазапроса с полем даты

У меня есть проекты, вставленные как сообщения в мою базу данных 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» хранит дату в виде строки, поэтому я думаю, что поэтому не сравнивает дату. моя конечная цель, как я описал выше, должно отображать всего 3 проекта. сначала должно быть сегодня истекает, а затем после последней публикации.

$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
            )
    ));

пожалуйста, проверьте изображение ниже для справки. Wordpress Wp_query и проблема метазапроса с полем даты

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

Можете ли вы поделиться примером значения для поля ign_fund_end? и вы используете acf для создания настраиваемого поля?

Saqib Amin 01.04.2019 12:49

@SaqibAmin я добавил одно изображение для ссылки на значение. пожалуйста, проверьте. Спасибо

Code Embassy 01.04.2019 12:53

Спасибо за публикацию скриншота. Вам нужно будет изменить формат сохранения для этого поля на формат Y-m-d, чтобы он работал правильно.

Saqib Amin 01.04.2019 12:55

@SaqibAmin невозможно ли изменить str на дату во время запуска запроса?

Code Embassy 01.04.2019 13:00

Это преобразование будет невозможно. Вы можете легко изменить формат сохранения мета-ключа, можете ли вы упомянуть плагин, который вы используете для создания настраиваемого поля?

Saqib Amin 01.04.2019 13:02

@SaqibAminnot уверен, потому что он уже в форме. если я предоставлю вам teamviewer, вы можете проверить?

Code Embassy 01.04.2019 13:04

Давайте продолжить обсуждение в чате.

Saqib Amin 01.04.2019 13:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
2 993
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам просто нужно удалить 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

Да, но. я хочу сравнить две даты, тогда он сравнит обе даты, используя >=

Code Embassy 01.04.2019 13:14

Но meta_value поле не DATE типа, поэтому оно не работает

Gufran Hasan 01.04.2019 13:15

@CodeEmbassy, ​​посмотрите это решение. wordpress.stackexchange.com/a/50187/137328

Gufran Hasan 01.04.2019 13:19
Ответ принят как подходящий

Поскольку ваше пользовательское поле 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'
    )
));

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