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