填充自定义WordPress帖子档案排除某些帖子类别

时间:2014-01-20 17:56:20

标签: php sql wordpress select archive

我根据找到的优秀代码 HERE为基于WordPress的博客编写了自定义归档显示。

基本上,它的作用是什么:

Custom archive image from www.wpbeginner.com

但我需要找到一种方法来过滤存档中某些属于不应该可存档的类别的帖子。例如,如果某个类别“Misc.Idements”包含的条目不是真正的帖子,那么博客的所有者不希望它们在帖子归档中可用。

我一直在寻找,找不到对我有用的东西。我认为 THIS 来源中的某些内容可能会对我有所帮助,但我正在测试这些内容并且无法为我工作。所以我转向你们。也许你有个主意......

我现在的PHP代码非常简单。显然,问题是在查询本身中过滤帖子,但我似乎无法找到适合我的查询。

为了满足特定需求,我已经对它进行了加/减小调整,基本上是从第一个来源获得的代码在这里给出:

global $wpdb;
$limit = 0;
if( is_date() ) {
    $year_now = get_the_time('Y');
} else {
    $year_now = date('Y'); 
}
$year_prev = null;
$months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC");
foreach($months as $month) :
$year_current = $month->year;
if ($year_current != $year_prev){
    if ($year_prev != null){
        // Do nothing
    }

    /* BREAK PHP HERE FOR SOME HTML */
    <li class="archive-year"><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/"><?php echo $month->year; ?></a></li>
    /* BACK ON REGULAR PHP */

}
if($year_current == $year_now) {

    /* BREAK PHP HERE FOR SOME HTML */
    <li class="archive-month"><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"><span class="archive-month"><?php echo date_i18n("F", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span></a></li>
    /* BACK ON REGULAR PHP */

}
$year_prev = $year_current;
endforeach;

1 个答案:

答案 0 :(得分:0)

好吧,似乎没有很多人有这个问题或对类似的东西感兴趣。然而,在遵循SO的本质时,如果有人遇到类似的问题,他们会很高兴地发现我能够通过使用我发现的一些东西来解决它并将它们粘在一起并且5小时的试验和错误,最后我想出了以下查询:

SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year, COUNT(id) as post_count FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
INNER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id != X AND $wpdb->term_taxonomy.parent != X
AND   $wpdb->term_taxonomy.term_id != Y AND $wpdb->term_taxonomy.parent != Y
AND   $wpdb->term_taxonomy.term_id != Z AND $wpdb->term_taxonomy.parent != Z
AND   $wpdb->term_taxonomy.taxonomy = 'category' 
AND   $wpdb->posts.post_status = 'publish' 
AND   $wpdb->posts.post_type = 'post' 
AND   post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC

X Y Z 将被类别ID号替换。 (您可以通过转到Wp-admin部分找到这些内容,您可以在其中编辑类别并将您希望隐藏的类别悬停在自定义存档中;您会注意到链接网址有&tag_ID=#部分,其中#是类别编号。)

嗯,这样做很好。希望它可以帮助那里的人!