将分层复选框替换为自定义帖子类型中自定义分类的下拉选择器



我已经看过几篇关于这个主题的博客文章,但未能成功实现它们。

我已经尝试了以下方法(也许其中之一是解决方案,我有点偏离(:

  1. https://pagecrafter.com/dropdown-menu-of-all-terms-in-custom-taxonomy-wordpress/
  2. Wordpress - 分类下拉列表不适用于分层
  3. https://www.noelsheppard.co.uk/create-dropdown-list-custom-taxonomy-terms/(基本上是示例 1(
  4. https://shibashake.com/wordpress-theme/wordpress-custom-taxonomy-input-panels
  5. 最后,阅读此内容

我有一个属性的CPT,它有三个自定义分类法:

  1. 客人
  2. 房间
  3. 城市
  4. (城市分类通过自定义函数填充,该函数监视第二个 CPT [目的地] 何时创建新帖子,并将与分类相同的名称添加到属性城市条目(

我想确保在创建属性帖子并设置其城市时仅选择一个城市(目的地(。我想为此操作使用下拉列表。

按照上面第一个(或第三个(链接的示例,我尝试了以下实现:

在我的函数中初始化的函数.php:

// Creates dropdown taxonomy select for guest taxonomy in Properties.
function dropdown_tax_init(){
$categories = get_categories('taxonomy=city');
$select     = "<select name='cat' id='cat' class='top-tags-dropdown'>n";
$select .= "<option value='-1'>Select Tag</option>n";
foreach ($categories as $category) {
if ($category->count > 0) {
$select .= "<option value='" . $category->slug . "'>" . $category->name . "</option>";
}
}
$select .= "</select>";
echo $select;
}
add_action( 'init', 'dropdown_tax_init' );

我也通过我的函数调用 js.php如下所示:

function admin_footer_script() {
wp_register_script('dropdown_tax_script', get_template_directory_uri() . '/js/taxonomy-dropdown.js', array('jquery'), '1.0.0'); // Conditional script(s)
wp_enqueue_script('dropdown_tax_script'); // Enqueue it!
}
add_action( 'admin_footer', 'admin_footer_script' );

最后,我的js如下:

var dropdown = document.getElementById("cat");
function onCatChange() {
if (dropdown.options[dropdown.selectedIndex].value != -1) {
location.href = "<?php echo home_url();?>/city/" + dropdown.options[dropdown.selectedIndex].value + "/";
}
}
dropdown.onchange = onCatChange;

我的 JavaScript 显示在管理员页脚中的检查中。

下拉菜单在加载时闪烁,但当我的函数中有函数时,自定义分类法不会加载.php 古腾堡编辑器右侧边栏中自定义分类法的加载中断了。他们从不出现。

很高兴详细介绍,谢谢。

不确定这是否是主要原因,但无论如何你不能像这样执行 JavaScript 形式的 PHP 代码:

location.href = "<?php echo home_url();?>/city/" + '...';

这将导致无效的 url 并使重定向失败。如果需要将某些值从 PHP 传输到 JS,请改用wp_localize_script()函数。在此处查看详细信息。

要调试其他潜在问题,您需要执行一些单独的 tet:

  1. PHP 端。确保您的$categories数组不为空并且具有非空类别,或者只需检查$select输出(目前未执行任何相关的 JS(。
  2. JS端。记录每次对控制台的onCatChange()调用,以确保onchange事件:a(正确触发,2(不是由其他原因触发的(例如,在旧IE中失去焦点或其他棘手的意外(。然后记录分配给location.href的字符串值,并确保它没有损坏并且是有效的 url。

其他提示:

  • 始终转义您的输出($category->slug$category->name- 它们并不总是可靠的,有时可能会破坏您的标记(;
  • 字符串中插入换行符时可能错过了反斜杠:应该n,而不仅仅是n
  • 如果你调用一个带有依赖array('jquery')的脚本,请随意使用 jQuery 而不是普通的 JavaScript。这可以帮助您避免跨浏览器问题。

希望这有帮助。

最新更新