带有日期类型的自定义字段的 Wordpress 查询
Wordpress Query by Custom Field with date type
我想创建一个查询,其中应显示所有 post,其中自定义字段“expiration_date”大于今天的日期。
缩写形式:如果 post 的到期日期已到,则不应再在查询中显示
我试过这个片段:
<?php
$today = date("Y-m-d");
$args= array(
'tag' => 'Pinnwand',
'meta_query' => array(
'key' => 'expiration_date',
'type' => 'DATE',
'value' => $today,
'compare' => '>'
)
);
$my_query = new WP_Query($args); ?>
到期日期的格式例如 (2014-10-04)。
但我也尝试了双方的格式 "Ymd",更改比较类型,或将类型设置为 "NUMERIC",但没有任何帮助。结果是,post 将始终显示。
如果有人能帮助我就太好了!
您可以进行两次查询排除。第一个查询找到所有要排除的 posts,然后遍历这些并将 post ID 存储在一个数组中,然后调用第二个查询排除它们使用 'post__not_in' 和 ID 数组作为参数。
我会为此使用 $wpdb 对象,因为它非常高效。
供参考material:
http://codex.wordpress.org/Class_Reference/WP_Query 和
http://codex.wordpress.org/Class_Reference/wpdb
这段代码应该做你想做的或让你接近它,我也把你的标签部分保留在那里。
// first query to find exclusions
$today = date("Y-m-d");
$exclusions = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE expiration_date < ".$today);
if ( $exclusions ) {
foreach ( $exclusions as $exclusion ) {
$excludeIDs[] = $exclusion->ID;
}
}
// second query using exclusion array
$args= array(
'tag' => 'Pinnwand',
'post__not_in' => $excludeIDs,
);
$my_query = new WP_Query($args);
好的,我发现错误了!
正确的查询还需要一个 array()。我不知道为什么,但在其他情况下,查询无法使用它。所以这是代码
$args= array(
'tag' => 'Pinnwand',
'meta_query' => array(
array(
'key' => 'expiration',
'type' => 'DATE',
'value' => $today,
'compare' => '>'
),
),
);
$my_query = new WP_Query($args); ?>
你可以做得更简单,如http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters所述:
$args= array(
'tag' => 'Pinnwand',
'meta_key' => 'expiration',
'meta_type' => 'DATE',
'meta_value' => $today,
'meta_compare' => '>'
);
我想创建一个查询,其中应显示所有 post,其中自定义字段“expiration_date”大于今天的日期。 缩写形式:如果 post 的到期日期已到,则不应再在查询中显示
我试过这个片段:
<?php
$today = date("Y-m-d");
$args= array(
'tag' => 'Pinnwand',
'meta_query' => array(
'key' => 'expiration_date',
'type' => 'DATE',
'value' => $today,
'compare' => '>'
)
);
$my_query = new WP_Query($args); ?>
到期日期的格式例如 (2014-10-04)。 但我也尝试了双方的格式 "Ymd",更改比较类型,或将类型设置为 "NUMERIC",但没有任何帮助。结果是,post 将始终显示。
如果有人能帮助我就太好了!
您可以进行两次查询排除。第一个查询找到所有要排除的 posts,然后遍历这些并将 post ID 存储在一个数组中,然后调用第二个查询排除它们使用 'post__not_in' 和 ID 数组作为参数。
我会为此使用 $wpdb 对象,因为它非常高效。
供参考material: http://codex.wordpress.org/Class_Reference/WP_Query 和 http://codex.wordpress.org/Class_Reference/wpdb
这段代码应该做你想做的或让你接近它,我也把你的标签部分保留在那里。
// first query to find exclusions
$today = date("Y-m-d");
$exclusions = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE expiration_date < ".$today);
if ( $exclusions ) {
foreach ( $exclusions as $exclusion ) {
$excludeIDs[] = $exclusion->ID;
}
}
// second query using exclusion array
$args= array(
'tag' => 'Pinnwand',
'post__not_in' => $excludeIDs,
);
$my_query = new WP_Query($args);
好的,我发现错误了! 正确的查询还需要一个 array()。我不知道为什么,但在其他情况下,查询无法使用它。所以这是代码
$args= array(
'tag' => 'Pinnwand',
'meta_query' => array(
array(
'key' => 'expiration',
'type' => 'DATE',
'value' => $today,
'compare' => '>'
),
),
);
$my_query = new WP_Query($args); ?>
你可以做得更简单,如http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters所述:
$args= array(
'tag' => 'Pinnwand',
'meta_key' => 'expiration',
'meta_type' => 'DATE',
'meta_value' => $today,
'meta_compare' => '>'
);