在同一页面上有不同的搜索输入占位符 - wordpress

时间:2013-03-02 15:29:06

标签: php wordpress

如果您使用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 -->

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分: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和样式保存在您希望窗口小部件搜索表单显示的位置。