基于单个帖子自定义字段的自定义查询

时间:2012-12-10 作者:stemie

我有一些帖子有一个yyyy-mm-dd格式的自定义字段日期。我想做的是在一个页面的侧面列出特定年份的所有帖子,该页面基于该帖子自定义字段中的年份,并分为几个月。

例如,如果帖子的自定义字段日期为1990,那么我想在页面的一侧列出1990年以来的所有帖子,并按月份排序。

我必须使用此自定义字段日期,不能使用Wordpress内部日期函数。

下面,我只提取了自定义字段date中的年份,用于查询,它返回了从单个post自定义字段的日期起到post的所有链接。此查询显示在single post循环外部的single post页面模板的一侧。

我想知道我现在如何把这些帖子分为几个月?所以一月之后是这个月的所有帖子链接,二月等等。。。

<?php
 $histyear = substr (get_post_meta($post->ID, "historic-date", true),0,4);
 $querystr = "
SELECT $wpdb->posts.* 
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND $wpdb->postmeta.meta_key = \'historic-date\' 
AND $wpdb->postmeta.meta_value = $histyear 
AND $wpdb->posts.post_status = \'publish\' 
AND $wpdb->posts.post_type = \'post\'
ORDER BY $wpdb->postmeta.meta_key = \'historic-date\' DESC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);

 ?>

 <?php if ($pageposts): ?>
 <?php global $post; ?>
 <?php foreach ($pageposts as $post): ?>
 <?php setup_postdata($post); ?>

 <div class="post" id="post-<?php the_ID(); ?>">
 <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
 <?php the_title(); ?></a></h3>
 </div>
 <?php endforeach; ?>
 <?php else : ?>

2 个回复
最合适的回答,由SO网友:M-R 整理而成

Mysql的Month function 我可以在这方面帮你。假设您的元值是SQL日期格式。

ORDER BY MONTH($wpdb->postmeta.meta_value) ASC

SO网友:takien

这是否有帮助:

$args = Array(
    meta_query => Array(
      Array(
      \'key\' => \'historic-date\',
       \'value\'=>Array(\'19900101\',\'19901231\'),
       \'compare\'=>\'BETWEEN\',
       \'type\'=>\'DATE\'
      )
        ),
\'posts_per_page\'=>5,
//other arg goes here
);
$query = new WP_Query($arg);

//loop query here.
仅当日期以YYYYMMDD格式存储并使用此格式测试时,“type”日期才与“compare”值一起使用。

参考号:http://codex.wordpress.org/Function_Reference/WP_Query#Custom_Field_Parameters

结束

相关推荐

数组内的wpdb结果数组

我正在尝试运行数据库查询,如下所示:$id = $_GET[\'id\']; $query = \'select * from \'; $query .= $wpdb->get_blog_prefix() . \'fxdescription \'; $query .= \'where id= \'.$id; $currency = $wpdb->get_results( $wpdb->prepare( $query ), ARRAY_A ); 执