WordPress 主题之搜索模板和静态页面模板

原文:The WordPress Theme Search Template and Page Template

原文作者:Ian Stewart

译文: WordPress 主题之搜索模板和静态页面模板

译文作者:Young

对任一完整的 WordPress 主题来说,搜索模板和静态页面模板都是很重要的,并且代码都很容易。这两个模板也是模板中的模板,都有以下相同的代码:

  1. <?php get_header(); ?>
  2.  
  3.  
  4.                 <div id="container">   
  5.                         <div id="content">
  6.  
  7.                                 <div id="nav-above" class="navigation">
  8.  
  9.                                 </div><!– #nav-above –>
  10.  
  11.                                 <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  12.  
  13.                                 </div><!– #post-<?php the_ID(); ?> –>                
  14.  
  15.                                 <div id="nav-below" class="navigation">
  16.  
  17.                                 </div><!– #nav-below –>                                      
  18.  
  19.  
  20.                         </div><!– #content –>        
  21.                 </div><!– #container –>
  22.  
  23.                
  24. <?php get_sidebar(); ?> 
  25. <?php get_footer(); ?>

当然,每个模板也都互不相同。

搜索模板

在 serach.php 里面,我们需要重新用到循环。这次使用 IF 语句 —— 以防循环里没有任何文章。

工作原理是这样的:如果有文章,或者说有符合搜索条件的文章,那么就循环检测,就像 index.php 里面的循环语句一样。但是如果没有文章,或者没有符合搜索条件的文章,那就为搜索者提供另外一个搜索机会。

代码如下:

  1.  
  2.  
  3. <?php get_header(); ?>
  4.  
  5.                 <div id="container">   
  6.                         <div id="content">
  7.  
  8.  
  9. <?php if ( have_posts() ) : ?>                         
  10.  
  11. <?php while ( have_posts() ) : the_post() ?>
  12.  
  13. <!– this is our loop –>
  14. <?php endwhile; ?>
  15.  
  16. <?php else : ?>
  17.  
  18.  
  19. <!– here’s where we’ll put a search form if there’re no posts –>
  20.  
  21. <?php endif; ?>                
  22.  
  23.                         </div><!– #content –>        
  24.                 </div><!– #container –>
  25.  
  26.  
  27. <?php get_sidebar(); ?> 
  28. <?php get_footer(); ?>
  29.  

非常直接了当,是吧?

我想保留日志标题、元、内容(或摘要)以及实用链接等 index 模板里面有的内容不变,但是 WordPress 搜索日志的时候同时也会搜索静态页面,而静态页面是不需要元或者实用链接之类的,所以,在我们的循环里面,将会检测看是搜索日志还是搜索静态页面。

  1. <?php if ( $post->post_type == ‘post’ ) { ?>
  2.  
  3. <?php } ?>

