検索入力にautocomplete="off"
を追加して検索フォームを少し変更したいと思っていました。Wordpress検索フォームテンプレート(Genesis)をカスタマイズする
私は当初、次のような単純なフィルタを探しました:
//* Customize search form input box text
add_filter('genesis_search_text', 'sp_search_text');
function sp_search_text($text) {
return esc_attr('Search my blog...');
}
しかし/genesis/lib/structure/search.php
がautocomplete="%s"
のような任意の変数を持っていなかったので、その属性を対象とすることができませんでした。私はおそらくそれを直接導入しなければならなかったので、私はsearch.php
を親テーマフォルダから子テーマフォルダフォルダにコピーしました。
ファイルの元のコードは次のようました:
<?php
/**
* Replace the default search form with a Genesis-specific form.
*
* The exact output depends on whether the child theme supports HTML5 or not.
*
* Applies the `genesis_search_text`, `genesis_search_button_text`, `genesis_search_form_label` and
* `genesis_search_form` filters.
*
* @since 0.2.0
*
* @return string HTML markup for search form.
*/
add_filter('get_search_form', 'genesis_search_form');
function genesis_search_form() {
$search_text = get_search_query() ? apply_filters('the_search_query', get_search_query()) : apply_filters('genesis_search_text', __('Search this website', 'genesis') . ' …');
$button_text = apply_filters('genesis_search_button_text', esc_attr__('Search', 'genesis'));
$onfocus = "if ('" . esc_js($search_text) . "' === this.value) {this.value = '';}";
$onblur = "if ('' === this.value) {this.value = '" . esc_js($search_text) . "';}";
// Empty label, by default. Filterable.
$label = apply_filters('genesis_search_form_label', '');
$value_or_placeholder = (get_search_query() == '') ? 'placeholder' : 'value';
if (genesis_html5()) {
$form = sprintf('<form %s>', genesis_attr('search-form'));
if (genesis_a11y('search-form')) {
if ('' == $label) {
$label = apply_filters('genesis_search_text', __('Search this website', 'genesis'));
}
$form_id = uniqid('searchform-');
$form .= sprintf(
'<meta itemprop="target" content="%s"/><label class="search-form-label screen-reader-text" for="%s">%s</label><input itemprop="query-input" type="search" name="s" id="%s" %s="%s" /><input type="submit" value="%s" /></form>',
home_url('/?s={s}'),
esc_attr($form_id),
esc_html($label),
esc_attr($form_id),
$value_or_placeholder,
esc_attr($search_text),
esc_attr($button_text)
);
} else {
$form .= sprintf(
'%s<meta itemprop="target" content="%s"/><input itemprop="query-input" type="search" name="s" %s="%s" /><input type="submit" value="%s" /></form>',
esc_html($label),
home_url('/?s={s}'),
$value_or_placeholder,
esc_attr($search_text),
esc_attr($button_text)
);
}
} else {
$form = sprintf(
'<form method="get" class="searchform search-form" action="%s" role="search" >%s<input type="text" value="%s" name="s" class="s search-input" onfocus="%s" onblur="%s" /><input type="submit" class="searchsubmit search-submit" value="%s" /></form>',
home_url('/'),
esc_html($label),
esc_attr($search_text),
esc_attr($onfocus),
esc_attr($onblur),
esc_attr($button_text)
);
}
return apply_filters('genesis_search_form', $form, $search_text, $button_text, $label);
}
それから私は、元のフィルタを削除し、私のフィルタを追加しました:
remove_filter('get_search_form', 'genesis_search_form');
add_filter('get_search_form', 'my_search_form');
そして、検索入力にautocomplete="off"
を追加しましたので、現在のis:
<?php
/**
* Replace the default search form with a Genesis-specific form.
*
* The exact output depends on whether the child theme supports HTML5 or not.
*
* Applies the `genesis_search_text`, `genesis_search_button_text`, `genesis_search_form_label` and
* `genesis_search_form` filters.
*
* @since 0.2.0
*
* @return string HTML markup for search form.
*/
remove_filter('get_search_form', 'genesis_search_form');
add_filter('get_search_form', 'my_search_form');
function my_search_form() {
$search_text = get_search_query() ? apply_filters('the_search_query', get_search_query()) : apply_filters('genesis_search_text', __('Search this website', 'genesis') . ' …');
$button_text = apply_filters('genesis_search_button_text', esc_attr__('Search', 'genesis'));
$onfocus = "if ('" . esc_js($search_text) . "' === this.value) {this.value = '';}";
$onblur = "if ('' === this.value) {this.value = '" . esc_js($search_text) . "';}";
// Empty label, by default. Filterable.
$label = apply_filters('genesis_search_form_label', '');
$value_or_placeholder = (get_search_query() == '') ? 'placeholder' : 'value';
if (genesis_html5()) {
$form = sprintf('<form %s>', genesis_attr('search-form'));
if (genesis_a11y('search-form')) {
if ('' == $label) {
$label = apply_filters('genesis_search_text', __('Search this website', 'genesis'));
}
$form_id = uniqid('searchform-');
$form .= sprintf(
'<meta itemprop="target" content="%s"/><label class="search-form-label screen-reader-text" for="%s">%s</label><input itemprop="query-input" type="search" name="s" id="%s" %s="%s" autocomplete="off" spellcheck="false" autocorrect="off" autocapitalize="off" dir="auto" /><input type="submit" value="%s" /></form>',
home_url('/?s={s}'),
esc_attr($form_id),
esc_html($label),
esc_attr($form_id),
$value_or_placeholder,
esc_attr($search_text),
esc_attr($button_text)
);
} else {
$form .= sprintf(
'%s<meta itemprop="target" content="%s"/><input itemprop="query-input" type="search" name="s" %s="%s" autocomplete="off" spellcheck="false" autocorrect="off" autocapitalize="off" dir="auto" /><input type="submit" value="%s" /></form>',
esc_html($label),
home_url('/?s={s}'),
$value_or_placeholder,
esc_attr($search_text),
esc_attr($button_text)
);
}
} else {
$form = sprintf(
'<form method="get" class="searchform search-form" action="%s" role="search" >%s<input type="text" value="%s" name="s" class="s search-input" onfocus="%s" onblur="%s" autocomplete="off" spellcheck="false" autocorrect="off" autocapitalize="off" dir="auto" /><input type="submit" class="searchsubmit search-submit" value="%s" /></form>',
home_url('/'),
esc_html($label),
esc_attr($search_text),
esc_attr($onfocus),
esc_attr($onblur),
esc_attr($button_text)
);
}
return apply_filters('my_search_form', $form, $search_text, $button_text, $label);
}
現在のところ、ホームページ他のページではヘッダーとタグラインだけが生成されます。私は親のテーマファイルを直接編集することができましたが、すべてを邪魔しないようにするための代替手段が必要でした。任意の洞察または提案?私はgenesis_search_form
機能が終わりgenesis_search_form
フィルタを適用していることがわかり
Documentation for get_search_form
Documentation for genesis_search_form
Documentation for Genesis Snippets
あなたは 'my_search_form()'関数はどこにありますか? – questlooking
searchform.phpでは、元の 'genesis_search_form()'フィルタを削除し、 'genesis_search_form()'のすべてのインスタンスを 'my_search_form()'に置き換え、 'autocomplete =" off "をコードに追加します。エラーは、ページの全体または一部が白く見えるエラー500です。コードが元の場所の外で正しく動作しないようですが、親のテーマフレームワークを直接編集しないようにするための代替手段が必要でした。 – SilverLink
オリジナルを削除するための共鳴とは何か...創造の代わりにフォームを呼び出す限り、新しいフォームに影響する理由はないはずです。 –