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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何:在wordpress中自定义帖子类型的自定义类别存档页面相关的知识,希望对你有一定的参考价值。

我使用以下代码在插件中创建了archive-programs.php

$this->loader->add_filter('template_include', $plugin_public, 'programs_template');
public function programs_template($template) {
    if (is_post_type_archive('programs')) {
        $theme_files = array('archive-programs.php', 'Anthem/archive-programs.php');
        $exists_in_theme = locate_template($theme_files, false);
        if ($exists_in_theme != '') {
            return $exists_in_theme;
        } else {
            return plugin_dir_path(__FILE__) . 'archive-programs.php';
        }
    }
    return $template;
}

这按预期工作(上面的代码),我能够将我的程序存档布局到我想要的任何内容。现在的问题是我正在尝试使用以下代码为存档类别创建一个页面,但它无法正常工作。

$this->loader->add_filter('category_template', $plugin_public, 'programs_category_template');
public function programs_category_template($template) {
    if (is_post_type_archive('programs') && is_tax()) {
        $theme_files = array('archive-programs-category.php', 'Anthem/archive-programs-category.php');
        $exists_in_theme = locate_template($theme_files, false);
        if ($exists_in_theme != '') {
            return $exists_in_theme;
        } else {
            return plugin_dir_path(__FILE__) . 'archive-programs-category.php';
        }
    }
    return $template;
}

有谁知道如何为我的档案类别创建模板。我不想为每个类别手动创建模板文件。上面的代码只加载默认的Archive Category ptemplate

答案

尝试将过滤器从category_template更改为template_include

另一答案

Category template hook只能用于默认的Wordpress类别,而不能用于分类法。如果您尝试一些简单的代码(如下所示),您将看到自定义分类法或帖子类型存档将不使用text.php文件,但默认的WP类别将使用。

add_filter('category_template', 'testtemplates');
function testtemplates($template) {
    $template = plugin_dir_path( __FILE__ ) . 'text.php';
    return $template;
}

首先需要使用template_include过滤器。

您不能再使用is_post_type_archive了,因为您不再使用post-type archive,而是使用taxonomy存档。所以is_post_type_archive()返回false。 Is_tax()没问题,将返回true。

检查当前分类法的一个好方法是使用get_queried_object。它有自己的警告,但在这里有一个很好的目的。

add_filter('template_include', 'programs_category_template');

function programs_category_template($template) {    
    $term = get_queried_object();   
    $taxonomy = $term->taxonomy;

    $theme_files = array('archive-programs-category.php', 'Anthem/archive-programs-category.php');
    $exists_in_theme = locate_template($theme_files, false);

    $template = plugin_dir_path(__FILE__) . 'archive-programs-category.php';

    if ($taxonomy === 'programs' && is_tax()) { 
        $template = $exists_in_theme;   
    }

    return $template;
}

当使用分类术语(类别通常是指Posts帖子类型的默认WP类别)时,您的taxonomy template名称应该以taxonomy- keyword开头,而不是archive-。 archive关键字仅保留给CPT存档,不应用于分类术语存档。因此,在这种情况下,如果您的分类术语被命名为程序类别,那么它将是taxonomy-program-category.php。

以上是关于如何:在wordpress中自定义帖子类型的自定义类别存档页面的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在WordPress的自定义帖子类型中附加pdf文件?

如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?

如何在wordpress rest api中过滤自定义帖子类型的自定义字段?

用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询

php Wordpress:注册新的自定义帖子类型