填充不包括某些帖子类别的自定义 WordPress 帖子存档

Posted

技术标签:

【中文标题】填充不包括某些帖子类别的自定义 WordPress 帖子存档【英文标题】:Populating Custom WordPress Post Archive Excluding Certain Post Categories 【发布时间】:2014-01-20 17:56:19 【问题描述】:

我根据 HERE.

找到的优秀代码为基于 Wordpress 的博客编写了自定义存档显示

基本上,它的作用:

但我需要找到一种方法,从存档中过滤掉属于不应可存档类别的某些帖子。例如,如果类别“Misc. Ideas”包含并非真正帖子的条目,则博客的所有者不希望它们在帖子存档中可用。

我一直在寻找,但找不到适合我的东西。我认为 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】:

嗯,似乎没有多少人有这个问题或对类似的事情感兴趣。但是,在遵循 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

其中 XYZ 将替换为类别 ID 编号。 (您可以通过转到 Wp-admin 部分来编辑您的类别并将鼠标悬停在您希望从自定义存档中隐藏的那些类别上找到这些;您会注意到链接 URL 有一个 &amp;tag_ID=# 部分,其中 #是类别号。)

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

【讨论】:

以上是关于填充不包括某些帖子类别的自定义 WordPress 帖子存档的主要内容,如果未能解决你的问题,请参考以下文章

如何:在wordpress中自定义帖子类型的自定义类别存档页面

Wordpress - 如何通过其分类过滤添加的自定义帖子?

url中的wordpress自定义帖子类型类别slug

Wordpress:使用 wp_insert_post() 填充自定义帖子类型字段

在单个自定义帖子类型中显示所选类别(Wordpress)

从 Wordpress 中自定义帖子类型的类别中获取 ACF 文本字段值