【问题标题】:Have different placeholders for search inputs on the same page - wordpress在同一页面上为搜索输入使用不同的占位符 - wordpress
【发布时间】:2013-02-17 00:58:57
【问题描述】:

如果你在 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 -->

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    我不太确定您要做什么,但总体思路很简单。只需有条件地创建占位符文本。

    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);
      }
    }
    

    【讨论】:

    • 不完全是,我有一个页面,在不同的位置有 3 个搜索框。其中一个很小,所以我不希望它有占位符。它应该更像是一个位置 if 语句,但我不确定如何做到这一点。类似于:如果搜索在#main-menu 中,则不显示占位符
    【解决方案2】:

    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 和该文件的样式,您希望您的小部件搜索表单出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2016-06-25
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2020-10-20
      相关资源
      最近更新 更多