修改标准 WordPress 4.4.2 类别小部件以显示自定义分类法
Modifying standard WordPress 4.4.2 Categories widget to display custom taxonomies
我已经编辑(当然是副本)/wp-includes/widgets/class-wp-widget-categories.php 以强制它通过仅添加一行(#59 与原始文件一样)来显示我的自定义分类法的内容来自 WP 4.2.2) 在 $cat_args = array(); 的末尾,所以现在它显示为
$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 变量中。
这就是我的问题。
有人可以帮忙吗?
问题很不明确。但是,如果您使用此方法访问作为类别的自定义分类法,则它将不会显示。显示自定义分类的过程有很大不同。
因为我自己找到了解决方案,所以我会自己回答我的问题,以防万一有人遇到同样的问题。
不可能强制wp_dropdown_categories()
使用自定义分类而不对Walker_CategoryDropdown
class做一点修改,由于到其古老的错误或功能。
所以我需要修改在/wp-includes/class-walker-page-dropdown.php
中找到的Walker_CategoryDropdown class。
为了保留原始 class-walker-page-dropdown.php 我应该将其内容复制到我的插件文件中。那我应该替换
$args['value_field'] = 'ID';
在第 48 行找到
$args['value_field'] = 'slug';
使修改后的 class 能够获取分类 slug 而不是类别 ID,并将其放入我的新小部件的 <option>
的 value=" " 项中。
然后我删除了第 1、47 和 49 行并替换了
class Walker_PageDropdown extends Walker {
和
class custom_walker_dropdown extends Walker_CategoryDropdown {
将此修改定义为新的单独 class。
最后,我在基于 WP 的原生类别小部件的新小部件中将新 class 设置为 wp_dropdown_categories()
的 Walker。
我避免设置新的 class 小部件范围,因为它会破坏新小部件的列表部分,因此 custom_walker_dropdown
class 应该设置为 walker 只有wp_dropdown_categories()
.
最后一步是替换我修改后的 /wp-includes/widgets/class-wp-widget-categories.php
副本的第 87 行
if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
和
if ( dropdown.options[ dropdown.selectedIndex ].value !== 0 ) {
使负责此下拉菜单工作的 JS。
宾果!一切正常。
实际上,通过谷歌搜索在这里和那里找到了大量自定义助行器,但对我而言,最好的方法是采用原始 class 并进行一些修改。
我已经编辑(当然是副本)/wp-includes/widgets/class-wp-widget-categories.php 以强制它通过仅添加一行(#59 与原始文件一样)来显示我的自定义分类法的内容来自 WP 4.2.2) 在 $cat_args = array(); 的末尾,所以现在它显示为
$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 变量中。
这就是我的问题。
有人可以帮忙吗?
问题很不明确。但是,如果您使用此方法访问作为类别的自定义分类法,则它将不会显示。显示自定义分类的过程有很大不同。
因为我自己找到了解决方案,所以我会自己回答我的问题,以防万一有人遇到同样的问题。
不可能强制wp_dropdown_categories()
使用自定义分类而不对Walker_CategoryDropdown
class做一点修改,由于到其古老的错误或功能。
所以我需要修改在/wp-includes/class-walker-page-dropdown.php
中找到的Walker_CategoryDropdown class。
为了保留原始 class-walker-page-dropdown.php 我应该将其内容复制到我的插件文件中。那我应该替换
$args['value_field'] = 'ID';
在第 48 行找到
$args['value_field'] = 'slug';
使修改后的 class 能够获取分类 slug 而不是类别 ID,并将其放入我的新小部件的 <option>
的 value=" " 项中。
然后我删除了第 1、47 和 49 行并替换了
class Walker_PageDropdown extends Walker {
和
class custom_walker_dropdown extends Walker_CategoryDropdown {
将此修改定义为新的单独 class。
最后,我在基于 WP 的原生类别小部件的新小部件中将新 class 设置为 wp_dropdown_categories()
的 Walker。
我避免设置新的 class 小部件范围,因为它会破坏新小部件的列表部分,因此 custom_walker_dropdown
class 应该设置为 walker 只有wp_dropdown_categories()
.
最后一步是替换我修改后的 /wp-includes/widgets/class-wp-widget-categories.php
if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
和
if ( dropdown.options[ dropdown.selectedIndex ].value !== 0 ) {
使负责此下拉菜单工作的 JS。
宾果!一切正常。
实际上,通过谷歌搜索在这里和那里找到了大量自定义助行器,但对我而言,最好的方法是采用原始 class 并进行一些修改。