带有Wordpress搜索小部件的自定义搜索表单

将搜索表单添加到Wordpress博客时,您将希望控制显示的表单类型。可以覆盖由窗口小部件函数创建的搜索表单,而不必进入/wp-includes/widget.php文件并编辑wp_widget_search函数。这是Wordpress 2.6中提供的功能。

function wp_widget_search($args) {
 extract($args);
 $searchform_template = get_template_directory() . '/searchform.php';
 
 echo $before_widget;
 
 // 使用当前主题搜索表单(如果存在)
 if ( file_exists($searchform_template) ) {
  include_once($searchform_template);
 } else { ?>
  <form id="searchform" method="get" action="<?php bloginfo('url'); ?>/"><div>
  <label for="s"><?php _e('Search for:'); ?></label>
  <input type="text" name="s" id="s" size="15" value="<?php the_search_query(); ?>" />
  <input type="submit" value="<?php echo attribute_escape(__('Search')); ?>" />
  </div></form>
 <?php }
 
 echo $after_widget;
}

请注意,该函数首先要做的是加载一个名为searchform.php的模板文件,如果该模板文件不存在,该函数将打印出标准的搜索表单。基本上就是这样。如果要覆盖此函数创建的搜索表单,则只需在模板目录中创建一个名为searchform.php的文件,然后在此文件内创建一个搜索表单。该表格必须具有以下内容:

  • 表单的操作应转到博客的主页。因此,如果您的博客位于domain.com/blog上,则操作应转到该位置。

  • 表单的方法应该可以获取,但是表单也可以使用post方法。

  • 必须存在一个文本输入框,并且该输入框的名称必须为s

  • 为了获得良好的搜索表单可用性,您应该在表单的文本字段中打印出搜索查询。这可以通过函数完成the_search_query(),如果有一个查询,它将打印出搜索查询。

创建搜索表单的方式有很多。我在不同的人创建的两个不同的模板中找到了这两个模板。

<h2>Search</h2>
<form method="get" id="searchform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div>
<label for="s">Find:</label>
<input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name="s" id="s" size="14" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>

这将在文本框中打印出一些JavaScript。

<div id="search">
<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
<div><input type="text" value="search..." name="s" id="s" onfocus="if (this.value == 'search...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'search...';}" />
</div>
</form>
</div>

它们似乎都工作得很好,但是我建议您创建的任何搜索表单都应从原始副本中复制并进行修改。通常,这是使用Wordpress主题的最佳实践,因为Wordpress文档在地面上可能比较薄(或隐藏),并且其开发人员倾向于使用可用的最佳功能。