问题描述
我有一个 CPT 站点 (自定义帖子类型的缩写)”bagp_deals” 和自定义分类”ba_locations” 和”ba_cats” 基本上它的”Deals” 的”Location” 和”Categories” 的分类分类。在默认编辑屏幕上,我想将选择限制为每个 (一个位置和一个类别) 中的一个,我正在尝试使用 JQuery 进行此操作,我注意到 ba_locations 的字段自定义分类法命名为”tax_input[ba_locations][]”,到目前为止有这个代码:
jQuery("input[name=tax_input[ba_locations][]]").click(function () {
selected = jQuery("input[name=tax_input[ba_locations][]]").filter(":checked").length;
if (selected > 1){
jQuery("input[name=tax_input[ba_locations][]]").each(function () {
jQuery(this).attr("checked", false);
});
jQuery(this).attr("checked", true);
}
});
假设巫婆将复选框选择限制为一个。由于某种原因,我无法让它上班。
问题
所以问题是为什么这不工作?或者你有更好的解决方案来限制选择只有一个?
任何帮助都不胜感激。
更新:
这是我使用的工作代码:
jQuery("input[name="tax_input[ba_locations][]"]").click(function () {
selected = jQuery("input[name="tax_input[ba_locations][]"]").filter(":checked").length;
if (selected > 1){
jQuery("input[name="tax_input[ba_locations][]"]").each(function () {
jQuery(this).attr("checked", false);
});
jQuery(this).attr("checked", true);
}
});
最佳解决方案
而不是使用 jQuery 进行黑客攻击,而更可靠的解决方案是用 PHP 自己替换元框。
无论如何,问题很可能是选择器中的'[‘ 和’]’ 字符:
"input[name=tax_input[ba_locations][]]"
可以重写为
"input[name=tax_input\[ba_locations\]\[\]]"
次佳解决方案
我有一个 php 解决方案给你:
add_filter('wp_terms_checklist_args', 'htmlandcms_select_one_category');
function htmlandcms_select_one_category($args) {
if (isset($args['taxonomy']) && $args['taxonomy'] == 'category_portfolio') {
$args['walker'] = new Walker_Category_Radios;
$args['checked_ontop'] = false;
}
return $args;
}
class Walker_Category_Radios extends Walker {
var $tree_type = 'category';
var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');
function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("t", $depth);
$output .= "$indent<ul class='children'>n";
}
function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("t", $depth);
$output .= "$indent</ul>n";
}
function start_el( &$output, $category, $depth, $args, $id = 0 ) {
extract($args);
if ( empty($taxonomy) )
$taxonomy = 'category';
if ( $taxonomy == 'category' )
$name = 'post_category';
else
$name = 'tax_input['.$taxonomy.']';
/** @var $popular_cats */
$class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
/** @var $selected_cats */
$output .= "n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="radio" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), TRUE, FALSE ) . disabled( empty( $args['disabled'] ), FALSE, FALSE ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
}
function end_el( &$output, $category, $depth = 0, $args = array() ) {
$output .= "</li>n";
}
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。