获取发布帖子的年份列表

时间:2014-05-21 作者:MikO

我想从自定义帖子类型创建一个帖子列表,并添加一些过滤器,用户可以单击这些过滤器来过滤列表。

我使用get\\u terms()函数为所有类别添加了过滤器。现在我想按年份添加过滤器,所以我需要一种方法来检索至少有一篇文章发表的所有年份的列表。。。

我只需要这样的东西:

$years = get_all_years_with_posts();
// returns array( 2011, 2013, 2014 )
我知道我可以抓住所有的帖子,查看它们的年份,然后自己建立列表,但是没有其他方法吗?

4 个回复
SO网友:Gavin

你的问题很老了,但我只是想为你的问题添加一个真正的解决方案。这里有一个函数,它将返回您发布帖子的年份数组。您可以将此函数放入函数中。php或插件或任何你想要的东西。

function get_posts_years_array() {
    global $wpdb;
    $result = array();
    $years = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT YEAR(post_date) FROM {$wpdb->posts} WHERE post_status = \'publish\' GROUP BY YEAR(post_date) DESC"
        ),
        ARRAY_N
    );
    if ( is_array( $years ) && count( $years ) > 0 ) {
        foreach ( $years as $year ) {
            $result[] = $year[0];
        }
    }
    return $result;
}
对于自定义帖子类型,您需要稍微修改它。。。只需添加AND wp_posts.post_type = \'my_cpt\' 在那里的某个地方。

SO网友:Lou Jonker

您可以使用此函数获取数组中的所有post years,您可以使用它进行循环。

$terms_year = array(
    \'post_type\'         => array(\'YOUR_CPT\'),
);

$years = array();
$query_year = new WP_Query( $terms_year );

if ( $query_year->have_posts() ) :
    while ( $query_year->have_posts() ) : $query_year->the_post();
        $year = get_the_date(\'Y\');
        if(!in_array($year, $years)){
            $years[] = $year;
        }
    endwhile;
    wp_reset_postdata();
endif;

// Echo the years out wherever you want

echo \'<pre>\';
print_r($years);
echo \'</pre>\';

SO网友:JMau

您可以通过以下方式使用WP函数和短代码:

add_shortcode( \'archives\', \'_get_archived_posts\' );
function _get_archived_posts( $atts ) {

 $a = shortcode_atts( array(
    \'type\'            => \'yearly\',
    \'limit\'           => \'\',
    \'format\'          => \'\', 
    \'before\'          => \'\',
    \'after\'           => \'\',
    \'show_post_count\' => false,
    \'echo\'            => 0,
    \'order\'           => \'DESC\'
), $atts, \'filter_archives_sc\' );

    return wp_get_archives($a);
}

Source

SO网友:pipito
// Get all years posts publish;
function get_posts_years_array($post_type = \'post\') {

    global $wpdb;
    $result = array();

    $query_prepare = $wpdb->prepare("SELECT YEAR(post_date) FROM ($wpdb->posts) WHERE post_status = \'publish\' AND post_type = %s GROUP BY YEAR(post_date) DESC", $post_type);

    $years = $wpdb->get_results($query_prepare);

    if ( is_array( $years ) && count( $years ) > 0 ) {
        foreach ( $years as $year ) {
            $result[] = json_decode(json_encode($year), true);
        }
    }

    return $result;
}
结束

相关推荐

提交后重力表单-GFFormsModel::UPDATE_LEAD_FIELD_VALUE?

我在研究重力形态。此代码处理以下几个问题:add_action(\'gform_after_submission_14\', \'post_contract_update\', 10, 2); function post_contract_update($entry, $form) { $form =\'3\'; $lead = $entry[\'4\']; $statusvalue_update = \'Under Contract\';