我使用以下代码在插件中创建了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
答案 0 :(得分:0)
尝试将过滤器从category_template
更改为template_include
答案 1 :(得分:0)
Category template hook只能用于默认的Wordpress类别,而不能用于分类法。如果你尝试一些简单的代码,如下所示你会看到自定义分类法或帖子类型档案将不会使用text.php文件,但默认的WP类别将会使用。
is_post_type_archive()
首先需要使用template_include过滤器。
您不能再使用is_post_type_archive了,因为您不再使用帖子类型存档,而是使用分类存档。所以Is_tax()
返回false。 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;
}
没问题,将返回true。
检查当前分类法的一种好方法是使用get_queried_object。它有自己的警告,但在这里有很好的用途。
Specify which project file to use because this '[project folder]' contains more than one project file.
使用分类术语(类别通常是指帖子类型的默认WP类别)时,taxonomy template名称应以taxonomy- keyword开头,而不是archive-。 archive关键字仅保留给CPT存档,不应用于分类术语存档。因此,在这种情况下,如果您的分类术语被命名为程序类别,那么它将是taxonomy-program-category.php。