获取所有自定义帖子的后Meta值-从最低到最高的年份计数?

时间:2013-01-20 作者:mathiregister

可能很难描述:

我有一个custom-post-type 调用wr_event 还有一个自定义字段event_date.

我有很多帖子,每个帖子都设置了event_date. 非常直截了当。

我现在想做的就是列出events 已发布。所以我想要这个…

2012 | 2011 | 2010 | 2009 | 2008
我该怎么做?我曾想过遍历所有帖子并列出年份,但不知何故,我不知道如何做到这一点。

  $loop = new WP_Query( $args );
  while ( $loop->have_posts() ) : $loop->the_post();
      global $post;
      $this_year = get_post_meta( $post->ID, \'event_date\', true );
      $this_year = date(\'Y\', $this_year);
      echo $this_year;
  endwhile;
这样做的最佳和最简单的解决方案是什么?

UPDATE

    rsort( $years ); // sorts the years array into reverse order
    foreach ($years as $year) {
        echo \'<a href="#\'.$year.\'" name="y\'.$year.\'" class="inactive">\'.$year.\'</a> <span class="sep">|</span> \';
    }

1 个回复
最合适的回答,由SO网友:Simon Blackbourn 整理而成

像这样的东西应该可以完成这项工作:

global $post;
$years = array();
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
    $this_year = get_post_meta( $post->ID, \'event_date\', true );
    if ( $this_year = date( \'Y\', $this_year ) ) {
        if ( ! in_array( $this_year, $years ) ) {
            $years[] = $this_year;
        }
    }
endwhile;
rsort( $years ); // sorts the years array into reverse order
echo implode( \' | \', $years );
要减少查询,可以将所有内容保存到transient:

global $post;
$transient = \'all-post-years\';
$timeout   = 14400; // 4 hours

if ( false === $out = get_transient( $transient ) ) {

    $years = array();
    $loop  = new WP_Query( $args );

    while ( $loop->have_posts() ) : $loop->the_post();
        $this_year = get_post_meta( $post->ID, \'event_date\', true );
        if ( $this_year = date( \'Y\', $this_year ) ) {
            if ( ! in_array( $this_year, $years ) ) {
                $years[] = $this_year;
            }
        }
    endwhile;

    rsort( $years ); // sorts the years array into reverse order

    foreach ( $years as $year ) {
        $out .= \'<a href="#\' . $year . \'" name="y\' . $year . \'" class="inactive">\' . $year . \'</a> <span class="sep">|</span> \';
    }

    if ( $out ) {
        set_transient( $transient, $out, $timeout );
    }

}

echo $out;

结束

相关推荐

Search outside of the "loop"

我正在创建一个只使用Wordpress后端的博客。我找到了获取最新帖子(wp\\u get\\u recent\\u posts)和我所需的所有数据的函数。我通过包含wp负载来实现这一点,这样我就可以访问wp的功能。然而,我找不到任何允许我在Wordpress的主题循环之外进行搜索的内容,因为我对其余的数据进行了搜索。我希望有一个搜索功能,我可以通过它传递一个搜索查询,可以是标题、正文内容或标签名。如果我在文档中遗漏了一些显而易见的东西,那么在WP的“循环”之外,似乎还有一个功能可以满足我需要的所有其他东