Изменение стандартного поискового виджета
Я создаю виджет плагина, который выполняет поиск, отличающийся от стандартного поискового виджета. Я скопировал код стандартного виджета:
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
Вы можете подключиться к хуку действия '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

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

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

Самый чистый способ:
Создайте файл searchform.php в вашей теме. Он будет использоваться вместо стандартного.
Добавьте новый 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>
