如何在WordPress从头开始创建儿童分类页面?

时间:2019-11-21 作者:Roshan Khapung

正如我们所知,我们可以通过文件名category-category\\u name直接构建父类别页面。php。是否有任何这样的过程来为子类别页面创建页面。我有“大陆”-父类别和“国家”-子类别-我想创建一个带有scratch的国家页面。

1 个回复
SO网友:Levi Cole

我不完全明白你在问什么,但我猜。。。

假设您具有具有以下术语树的层次分类法(例如类别):

新闻(ID:1)世界(ID:2)非洲(ID:5)亚洲(ID:6)欧洲(ID:7)商业(ID:3)科学(ID:4)现在您可以访问/category/news/world/africa/ WordPress将查找以下模板:category-africa.phpcategory-5.php 但这两者都不存在,所以WordPress只能回到category.phparchive.php.

如果您在问“WordPress可以将树升级到第一个现有模板吗?”那就不行了。但您可以通过以下方式实现此功能。。。

/**
 * Recurisively check if a term or term parent has a specific template
 *
 * @param   WP_Term $term
 * @return  ?string
 */
function parent_term_template( WP_Term $term ) {

    /**
     * Find template by pattern: taxonomy_name-term_slug.php || taxonomy_name-term_id.php
     *
     * @link https://developer.wordpress.org/reference/functions/locate_template/
     * @var ?string
     */
    $template = locate_template( "{$term->taxonomy}-{$term->slug}.php" ) ?: locate_template( "{$term->taxonomy}-{$term->term_id}.php" );

    /**
     * If template exists, return it
     */
    if ( $template ) {
        return $template;
    }

    /**
     * Else, check if parent template exists
     */
    else if ( !empty( $term->parent ) ) {
        return parent_term_template( get_term_by( \'id\', $term->parent, $term->taxonomy ) );
    }

    /**
     * No template
     */
    return null;
}

/**
 * Filter the path of the current template before including it
 *
 * @link https://developer.wordpress.org/reference/hooks/template_include/
 */
add_filter( \'template_include\', function( string $template ) {

    /**
     * Apply to all taxonomies
     */
    if ( is_category() || is_tag() || is_tax() ) {

        /**
         * Get term specific template location
         *
         * @var string
         */
        $found = parent_term_template( get_queried_object() );

        /**
         * If template exists, return it
         */
        if ( $found ) {
            return $found;
        }
    }

    return $template;

} );
这将检查当前视图是类别、标记还是自定义分类法存档页。如果是这样,它将接受查询的术语并将其传递给递归函数,该函数在父级树上查找匹配的模板,直到找到一个为止。

例如,如果我们正在查看/category/news/world/africa/ 而且没有category-africa.php 模板,此代码将查找直接父模板。在这种情况下:category-world.php 如果不存在,它将移动到category-news.php 最后,如果这不存在,它将回到默认状态。

我仍然不知道这是否回答了你的问题,但它可能会帮助一些人!