get_search_form

函数


get_search_form ( $args = array() )
参数
  • (array)
    $args
    { Optional. Array of display arguments. @type bool $echo Whether to echo or return the form. Default true. @type string $aria_label ARIA label for the search form. Useful to distinguish multiple search forms on the same page and improve accessibility. Default empty. }
    Required:
    Default: array()
返回值
  • (void|string) Void if ‘echo’ argument is true, search form HTML if ‘echo’ is false.
定义位置
  • wp-includes/general-template.php
    , line 239
引入
2.7.0
弃用

显示搜索表单。

将首先尝试在子目录或父目录中找到 searchform.php 文件,然后加载它。如果它不存在,那么默认的搜索表单将被显示。默认的搜索表单是HTML,它将被显示。有一个过滤器应用于搜索表单的HTML,以便编辑或替换它。该过滤器是{@see ‘get_search_form’}。

这个函数主要被那些想把搜索表单硬编码到侧边栏的主题使用,也被WordPress中的搜索小工具使用。

还有一个动作,在该函数运行时被调用,{@see ‘pre_get_search_form’}。这对于输出搜索所依赖的JavaScript或适用于搜索开始的各种格式化是很有用的。举几个例子说明它可以用来做什么。

function get_search_form( $args = array() ) {
	/**
	 * Fires before the search form is retrieved, at the start of get_search_form().
	 *
	 * @since 2.7.0 as 'get_search_form' action.
	 * @since 3.6.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @link https://core.trac.wordpress.org/ticket/19321
	 *
	 * @param array $args The array of arguments for building the search form.
	 *                    See get_search_form() for information on accepted arguments.
	 */
	do_action( 'pre_get_search_form', $args );

	$echo = true;

	if ( ! is_array( $args ) ) {
		/*
		 * Back compat: to ensure previous uses of get_search_form() continue to
		 * function as expected, we handle a value for the boolean $echo param removed
		 * in 5.2.0. Then we deal with the $args array and cast its defaults.
		 */
		$echo = (bool) $args;

		// Set an empty array and allow default arguments to take over.
		$args = array();
	}

	// Defaults are to echo and to output no custom label on the form.
	$defaults = array(
		'echo'       => $echo,
		'aria_label' => '',
	);

	$args = wp_parse_args( $args, $defaults );

	/**
	 * Filters the array of arguments used when generating the search form.
	 *
	 * @since 5.2.0
	 *
	 * @param array $args The array of arguments for building the search form.
	 *                    See get_search_form() for information on accepted arguments.
	 */
	$args = apply_filters( 'search_form_args', $args );

	// Ensure that the filtered arguments contain all required default values.
	$args = array_merge( $defaults, $args );

	$format = current_theme_supports( 'html5', 'search-form' ) ? 'html5' : 'xhtml';

	/**
	 * Filters the HTML format of the search form.
	 *
	 * @since 3.6.0
	 * @since 5.5.0 The `$args` parameter was added.
	 *
	 * @param string $format The type of markup to use in the search form.
	 *                       Accepts 'html5', 'xhtml'.
	 * @param array  $args   The array of arguments for building the search form.
	 *                       See get_search_form() for information on accepted arguments.
	 */
	$format = apply_filters( 'search_form_format', $format, $args );

	$search_form_template = locate_template( 'searchform.php' );

	if ( '' !== $search_form_template ) {
		ob_start();
		require $search_form_template;
		$form = ob_get_clean();
	} else {
		// Build a string containing an aria-label to use for the search form.
		if ( $args['aria_label'] ) {
			$aria_label = 'aria-label="' . esc_attr( $args['aria_label'] ) . '" ';
		} else {
			/*
			 * If there's no custom aria-label, we can set a default here. At the
			 * moment it's empty as there's uncertainty about what the default should be.
			 */
			$aria_label = '';
		}

		if ( 'html5' === $format ) {
			$form = '

‘;
} else {
$form = ‘

‘;
}
}

/**
* Filters the HTML output of the search form.
*
* @since 2.7.0
* @since 5.5.0 The `$args` parameter was added.
*
* @param string $form The search form HTML output.
* @param array $args The array of arguments for building the search form.
* See get_search_form() for information on accepted arguments.
*/
$result = apply_filters( ‘get_search_form’, $form, $args );

if ( null === $result ) {
$result = $form;
}

if ( $args[‘echo’] ) {
echo $result;
} else {
return $result;
}
}