这个 IF 语句只有搜索静态页面的时候才会显示,现在我们知道会发生什么事了,以下就是搜索模板 #content DIV 标签里面的代码:

  1. <?php if ( have_posts() ) : ?>
  2.  
  3.  
  4.                                 <h1 class="page-title"><?php _e( ‘Search Results for: ‘, ‘your-theme’ ); ?><span><?php the_search_query(); ?></span></h1>
  5.  
  6.  
  7. <?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
  8.  
  9.                                 <div id="nav-above" class="navigation">
  10.                                         <div class="nav-previous"><?php next_posts_link(__( ‘<span class="meta-nav">&laquo;</span> Older posts’, ‘your-theme’ )) ?></div>
  11.  
  12.                                         <div class="nav-next"><?php previous_posts_link(__( ‘Newer posts <span class="meta-nav">&raquo;</span>’, ‘your-theme’ )) ?></div>
  13.  
  14.                                 </div><!– #nav-above –>
  15. <?php } ?>                                                     
  16.  
  17. <?php while ( have_posts() ) : the_post() ?>
  18.  
  19.  
  20.                                 <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  21.                                         <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( __(‘Permalink to %s’, ‘your-theme’), the_title_attribute(‘echo=0’) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
  22.  
  23.  
  24. <?php if ( $post->post_type == ‘post’ ) { ?>                                                                   
  25.                                         <div class="entry-meta">
  26.  
  27.                                                 <span class="meta-prep meta-prep-author"><?php _e(‘By ‘, ‘your-theme’); ?></span>
  28.  
  29.                                                 <span class="author vcard"><a class="url fn n" href="<?php echo get_author_link( false, $authordata->ID, $authordata->user_nicename ); ?>" title="<?php printf( __( ‘View all posts by %s’, ‘your-theme’ ), $authordata->display_name ); ?>"><?php the_author(); ?></a></span>
  30.  
  31.                                                 <span class="meta-sep"> | </span>
  32.                                                 <span class="meta-prep meta-prep-entry-date"><?php _e(‘Published ‘, ‘your-theme’); ?></span>
  33.  
  34.                                                 <span class="entry-date"><abbr class="published" title="<?php the_time(‘Y-m-d\TH:i:sO’) ?>"><?php the_time( get_option( ‘date_format’ ) ); ?></abbr></span>
  35.  
  36.                                                 <?php edit_post_link( __( ‘Edit’, ‘your-theme’ ), "<span class=\"meta-sep\">|</span>\n\t\t\t\t\t\t<span class=\"edit-link\">", "</span>\n\t\t\t\t\t" ) ?>
  37.  
  38.                                         </div><!– .entry-meta –>
  39. <?php } ?>
  40.  
  41.  
  42.                                         <div class="entry-summary">     
  43. <?php the_excerpt( __( ‘Continue reading <span class="meta-nav">&raquo;</span>’, ‘your-theme’ )  ); ?>
  44.  
  45. <?php wp_link_pages(‘before=<div class="page-link">’ . __( ‘Pages:’, ‘your-theme’ ) . ‘&after=</div>’) ?>
  46.  
  47.                                         </div><!– .entry-summary –>
  48.  
  49. <?php if ( $post->post_type == ‘post’ ) { ?>                                                                   
  50.                                         <div class="entry-utility">
  51.  
  52.                                                 <span class="cat-links"><span class="entry-utility-prep entry-utility-prep-cat-links"><?php _e( ‘Posted in ‘, ‘your-theme’ ); ?></span><?php echo get_the_category_list(‘, ‘); ?></span>
  53.  
  54.                                                 <span class="meta-sep"> | </span>
  55.                                                 <?php the_tags( ‘<span class="tag-links"><span class="entry-utility-prep entry-utility-prep-tag-links">’ . __(‘Tagged ‘, ‘your-theme’ ) . ‘</span>’, ", ", "</span>\n\t\t\t\t\t\t<span class=\"meta-sep\">|</span>\n" ) ?>
  56.  
  57.                                                 <span class="comments-link"><?php comments_popup_link( __( ‘Leave a comment’, ‘your-theme’ ), __( ‘1 Comment’, ‘your-theme’ ), __( ‘% Comments’, ‘your-theme’ ) ) ?></span>
  58.  
  59.                                                 <?php edit_post_link( __( ‘Edit’, ‘your-theme’ ), "<span class=\"meta-sep\">|</span>\n\t\t\t\t\t\t<span class=\"edit-link\">", "</span>\n\t\t\t\t\t\n" ) ?>
  60.  
  61.                                         </div><!– #entry-utility –>   
  62. <?php } ?>                                     
  63.                                 </div><!– #post-<?php the_ID(); ?> –>
  64.  
  65.  
  66. <?php endwhile; ?>
  67.  
  68. <?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
  69.  
  70.                                 <div id="nav-below" class="navigation">
  71.                                         <div class="nav-previous"><?php next_posts_link(__( ‘<span class="meta-nav">&laquo;</span> Older posts’, ‘your-theme’ )) ?></div>
  72.  
  73.                                         <div class="nav-next"><?php previous_posts_link(__( ‘Newer posts <span class="meta-nav">&raquo;</span>’, ‘your-theme’ )) ?></div>
  74.  
  75.                                 </div><!– #nav-below –>
  76. <?php } ?>                     
  77.  
  78. <?php else : ?>
  79.  
  80.  
  81.                                 <div id="post-0" class="post no-results not-found">
  82.                                         <h2 class="entry-title"><?php _e( ‘Nothing Found’, ‘your-theme’ ) ?></h2>
  83.  
  84.                                         <div class="entry-content">
  85.                                                 <p><?php _e( ‘Sorry, but nothing matched your search criteria. Please try again with some different keywords.’, ‘your-theme’ ); ?></p>
  86.  
  87.         <?php get_search_form(); ?>                                            
  88.                                         </div><!– .entry-content –>
  89.  
  90.                                 </div>
  91.  
  92. <?php endif; ?>

【当然,您还可以加上页眉和页脚以及侧边栏等函数。——译者注】

静态页面模板

您知道静态页面模板是干什么用的。WordPress 认为它是一种没有时间顺序的日志。我们认为它是一个静态页面,不过日志的所有装饰它都几乎没有——除了评论,有些静态页面是有评论的。我不喜欢,不过您可能喜欢。如果您想在静态页面添加评论,可以在静态页面上添加带有 Name 和 Value 的 “comments”自定义区域,这个我听起来不错。

下面就是静态页面代码:

  1. <?php get_header(); ?>
  2.  
  3.  
  4.                 <div id="container">   
  5.                         <div id="content">
  6.  
  7. <?php the_post(); ?>
  8.  
  9.  
  10.                                 <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  11.                                         <h1 class="entry-title"><?php the_title(); ?></h1>
  12.  
  13.                                         <div class="entry-content">
  14. <?php the_content(); ?>
  15. <?php wp_link_pages(‘before=<div class="page-link">’ . __( ‘Pages:’, ‘your-theme’ ) . ‘&after=</div>’) ?>                                      
  16.  
  17. <?php edit_post_link( __( ‘Edit’, ‘your-theme’ ), ‘<span class="edit-link">’, ‘</span>’ ) ?>
  18.  
  19.                                         </div><!– .entry-content –>
  20.                                 </div><!– #post-<?php the_ID(); ?> –>                
  21.  
  22.  
  23. <?php if ( get_post_custom_values(‘comments’) ) comments_template() // Add a custom field with Name and Value of "comments" to enable comments on this page ?>                 
  24.  
  25.  
  26.                         </div><!– #content –>        
  27.                 </div><!– #container –>
  28.                
  29. <?php get_sidebar(); ?> 
  30.  
  31. <?php get_footer(); ?>

如何创建 WordPress 主题

这篇文章是如何创建 WordPress 主题教程系列的其中一部分,该系列将会教您如何从零开始创建强大的 WordPress 主题。建议您从头开始阅读这个系列并自己动手编写一些漂亮的代码。

发布在博客技术 已有标签 , , , , . 将该链接存入书签。 评论和互链已关闭。
  • :: 《100 个免费翻墙工具》免费电子书

    100 个免费翻墙工具

3 条评论

  1. 管家仔财经博客
    发表于2009年07月6日 10:54 上午 | 永久链接

    看不懂,凑热闹

  2. 发表于2009年07月6日 9:34 下午 | 永久链接

    纯粹支持,新主题很简洁。

  3. Young
    发表于2009年07月6日 10:40 下午 | 永久链接

    @芒果 ,谢谢。这样的文章其实主要是供自己学习用的,如果有人想学做主题,我会建议他们直接看原文并且多和原作者讨论。:-)