Modificare il widget di ricerca predefinito

11 nov 2014, 06:08:10
Visualizzazioni: 25.1K
Voti: 6

Sto creando un widget plugin che esegue una ricerca diversa dal normale widget di ricerca predefinito. Ho copiato il codice dal widget predefinito:

class new_search extends WP_Widget {

             function __construct() {
                    $widget_ops = array('classname' => 'widget_search', 'description' => __( "Un modulo di ricerca per le foto NextGen") );
                    parent::__construct('search', __('NGGSearch'), $widget_ops);
            }

            function widget( $args, $instance ) {
                    extract($args);
                    $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );

                    echo $before_widget;
                    if ( $title )
                            echo $before_title . $title . $after_title;

                    // Usa il modulo di ricerca del tema corrente se esiste
                    get_search_form();

                    echo $after_widget;
            }

            function form( $instance ) {
                    $instance = wp_parse_args( (array) $instance, array( 'title' => '') );
                    $title = $instance['title'];
    ?>
                    <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Titolo:'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></label></p>
    <?php
            }

            function update( $new_instance, $old_instance ) {
                    return;
            $instance = $old_instance;
                    $new_instance = wp_parse_args((array) $new_instance, array( 'title' => ''));
                    $instance['title'] = strip_tags($new_instance['title']);
                    return $instance;
            }

    } // fine della classe example_widget
    add_action('widgets_init', create_function('', 'return register_widget("new_search");'));
    ?>

Ho difficoltà a trovare dove questo widget di ricerca predefinito chiama la funzione search.php. In pratica, voglio creare la mia funzione search.php personalizzata (chiamata searchNew.php) e richiamarla quando l'utente avvia la ricerca. Qualche idea su dove viene chiamato search.php così posso sostituirlo con un file diverso?

Modifica: Ho già controllato nel file searchform.php (quello richiamato da get_search_form) e nulla lì suggerisce che stia chiamando search.php

3
Commenti

Dai un'occhiata a questo: http://wordpress.stackexchange.com/a/165494/22728

Mayeenul Islam Mayeenul Islam
11 nov 2014 09:37:06

Grazie! C'è un modo per modificare il file functions.php dal mio plugin? Vorrei renderlo portabile per altri temi.

Conrad S Conrad S
11 nov 2014 20:50:01

https://www.google.com/search?q=wordpress+filters

Mayeenul Islam Mayeenul Islam
12 nov 2014 05:52:06
Tutte le risposte alla domanda 2
3

Puoi agganciarti all'hook di azione 'get_search_form' (controlla la parte "ultima opzione" nel link qui sotto). Imposta una priorità abbastanza alta per sovrascrivere qualsiasi cosa creata in un tema.

Un plugin potrebbe essere simile a questo (tratto dal link sottostante):

function my_search_form( $form ) {
    $form = '<form role="search" method="get" id="searchform" class="searchform" action="' . home_url( '/' ) . '" >
    <div><label class="screen-reader-text" for="s">' . __( 'Cerca:' ) . '</label>
    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="'. esc_attr__( 'Cerca' ) .'" />
    </div>
    </form>';

    return $form;
}

add_filter( 'get_search_form', 'my_search_form', 100 );

http://codex.wordpress.org/Function_Reference/get_search_form#Theme_Form

11 nov 2014 21:50:47
Commenti

Il link dice che devo creare questa funzione nel file functions.php. C'è un modo per farla all'interno di una cartella di plugin? Grazie.

Conrad S Conrad S
11 nov 2014 23:05:05

Certo - puoi scrivere la funzione hook in un plugin.

skim- skim-
11 nov 2014 23:09:33

Cattive notizie!: Non so quando ma da quando il widget di ricerca è stato sostituito con il nuovo blocco di ricerca, get_search_form() o searchform.php non funzionano più. Se il tuo sito utilizza ancora il vecchio widget di ricerca, è ancora lì con lo stesso risultato di prima, ma se ne aggiungi uno nuovo, sarà un blocco di ricerca. E non riesco a trovare come modificare l'elemento del blocco di ricerca.

vee vee
14 gen 2022 10:46:12
0

Il modo più pulito possibile:

  1. Crea searchform.php nel tuo tema. Questo verrà utilizzato al posto del form di ricerca predefinito.

  2. Aggiungi il tuo nuovo HTML per la ricerca

<form action="/" method="get">
    <label for="search">Cerca in <?php echo home_url( '/' ); ?></label>
    <input type="text" name="s" id="search" value="<?php the_search_query(); ?>" />
    <input type="image" alt="Cerca" src="<?php bloginfo( 'template_url' ); ?>/images/search.png" />
</form>
30 ott 2019 13:53:37