在 WordPress 里实现分类目录模板选择功能,能够让你针对不同的分类目录运用不同的模板进行展示。下面为你详细介绍实现步骤:

1. 创建自定义分类目录模板文件


首先,你要在主题目录下创建自定义的分类目录模板文件。模板文件的命名有一定规则,一般采用 category-{slug}.php 或者 category-{id}.php 的形式,其中 {slug} 是分类目录的别名,{id} 是分类目录的 ID。
例如,若有一个分类目录别名为 news,你可以创建一个名为 category-news.php 的文件;若分类目录 ID 为 5,则创建 category-5.php 文件。以下是一个简单的模板示例:
收起
php
<?php
/**
 * Template Name: Custom Category Template for News
 */
get_header();
?>

<div id="primary" class="content-area">
    <main id="main" class="site-main">

        <?php if ( have_posts() ) : ?>

            <header class="page-header">
                <?php
                the_archive_title( '<h1 class="page-title">', '</h1>' );
                the_archive_description( '<div class="archive-description">', '</div>' );
                ?>
            </header><!-- .page-header -->

            <?php
            /* Start the Loop */
            while ( have_posts() ) :
                the_post();

                /*
                 * Include the Post-Type-specific template for the content.
                 * If you want to override this in a child theme, then include a file
                 * called content-___.php (where ___ is the Post Type name) and that will be used instead.
                 */
                get_template_part( 'template-parts/content', get_post_type() );

            endwhile;

            the_posts_navigation();

        else :

            get_template_part( 'template-parts/content', 'none' );

        endif;
        ?>

    </main><!-- #main -->
</div><!-- #primary -->

<?php
get_sidebar();
get_footer();

2. 使用自定义函数选择模板


如果你不想按照上述命名规则创建模板文件,也可以通过自定义函数来实现分类目录模板的选择。在主题的 functions.php 文件中添加以下代码:
收起
php
function custom_category_template( $single_template ) {
    global $post;

    // 获取当前分类目录的信息
    $category = get_the_category();
    if ( $category ) {
        $category_slug = $category[0]->slug;

        // 定义自定义模板文件路径
        $custom_template = get_stylesheet_directory() . "/category-{$category_slug}.php";

        // 检查自定义模板文件是否存在
        if ( file_exists( $custom_template ) ) {
            return $custom_template;
        }
    }

    return $single_template;
}
add_filter( 'category_template', 'custom_category_template' );

这段代码的作用是,当 WordPress 加载分类目录模板时,会先检查是否存在与当前分类目录别名对应的自定义模板文件。若存在,则使用该自定义模板;若不存在,则使用默认的分类目录模板。

3. 在后台管理界面提供模板选择选项


如果你希望在 WordPress 后台管理界面中为分类目录选择模板,可以借助插件或者自定义代码来实现。这里介绍一种通过自定义代码实现的方法。
首先,在主题的 functions.php 文件中添加以下代码:
收起
php
// 添加分类目录编辑页面的自定义字段
function custom_category_template_field() {
    $taxonomy = 'category';
    add_action( "{$taxonomy}_edit_form_fields", 'custom_category_template_edit_field' );
    add_action( "edited_{$taxonomy}", 'custom_category_template_save_field' );
}
add_action( 'admin_init', 'custom_category_template_field' );

// 显示自定义字段
function custom_category_template_edit_field( $term ) {
    $template = get_term_meta( $term->term_id, 'category_template', true );
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="category_template">Template</label></th>
        <td>
            <input type="text" name="category_template" id="category_template" value="<?php echo esc_attr( $template ); ?>" />
            <p class="description">Enter the name of the template file (e.g., category-custom.php).</p>
        </td>
    </tr>
    <?php
}

// 保存自定义字段的值
function custom_category_template_save_field( $term_id ) {
    if ( isset( $_POST['category_template'] ) ) {
        $template = sanitize_text_field( $_POST['category_template'] );
        update_term_meta( $term_id, 'category_template', $template );
    }
}

// 根据自定义字段选择模板
function custom_category_template_selection( $template ) {
    $category = get_queried_object();
    if ( $category && is_category() ) {
        $template_name = get_term_meta( $category->term_id, 'category_template', true );
        if ( $template_name ) {
            $custom_template = get_stylesheet_directory() . "/{$template_name}";
            if ( file_exists( $custom_template ) ) {
                return $custom_template;
            }
        }
    }
    return $template;
}
add_filter( 'category_template', 'custom_category_template_selection' );

这段代码会在分类目录编辑页面添加一个自定义字段,允许你输入要使用的模板文件名。当访问该分类目录时,WordPress 会根据你输入的模板文件名来选择相应的模板。
通过以上步骤,你就可以实现 WordPress 分类目录模板选择功能了。