0

wordpress で searchform.php を使用して検索入力ボックスを表示する場合。同じページのさまざまな検索ボックスにさまざまなプレースホルダーを表示するにはどうすればよいですか? たとえば、フッター、サイドバー、メイン ナビゲーション メニューのウィジェットに検索ボックスがあるページがあります。それぞれに異なるプレースホルダーを表示したいと思います。

これは私が検索フォームに持っているものです

<!-- Searchform -->
<form method="get" class="search" action="<?php echo home_url(); ?>" >
    <input id="s" placeholder="Search..." type="text" name="s" onfocus="if (this.value==this.defaultValue) this.value = '';" 
    onblur="if (this.value=='') this.value = this.defaultValue" >
    <input class="searchsubmit" type="submit" value="<?php _e( '', 'mytheme' ); ?>">
</form>
<!-- /Searchform -->
4

2 に答える 2

0

何をしようとしているのかよくわかりませんが、一般的な考え方は非常に単純です。条件付きでプレースホルダー テキストを作成するだけです。

if (is_home()) {
  $placeholder = "Search Posts...";
} elseif(is_tag()) {
  $placeholder = "Search Tags...";
} else {
  $placeholder = "Search...";
}

<!-- Searchform -->
<form method="get" class="search" action="<?php echo home_url(); ?>" >
    <input id="s" placeholder="<?php echo $placeholder; ?>" type="text" name="s" onfocus="if (this.value==this.defaultValue) this.value = '';" 

それはあなたが探しているもののようなものですか?

要件の詳細な説明に基づいて

検索フォームの機能は、実際には意図したとおりに動作するようには設計されていません。グローバル変数でそれをごまかすことができます。

置く

$GLOBALS['placeholder'] = "Default placeholder value";

functions.php次に、フォームを編集して読み取ります...

<!-- Searchform -->
<form method="get" class="search" action="<?php echo home_url(); ?>" >
    <input id="s" placeholder="<?php echo $GLOBALS['placeholder']; ?>" type="text" name="s" onfocus="if (this.value==this.defaultValue) this.value = '';" 

そして、次のように関数を呼び出します。

$GLOBALS['placeholder'] = "Placeholder value...";
get_search_form();

ドキュメントによるとget_search_form(false)、文字列を返す必要があります。つまり、次のようなものが機能するはずです。

検索フォームを次のように編集します。

<!-- Searchform -->
<form method="get" class="search" action="<?php echo home_url(); ?>" >
    <input id="s" placeholder="%s" type="text" name="s" onfocus="if (this.value==this.defaultValue) this.value = '';" 

そして、使用...

$search_form = get_search_form(false);
printf($search_form,'Placeholder...');

これにより、グローバルが回避されます。これは一般的には良いことです。箱から出してすぐに動作することはできませんでした。ソースを見ると、その機能は の有無に依存しているようですsearchform.php。そのファイルが存在する場合、それは単に含まれているため、「文字列を返す」部分はかなり危険です。そして、利用可能なフィルターを使用してハイジャックすることは驚くほど困難であることが証明されています.

ジャグリングを避けるにはglobal、たとえば、「get_search_form」を次のように置き換える必要があると思います。

function my_get_searchform($placeholder = 'Search') {
  $search_form_template = locate_template('searchform.php');
  if ( '' != $search_form_template ) {
    ob_start();
    require($search_form_template);
    $form = ob_get_clean();
    printf($form,$placeholder);
  }
}
于 2013-03-02T16:12:00.080 に答える
0

get_search_form() 関数は、searchform.php からコードを出力します。ページで get_search_form() を使用する代わりに、その関数を取り出し、searchform.php からコードをコピーして、検索バーを表示したい場所に貼り付けます。次に、それに応じてプレースホルダー テキストを変更します。

<html>
    <head>
        <!-- Header Stuff -->
    </head>
    <body> 
        <div class="main-navigation-menu">   
            <!-- Searchform -->
            <form method="get" class="search" action="<?php echo home_url(); ?>" >
                <input id="s" placeholder="PLACEHOLDER TEXT HERE" type="text" name="s" onfocus="if    (this.value==this.defaultValue) this.value = '';" 
                onblur="if (this.value=='') this.value = this.defaultValue" >
                <input class="searchsubmit" type="submit" value="<?php _e( '', 'mytheme' ); ?>">
            </form>
            <!-- /Searchform -->
        </div>
        <div class="sidebar">
           <div class="widget">
               <!-- Default widget stuff from functions.php will appear here. Searchform styling will come from searchform.php -->
           </div>
        </div>
        <div class="footer">   
            <!-- Searchform -->
            <form method="get" class="search" action="<?php echo home_url(); ?>" >
                <input id="s" placeholder="PLACEHOLDER TEXT HERE" type="text" name="s" onfocus="if    (this.value==this.defaultValue) this.value = '';" 
                onblur="if (this.value=='') this.value = this.defaultValue" >
                <input class="searchsubmit" type="submit" value="<?php _e( '', 'mytheme' ); ?>">
            </form>
            <!-- /Searchform -->
        </div>
    </body>
</html>

searchform.php を保持し、ウィジェット検索フォームをどのように表示するかをそのファイルにスタイル設定します。

于 2013-03-08T17:25:55.170 に答える