【问题标题】:Selected option for current url in drop down list not working下拉列表中当前 url 的选定选项不起作用
【发布时间】:2013-07-26 19:38:41
【问题描述】:

在我的 wordpress 主题中使用这段代码:

<select name="archive-dropdown" onChange="document.location.href=this.options[this.selectedIndex].value;">
<option value="">Select month</option>
<?php wp_get_archives('type=monthly&format=option'); ?>
</select> 

取自这里:http://codex.wordpress.org/Function_Reference/wp_get_archives

这是输出的代码

<select name="archive-dropdown" onChange="document.location.href=this.options[this.selectedIndex].value;">
<option value="">Select month</option>
<option value='http://www.domain.com/?m=201307'> July 2013 </option>
<option value='http://www.domain.com/?m=201306'> June 2013 </option>
<option value='http://www.domain.com/?m=201305'> May 2013 </option>
</select>

例如,如果我选择 7 月,则会出现 7 月存档页面,并且我检查了该页面的地址是否正确:http://www.domain.com/?m=201307

但下拉菜单中未选择七月选项。我知道 onChange 字段中的 javascript 位是将文档 href 与选项进行比较,然后选择匹配的选项值,但它似乎不起作用。

有什么帮助吗?

【问题讨论】:

    标签: wordpress drop-down-menu archive selected


    【解决方案1】:

    想办法在我的 WordPress 主题功能中创建自定义过滤器。把它放在我主题的functions.php

    function get_archives_link_mod ( $link_html ) {
        preg_match ("/value='(.+?)'/", $link_html, $url);
        $requested = "http://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}";
        if ($requested == $url[1]) {
            $link_html = str_replace("<option", "<option selected='selected'", $link_html);
        }
        return $link_html;
    }
    

    然后把它放到我主题的archive.php:

    <form action="" method="get">
        <select name="archive-dropdown" onChange="document.location.href=this.options[this.selectedIndex].value;">
        <option value="">PICK MONTH</option>
            <?php add_filter("get_archives_link", "get_archives_link_mod"); ?>
            <?php wp_get_archives('type=monthly&format=option'); ?>
        </select> 
    </form>
    

    我基本上采用here建议的代码在wp_get_archives()的默认列表版本中突出显示当前链接,并针对函数的选项格式进行了修改。作为一个非编码员,花了一点时间挖掘,把它贴在这里可能就像一棵树倒下,周围没有人听到它一样重要,但我只是拍拍自己的后背,假装是别人的手在这个悲伤而荒凉的世界。

    【讨论】:

    • 如果使用任何端口或 SSL,$requested 变量会出错,此版本更准确 $requested = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多