【问题标题】:Modifying standard WordPress 4.4.2 Categories widget to display custom taxonomies修改标准 WordPress 4.4.2 类别小部件以显示自定义分类
【发布时间】:2016-04-09 17:11:53
【问题描述】:

我已经编辑(当然是副本)/wp-includes/widgets/class-wp-widget-categories.php 以强制它通过添加一行来显示我的自定义分类的内容(#59 as for $cat_args = array(); 末尾的 WP 4.2.2) 的原始文件,所以现在它读取

$cat_args = array(
        'orderby'      => 'name',
        'show_count'   => $c,
        'hierarchical' => $h,
        'taxonomy'     => 'my_taxonomy'
    );

在这一点上没什么难的,当新的小部件设置为列表时,一切都按预期工作。

在将新小部件设置为显示为下拉菜单后,一切都会立即被破坏,因为下拉列表中的所有项目都指向不存在的 URL。

根据我的经验水平(实际上它不是零。但我正在学习!)让我看到,问题隐藏在原始小部件的 #62 行中的某处

$dropdown_id = ( $first_dropdown ) ? 'cat' : "{$this->id_base}-dropdown-{$this->number}";

在我看来,这个确切的字符串负责根据从第 82 行开始的 JS 设置下拉列表项的值。

我可以替换

?cat=

my_taxonomy/

我自己在第 88 行,但我需要将正确的值放入 $dropdown_id 变量中。

这就是我的问题。

有人可以帮忙吗?

【问题讨论】:

    标签: php wordpress taxonomy


    【解决方案1】:

    问题很不清楚。但是,如果您正在使用此方法访问属于类别的自定义分类法,则不会显示。显示自定义分类的过程有很大不同。

    【讨论】:

    • 其实这个方法绝对完美。自己试试。 )
    • 我已经经历了这个阶段。最好和有效的方法是以另一种方式使用自定义分类法。您应该必须使用一些不同的文件。
    • 如果这个方法在 WP 中实现,效果很好,而且需要很少的努力来实现,我为什么要这样做?
    • 试着彻底看看这个
    【解决方案2】:

    因为我自己发现了解决方案,所以我会回答我自己的问题,以防万一有人遇到同样的问题。

    不可能强制 wp_dropdown_categories() 使用自定义分类而不对 Walker_CategoryDropdown 类进行一点修改,因为它具有古老的错误或功能。

    所以我需要修改 /wp-includes/class-walker-page-dropdown.php 中的 Walker_CategoryDropdown 类。

    为了保留原始的 class-walker-page-dropdown.php,我应该将其内容复制到我的插件文件中。那我应该换

    $args['value_field'] = 'ID';
    

    在第 48 行找到

    $args['value_field'] = 'slug';
    

    使修改后的类能够获取分类 slug 而不是类别 ID,并将其放入我的新小部件的 <option>'s value=" " 术语中。

    然后我删除了第 1、47 和 49 行并替换了

    class Walker_PageDropdown extends Walker {
    

    class custom_walker_dropdown extends Walker_CategoryDropdown {
    

    将此修改定义为一个新的单独类。

    最后,我在基于 WP 原生类别小部件的新小部件中将新类设置为 wp_dropdown_categories() 的 Walker。

    我已经避免在小部件范围内设置新类,因为它会破坏新小部件的 List 部分,因此应将 custom_walker_dropdown 类设置为仅用于 wp_dropdown_categories() 的 walker。

    最后一步是替换我修改后的/wp-includes/widgets/class-wp-widget-categories.php副本的第87行

    if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
    

    if ( dropdown.options[ dropdown.selectedIndex ].value !== 0 ) {
    

    让负责这个下拉菜单的 JS 工作。

    宾果!一切正常。

    实际上,通过谷歌搜索可以找到大量自定义 Walker,但对我而言,最好的方法是学习原始课程并进行一些修改。

    【讨论】:

    • 我在最初的问题中已经说过,我将用 'my_taxonomy/' 替换 '?cat='。错误的方法。我应该将 '?cat=' 替换为 '?my_taxonomy=' 以确保在关闭永久链接时不会出现任何问题。
    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2013-03-10
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多