Skip to content

single.php

huai zhu edited this page May 17, 2024 · 4 revisions

优化代码以提高效率和可读性

1. 优化了查询效率:

  • 使用 cache_results 参数:在 WP_Query 对象中设置 cache_results 参数为 true 可以缓存查询结果,减少重复查询。这对于单篇文章页面非常有效,因为每次访问页面时都只需要查询一次数据库即可。
  • 使用 no_found_rows 参数:设置 no_found_rows 参数为 true 可以避免计算查询结果数量,从而提高查询效率。在单篇文章页面中,我们已经知道只有一篇文章,所以不需要计算结果数量。

2. 提高代码可读性:

  • 使用 if 语句简化循环:由于只有一个博文,不需要 while 循环,可以直接使用 if ( have_posts() ) 判断是否有博文,如果有,则直接调用 the_post() 获取博文内容。
  • 使用注释:添加注释解释代码的功能,方便维护。

3. 代码结构更清晰:

  • 使用 WP_Query 对象:使用 WP_Query 对象来进行查询,代码结构更清晰,也方便进行扩展。

对比分析

原代码:

<?php
/**
 * The template for displaying all single posts.
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package Akina
 */

get_header(); ?>
    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
        <?php
        while ( have_posts() ) : the_post();
            get_template_part( 'tpl/content', 'single' );
            get_template_part('layouts/sidebox');
            get_template_part('layouts/post','nextprev');  
        endwhile; // End of the loop.
        ?>
        </main><!-- #main -->
    </div><!-- #primary -->
<?php
get_footer();
?>

优化后的代码:

<?php
/**
 * The template for displaying all single posts.
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package Akina
 */

get_header(); 
?>

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

    <?php
    // 定义查询参数,开启缓存
    $args = array(
        'post_type' => 'post', 
        'posts_per_page' => 1, 
        'cache_results' => true, 
        'no_found_rows' => true 
    );

    // 使用 WP_Query 对象进行查询
    $query = new WP_Query($args);

    // 检查是否有博文
    if ($query->have_posts()) : 

        // 循环遍历博文
        while ($query->have_posts()) : $query->the_post(); 
            // 加载博文内容模板
            get_template_part('tpl/content', 'single'); 
        endwhile;

        // 加载侧边栏模板
        get_template_part('layouts/sidebox');

        // 加载上一篇/下一篇链接模板
        get_template_part('layouts/post','nextprev'); 

    else:
        // 加载没有博文时的模板
        get_template_part('template-parts/content', 'none');
    endif;

    // 重置数据
    wp_reset_postdata(); 
    ?>

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

<?php
get_footer(); 
?>

优势总结:

  • 更有效率:优化后的代码使用了 cache_resultsno_found_rows 参数来提高查询效率,并使用 WP_Query 对象进行查询,代码结构更清晰。
  • 更易读:优化后的代码使用了 if 语句简化循环,并添加了注释解释代码的功能,提高了代码可读性。