如何重用Loop? get_template_part()还是?

时间:2014-07-21 05:52:04

标签: loops wordpress-theming wordpress

我想使用相同的Loop和Pagination index.php,search.php和archive.php

但是,对于search.php,我希望在循环之前出现标题“搜索结果” 对于archive.php我想要一个标题“存档页面”出现在循环之前。

方法A
保留index.php,search.php和archive.php
并使用get_template_part()进行导航和循环?

方法B
只需使用index.php
但是如何?

或者是否有更简单的方法,因为我想要的只是在循环之前添加标题?

为了这个例子的简单代码:

的index.php

<?php 
    if ( have_posts() ) : while ( have_posts() ) : the_post(); 
        the_excerpt(); 
    endwhile; endif; 
?>
code for Pagination

的search.php

<h2>Search Results</h2>
code for The Loop
code for Pagination

archive.php

<h2>Archive Page</h2>
code for The Loop
code for Pagination

2 个答案:

答案 0 :(得分:0)

在启动循环之前,你可以输出标题。将使用get_template_part()调用循环的内容。例如:

if ( have_posts() ) {
    // Output the title.
    the_title();

    // Begin loop.
    while ( have_posts() ) {
        the_post(); 
        get_template_part( 'loop', 'index' );
    }

}

更新:仅使用index.php有条件地显示标题,您可以这样做:

if ( is_search() ) {
    // Display the search page title here.
} else if ( is_category() ) {
    // Display the category title here.
}

参考:http://codex.wordpress.org/Function_Reference/get_template_part

答案 1 :(得分:0)

我不知道您网页的确切结构,但我会将代码放在header.php中。这是我对此的想法

标题对于所有这些模板都是通用的,我怀疑你在标题内容和内容区域之间需要这些标题

目标网页conditional tags。打开标题,然后在底部,添加类似的内容

if(is_search()) {
   //your title for search page etc
} elseif(is_archive()) {
   //your title for archive page
} else {
   //display nothing if you don't need to display any custom title
}

只需添加必要的标记并相应地设置样式

修改

看起来你还是非常新的php。来自您的评论

  

怪异。我把<?php if(is_search()) { <h2>Search Results</h2> } ?>放在header.php的最底部,但得到了White Screen。所以相反,我把它放在index.php并删除了search.php,但仍然是白屏。我在我的主题和Twentytwelve中测试了它。 ----------你能帮助我理解......更少的php文件是否等同于更快的网站?减少php文件的数量被认为是最佳实践?因此,如果index.php,search.php,archive.php使用相同的代码,除了标题&#34;搜索结果&#34;和&#34;存档页&#34; - 最好的做法是简单地拥有一个php文件并为标题做条件语句?

你的问题是在php和html元素之间切换。每当你从php切换到html时,你需要在你的html元素之前关闭你的php标签(?>)。另一方面,您需要在最后一个html元素之后和第一个php元素之前打开一个新的php标记(<?php)。

不正确执行此操作会导致synatx错误,导致白屏死机。

简而言之,您的代码需要看起来像这样才能正常工作。注意php标签

   <?php 
 if(is_search()) { // this part is php
    ?> <!-- Close php because whe're switching to html -->
       <h2>Search Results</h2> <!-- this part is html -->
    <?php // open new php tag as we're switching to php again
    } elseif(is_archive()) { //same sequence above applied
    ?>
       <h2>Archive Page</h2>
    <?php
    } else {
       //display nothing if you don't need to display any custom title
    }
?>

较少的php文件并不意味着网站速度更快,速度取决于内容,内容类型,数据库查询,查询量等。单页网站可能比10页网站慢。

我对此代码所做的工作以及我将其放在标题中的原因只是为了将代码保持在一起。您可以根据需要将其拆分。没有最好的做法。真正重要的是可读性,可访问性,不反复重复代码,以及保持适当的文件系统