下拉列表中当前网址的选定选项不起作用

时间:2013-07-26 19:38:41

标签: wordpress drop-down-menu archive selected

在我的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

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

任何帮助?

1 个答案:

答案 0 :(得分:4)

想出它在我的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()的默认列表版本中的当前链接,并将其修改为该函数的选项格式。作为一个非编码人员花了一些时间进行挖掘并在这里张贴它可能就像一棵树一样落在旁边没有人听到它,但我只是轻拍自己,假装它是别人的手在这个悲伤和荒凉的世界里。