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

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






Вам просто нужно удалить 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
Да, но. я хочу сравнить две даты, тогда он сравнит обе даты, используя >=
Но meta_value поле не DATE типа, поэтому оно не работает
@CodeEmbassy, посмотрите это решение. wordpress.stackexchange.com/a/50187/137328
Поскольку ваше пользовательское поле 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'
)
));
Можете ли вы поделиться примером значения для поля
ign_fund_end? и вы используете acf для создания настраиваемого поля?