Изменение стандартного поискового виджета

11 нояб. 2014 г., 06:08:10
Просмотры: 25.1K
Голосов: 6

Я создаю виджет плагина, который выполняет поиск, отличающийся от стандартного поискового виджета. Я скопировал код стандартного виджета:

class new_search extends WP_Widget {


             function __construct() {
                    $widget_ops = array('classname' => 'widget_search', 'description' => __( "Форма поиска для фотографий 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;

                    // Использовать форму поиска текущей темы, если она существует
                    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('Заголовок:'); ?> <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;
            }





    } // конец класса example_widget
    add_action('widgets_init', create_function('', 'return register_widget("new_search");'));
    ?>

У меня возникли проблемы с поиском места, где этот стандартный поисковый виджет вызывает функцию search.php. По сути, я хочу создать свою собственную функцию search.php (а именно searchNew.php) и вызывать её, когда пользователь выполняет поиск. Есть идеи, где вызывается search.php, чтобы я мог заменить его другим файлом?

Редактирование: Я уже просмотрел файл searchform.php (тот, который вызывается через get_search_form), и там нет ничего, что указывало бы на вызов search.php

3
Комментарии

Посмотрите вот это: http://wordpress.stackexchange.com/a/165494/22728

Mayeenul Islam Mayeenul Islam
11 нояб. 2014 г. 09:37:06

Спасибо! Есть ли способ изменить файл function.php из моего плагина? Я хочу сделать это переносимым между разными темами.

Conrad S Conrad S
11 нояб. 2014 г. 20:50:01

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

Mayeenul Islam Mayeenul Islam
12 нояб. 2014 г. 05:52:06
Все ответы на вопрос 2
3

Вы можете подключиться к хуку действия 'get_search_form' (см. раздел "Последний вариант" по ссылке ниже). Установите достаточно высокий приоритет, чтобы переопределить любую форму, созданную в теме.

Плагин может выглядеть следующим образом (из ссылки ниже):

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">' . __( 'Искать:' ) . '</label>
    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="'. esc_attr__( 'Поиск' ) .'" />
    </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 нояб. 2014 г. 21:50:47
Комментарии

В ссылке сказано, что мне нужно добавить эту функцию в файл functions.php. Есть ли способ сделать это внутри папки плагина? Спасибо.

Conrad S Conrad S
11 нояб. 2014 г. 23:05:05

Конечно - вы можете написать функцию хука в плагине.

skim- skim-
11 нояб. 2014 г. 23:09:33

Плохие новости!: Я не знаю когда, но с тех пор как виджет поиска был заменен на новый блок поиска, get_search_form() или searchform.php больше не работают. Если ваш сайт все еще использует старый виджет поиска, он остался с тем же результатом, что и раньше, но если вы добавите новый, это будет блок поиска. И я не могу найти способ изменить элемент блока поиска.

vee vee
14 янв. 2022 г. 10:46:12
0

Самый чистый способ:

  1. Создайте файл searchform.php в вашей теме. Он будет использоваться вместо стандартного.

  2. Добавьте новый HTML для поиска

<form action="/" method="get">
    <label for="search">Поиск на <?php echo home_url( '/' ); ?></label>
    <input type="text" name="s" id="search" value="<?php the_search_query(); ?>" />
    <input type="image" alt="Поиск" title="Нажмите для поиска" src="<?php bloginfo( 'template_url' ); ?>/images/search.png" />
</form>
30 окт. 2019 г. 13:53:37