问题描述
当我调用 get_search_form()
时,它输出:
<form class="search-form">
<meta itemprop="target">
<input type="search">
<input type="submit">
</form>
但是我想让它生成一个 span
里面,像:
<form class="search-form">
<meta itemprop="target">
<input type="search">
<span class="submit-icon"></span>
<input type="submit">
</form>
有任何想法吗?
最佳解决方案
如果我们查看 get_search_form()
的源代码,请注意在表单渲染之前,search_form_format
过滤器钩子被触发。我们可以使用它来添加附加到 get_search_form
的另一个过滤器,其中回调依赖于格式。
add_filter( 'search_form_format', 'wpse_259716_search_form_format', 99, 1 );
function wpse_259716_search_form_format( $format ) {
if( in_array( $format, array( 'xhtml', 'html5' ) ) ) {
add_filter( 'get_search_form', "wpse_259716_get_search_form_$format", 99, 1 );
}
return $format;
}
function wpse_259716_get_search_form_xhtml( $form ) {
$search = '<input type="submit"';
$xhtml = 'some xhtml';
$replace = $xhtml . $search;
return str_replace( $search, $replace, $form );
}
function wpse_259716_get_search_form_html5( $form ) {
$search = '<input type="submit"';
$html5 = 'some html5';
$replace = $html5 . $search;
return str_replace( $search, $replace, $form );
}
或者,您可以使用 class-based 方法。
$wpse_259716 = new wpse_259716();
add_filter( 'search_form_format', array( $wpse_259716, 'search_form_format' ), 99, 1 );
add_filter( 'get_search_form', array( $wpse_259716, 'get_search_form' ), 99, 1 );
class wpse_259716 {
protected $format;
public function search_form_format( $format ) {
return $this->format = $format;
}
public function get_search_form( $form ) {
$search = $replace = '<input type="submit"';
if( 'xhtml' === $this->format ) {
$xhtml = 'some xhtml';
$replace = $xhmtl . $search;
}
elseif( 'html5' === $this->format ) {
$html5 = 'some html5';
$replace = $html5 . $search;
}
return str_replace( $search, $replace, $form );
}
}
次佳解决方案
测试和工作正常。
将这段代码添加到 functions.php 中,你会得到你想要的。现在您可以根据需要修改搜索表单。
function my_search_form( $form ) {
$form = '<form role="search" method="get" class="search-form" action="' . home_url( '/' ) . '" >
<div><label>
<span class="screen-reader-text"> ' . _x( 'Search for:', 'label' ) .'</span>
<input type="search" class="search-field"
placeholder="' . get_search_query() . '"
value="' . get_search_query().'" name="s"
title="' . esc_attr_x( 'Search for:', 'label' ).' " />
</label>
<span class="submit-icon"></span>
<input type="submit" class="search-submit"
value="' . esc_attr_x( 'Search', 'submit button' ). '" />
</form>
';
return $form;
}
add_filter( 'get_search_form', 'my_search_form', 99 );
echo get_search_form();
第三种解决方案
您需要在主题中创建一个名为 searchform.php 的 php 文件,然后只需复制并粘贴下面的搜索表单代码
<form method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<label for="s" class="assistive-text"><?php _e( 'Search', 'theme_text_domain' ); ?></label>
<input type="text" class="field" name="s" id="s" placeholder="<?php esc_attr_e( 'Search', 'theme_text_domain' ); ?>" />
<input type="submit" class="submit" name="submit" id="searchsubmit" value="<?php esc_attr_e( 'Search', 'theme_text_domain' ); ?>" />
</form>
现在您可以修改上述代码中删除或插入任何内容的表单。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。