Modificare il widget di ricerca predefinito
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
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

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.

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.

Il modo più pulito possibile:
Crea searchform.php nel tuo tema. Questo verrà utilizzato al posto del form di ricerca predefinito.
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>
