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

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 回答
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 回答