为什么URL中的ID不起作用,而插件却起作用?

时间:2012-07-08 作者:Christian

我迷路了,我不明白为什么会这样

http://website.com/?tag=my-cat-slug
而不是这个

http://website.com/?tag=15
真的很烦人因为wp_dropdown_categories() 仅提供ID作为值。

我尝试将永久链接更改为默认设置,而不是重写:

http://website.com/?p=123
但它没有改变什么

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

因为tag 查询变量期望值为术语slug。它将寻找slug“15”这个词(可能不存在)。

是的,这很令人沮丧wp_dropdown_categories() 使用ID作为值,而不是slug。这是因为它最初只用于类别(通常使用ID而不是SLUG),而不是一般的分类法。

然而,有this ticket on it. 我已经创建了this gist, 可以让你wp_dropdown_categories() 使用slug而不是id作为值。

供参考(插件中应包含以下类):

/* 
 * A walker class to use that extends wp_dropdown_categories and allows it to use the term\'s slug as a value rather than ID.
 *
 * See http://core.trac.wordpress.org/ticket/13258
 *
 * Usage, as normal:
 * wp_dropdown_categories($args);
 *
 * But specify the custom walker class, and (optionally) a \'id\' or \'slug\' for the \'value\' parameter:
 * $args=array(\'walker\'=> new SH_Walker_TaxonomyDropdown(), \'value\'=>\'slug\', .... );
 * wp_dropdown_categories($args);
 * 
 * If the \'value\' parameter is not set it will use term ID for categories, and the term\'s slug for other taxonomies in the value attribute of the term\'s <option>.
*/

class SH_Walker_TaxonomyDropdown extends Walker_CategoryDropdown{

    function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ){
        $pad = str_repeat(\'&nbsp;\', $depth * 3);
        $cat_name = apply_filters(\'list_cats\', $category->name, $category);

        if( !isset($args[\'value\']) ){
            $args[\'value\'] = ( $category->taxonomy != \'category\' ? \'slug\' : \'id\' );
        }

        $value = ($args[\'value\']==\'slug\' ? $category->slug : $category->term_id );

        $output .= "\\t<option class=\\"level-$depth\\" value=\\"".$value."\\"";
        if ( $value === (string) $args[\'selected\'] ){   
            $output .= \' selected="selected"\';
        }
        $output .= \'>\';
        $output .= $pad.$cat_name;
        if ( $args[\'show_count\'] )
            $output .= \'&nbsp;&nbsp;(\'. $category->count .\')\';

        $output .= "</option>\\n";
        }

}

使用

$args=array(
    \'walker\'=> new SH_Walker_TaxonomyDropdown(), 
    \'value\'=>\'slug\', 
     .... 
);
wp_dropdown_categories($args);
“value”参数是可选的。对于类别,默认值为“id”,对于其他分类,默认值为“slug”。

结束

相关推荐

Strange widget behavior

我通过简单地复制一个默认的widgets类并修改它来创建widget奇怪的是,小部件管理区域中没有显示此小部件。当我搜索页面源代码时,小部件在那里,但它有内联样式display:none;.<另一件奇怪的事是,标题字段也没有显示这是我的小部件代码:/** * Mood widget class * **/ class WP_Widget_Mood extends WP_Widget { function __construct() {&#