📜  get_template_part 参数 - PHP (1)

📅  最后修改于: 2023-12-03 15:00:54.326000             🧑  作者: Mango

使用 get_template_part 函数参数

在 WordPress 主题开发中,我们经常需要在不同的页面或部分使用相同的代码块,比如微博、评论、侧边栏等。为了避免代码冗余,我们可以使用 get_template_part 函数来复用这些代码块。

语法
get_template_part( $slug, $name );
参数说明
  • $slug:代码块的文件名前缀,通常为 content, excerptsidebar 等;
  • $name:代码块的文件名后缀,通常为文章类型(如 post)、分类(如 category)等。

例如,我们要在文章循环中显示文章标题和摘要,可以在 index.php 中使用下面的代码:

while ( have_posts() ) : the_post();
    get_template_part( 'content', get_post_format() );
endwhile;

get_template_part 函数会自动查找 content-{$post_format}.php 文件,比如对于格式为“链接”的文章,会查找 content-link.php;对于无格式的文章,会查找 content.php。如果文件不存在,将不会有输出。

好处

使用 get_template_part 函数可以实现代码复用,避免代码冗余,提高代码的可维护性。

此外,使用 get_template_part 还可以更好地将代码组织为不同的模块,提高代码的可读性和可扩展性。如果要新增一个页面或代码块,只需要新增一个对应的模板文件即可,而不需要修改其他文件。

示例
在侧边栏中显示分类列表

sidebar.php 中使用下面的代码来显示所有分类的列表:

<section class="widget widget_categories">
    <h2 class="widget-title"><?php _e( 'Categories', 'textdomain' ); ?></h2>
    <ul>
        <?php
            $args = array(
                'orderby' => 'name',
                'order' => 'ASC'
            );
            $categories = get_categories( $args );
            foreach ( $categories as $category ) {
                $category_link = sprintf(
                    '<a href="%1$s" alt="%2$s">%3$s</a>',
                    esc_url( get_category_link( $category->term_id ) ),
                    esc_attr( sprintf( __( 'View all posts in %s', 'textdomain' ), $category->name ) ),
                    esc_html( $category->name )
                );
                ?>
                <li>
                    <?php echo $category_link; ?>
                </li>
                <?php
            }
        ?>
    </ul>
</section>

然后在 front-page.phpindex.php 中使用下面的代码来调用侧边栏:

get_sidebar();
在首页中显示文章列表

index.php 中使用下面的代码来显示文章列表:

<h1><?php bloginfo( 'name' ); ?></h1>
<?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <article>
            <header>
                <h2>
                    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                </h2>
                <div class="entry-meta">
                    <span class="meta-date"><?php the_time( get_option( 'date_format' ) ); ?></span>
                </div>
            </header>
            <div class="entry-summary">
                <?php the_excerpt(); ?>
            </div>
        </article>
    <?php endwhile; ?>
<?php endif; ?>

然后在 front-page.phpindex.php 中使用下面的代码来调用文章列表:

<?php get_template_part( 'loop' ); ?>