Modificando el widget de búsqueda predeterminado
Estoy creando un widget de plugin que realiza una búsqueda diferente al widget de búsqueda predeterminado normal. Copié el código del widget predeterminado:
class new_search extends WP_Widget {
function __construct() {
$widget_ops = array('classname' => 'widget_search', 'description' => __( "Un formulario de búsqueda para fotos 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;
// Usar el formulario de búsqueda del tema actual si existe
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('Título:'); ?> <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;
}
} // fin de la clase example_widget
add_action('widgets_init', create_function('', 'return register_widget("new_search");'));
?>
Estoy teniendo problemas para encontrar dónde este widget de búsqueda predeterminado llama a la función search.php. Básicamente quiero crear mi propia función search.php (es decir, searchNew.php) y llamarla cuando el usuario realice una búsqueda. ¿Alguna idea de dónde se llama a search.php para poder reemplazarlo con un archivo diferente?
Edición: Ya he revisado el archivo searchform.php (el que es llamado por get_search_form) y nada allí parece sugerir que está llamando a search.php
Puedes engancharte al hook de acción 'get_search_form' (revisa la parte de "última opción" en el enlace de abajo). Configura una prioridad lo suficientemente alta para sobrescribir cualquier formulario creado en un tema.
Un plugin podría verse así (tomado del enlace de abajo):
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">' . __( 'Buscar:' ) . '</label>
<input type="text" value="' . get_search_query() . '" name="s" id="s" />
<input type="submit" id="searchsubmit" value="'. esc_attr__( 'Buscar' ) .'" />
</div>
</form>';
return $form;
}
add_filter( 'get_search_form', 'my_search_form', 100 );
http://codex.wordpress.org/Function_Reference/get_search_form#Theme_Form

El enlace dice que debo hacer esta función en el archivo functions.php. ¿Hay alguna manera de hacerla dentro de una carpeta de plugin? Gracias.

¡Malas noticias!: No sé cuándo pero desde que el widget de búsqueda fue reemplazado por el nuevo bloque de búsqueda, el get_search_form()
o searchform.php ya no funcionan. Si tu sitio aún usa el viejo widget de búsqueda, sigue ahí con los mismos resultados de antes, pero si añades uno nuevo, será el bloque de búsqueda. Y no encuentro cómo modificar los elementos del bloque de búsqueda.

La forma más limpia posible:
Crea searchform.php en tu tema. Este archivo se usará en su lugar.
Añade tu nuevo formulario de búsqueda HTML
<form action="/" method="get">
<label for="search">Buscar en <?php echo home_url( '/' ); ?></label>
<input type="text" name="s" id="search" value="<?php the_search_query(); ?>" />
<input type="image" alt="Buscar" src="<?php bloginfo( 'template_url' ); ?>/images/search.png" />
</form>
