Modificando el widget de búsqueda predeterminado

11 nov 2014, 06:08:10
Vistas: 25.1K
Votos: 6

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

3
Comentarios

Echa un vistazo a esto: http://wordpress.stackexchange.com/a/165494/22728

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

¡Gracias! ¿Hay alguna manera de modificar el archivo functions.php desde mi plugin? Quiero hacer esto portable para otros temas.

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
Todas las respuestas a la pregunta 2
3

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

11 nov 2014 21:50:47
Comentarios

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.

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

Por supuesto - puedes escribir la función hook en un plugin.

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

¡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.

vee vee
14 ene 2022 10:46:12
0

La forma más limpia posible:

  1. Crea searchform.php en tu tema. Este archivo se usará en su lugar.

  2. 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>
30 oct 2019 13:53:37