Ich wollte mein Suchformular etwas ändern, indem ich hinzufügte autocomplete="off"
zur Sucheingabe.
Ich suchte zunächst nach einem einfachen Filter wie dem folgenden:
//* 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...' );
}
Aber weil die /genesis/lib/structure/search.php
hatte keine Variable wie autocomplete="%s"
, dieses Attribut konnte nicht gezielt beliefert werden. Wahrscheinlich musste ich es direkt vorstellen, also habe ich das kopiert search.php
vom übergeordneten Designordner in den Ordner des untergeordneten Designordners.
Der ursprüngliche Code der Datei lautete wie folgt:
<?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( "https://stackoverflow.com/" ),
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 );
}
Dann habe ich den Originalfilter entfernt und meinen Filter hinzugefügt:
remove_filter( 'get_search_form', 'genesis_search_form' );
add_filter( 'get_search_form', 'my_search_form' );
Und hinzugefügt autocomplete="off"
zur Sucheingabe, also ist der Strom:
<?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( "https://stackoverflow.com/" ),
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 );
}
Auf der Startseite funktioniert es derzeit einwandfrei, aber auf jeder anderen Seite werden nur der Header und die Tagline generiert. Ich konnte die Parent-Theme-Dateien direkt bearbeiten, wollte aber eine Alternative, um nicht alles durcheinander zu bringen. Irgendwelche Erkenntnisse oder Vorschläge?
Dokumentation für get_search_form
Wo bist du
my_search_form()
Funktion?– Slava
8. März 2017 um 14:20 Uhr
In der searchform.php entferne ich das Original
genesis_search_form()
filtern und ersetzen Sie alle Instanzen vongenesis_search_form()
mitmy_search_form()
und füge die hinzuautocomplete="off"
zum Code. Die Fehler sind Fehler 500, bei dem die gesamte oder Teile der Seite weiß erscheinen, es scheint, dass der Code außerhalb seines ursprünglichen Speicherorts nicht richtig ausgeführt werden kann, aber ich wollte eine Alternative, um das direkte Bearbeiten des übergeordneten Themenrahmens zu vermeiden.– Silverlink
8. März 2017 um 15:40 Uhr
Was ist der Grund für das Entfernen des Originals … Es sollte keinen Grund geben, dass dies Ihr neues Formular beeinflussen würde, solange Sie Ihr Formular anstelle von Genesis aufrufen.
– Cayce K
10. März 2017 um 20:06 Uhr
Dachte, dass es Konflikte geben würde. Aber es dort zu haben, half so oder so nicht.
– Silverlink
10. März 2017 um 20:53 Uhr
Auf der Startseite funktioniert es derzeit einwandfrei, aber auf jeder anderen Seite werden nur der Header und die Tagline generiert.
– Silverlink
10. März 2017 um 21:24 Uhr