web-dev-qa-db-ja.com

デフォルトの検索ウィジェットを変更する

通常のデフォルト検索ウィジェットとは異なる検索を実行するプラグインウィジェットを作成しています。私はデフォルトのウィジェットからコードをコピーしました:

class new_search extends WP_Widget {


             function __construct() {
                    $widget_ops = array('classname' => 'widget_search', 'description' => __( "A search form for NextGen photos") );
                    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;

                    // Use current theme search form if it exists
                    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('Title:'); ?> <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;
            }





    } // end class example_widget
    add_action('widgets_init', create_function('', 'return register_widget("new_search");'));
    ?>

このデフォルトの検索ウィジェットがsearch.php関数を呼び出す場所を見つけるのに問題があります。基本的に私は自分自身のsearch.php関数(AKA searchNew.php)を作成し、ユーザーが検索にヒットしたときにそれを呼び出すことを望みます。 search.phpが呼び出されて別のファイルに置き換えることができるアイデアはありますか。

編集:私はすでにsearchform.phpファイル(get_search_formによって呼び出されたもの)を調べましたが、それがsearch.phpを呼び出していることを示唆するものは何もないようです

5
Conrad S

'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">' . __( 'Search for:' ) . '</label>
    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="'. esc_attr__( 'Search' ) .'" />
    </div>
    </form>';

    return $form;
}

add_filter( 'get_search_form', 'my_search_form', 100 );

http://codex.wordpress.org/Function_Reference/get_search_form#Theme_Form

8
skim-