发布时,我希望用户只能选择一个类别。我怎样才能实现这样的目标呢?
对不起,我应该更清楚了。当选中框以选择帖子将进入的类别时,我希望它可以用作单选按钮,您只能选择一个选项。
jQuery将是一个快速解决方案,并发现jquery跟随代码在线,我正在试图找出将其添加到post.php头标记的位置:
var $t = jQuery.noConflict();
$t(document).ready(function() {
$t('#categorychecklist li input[type="checkbox"]').each(function(){
$t(this).change(function(){
//alert( $t('#categorychecklist li input[checked="checked"]').parent().html() );
$t('#categorychecklist li input').attr('checked','');
$t(this).attr('checked','checked');
})
})
});
答案 0 :(得分:1)
我也在寻找解决这个问题的好方法。本主题显示了一个插件(php)变体,它将类别转换为单选按钮:http://wordpress.org/support/topic/select-only-one-category-1但它不进行任何类型的任何验证,因此可以通过webkit或firebug编辑html来操作它(type =“ radio“=> type =”复选框“)并且您最终可以为帖子添加许多类别,并且js脚本也容易受到萤火虫操纵。
编辑:我找到了一个很好的解决方案,可以将类别(以及任何其他分类法)转换为一个不能被欺骗的下拉列表: http://wordpress.org/extend/plugins/acategory-dropdown-list/@dpassage我似乎无法发表评论
答案 1 :(得分:0)
为什么不把它放在像这样的 functions.php 中;在管理区域注册?
//All the rest of your php stuff above ^^
add_action( 'admin_head', 'jquery_for_categories' );
function jquery_for_categories(){ ?>
<script type="text/javascript">
var $t = jQuery.noConflict();
$t(document).ready(function() {
$t('#categorychecklist li input[type="checkbox"]').each(function(){
$t(this).change(function(){
//alert( $t('#categorychecklist li input[checked="checked"]').parent().html() );
$t('#categorychecklist li input').attr('checked','');
$t(this).attr('checked','checked');
})
})
});
</script>
} <?
答案 2 :(得分:0)
因此,假设您想要一个,并且只选择一个类别,我会考虑将inout类型从复选框更改为单选按钮。你可以做到这一点,而不会使管理区域<head />
比现在更加混乱。以下是您可以添加到函数文件中的几种方法:
/**
* Add scripts (JavaScript, etc.) to the admin area
*/
public function addAdminScripts()
{
if( is_admin() )
{
wp_register_script( 'your-script-id', get_template_directory() . '/inc/javascript/jquery.script.name.js', array( 'jquery' ) );
wp_enqueue_script( 'your-script-id' );
}
}
/**
* Add CSS files to the admin area
*/
public function addAdminStyles()
{
if( is_admin() )
{
wp_enqueue_style( 'your-css-id' );
wp_enqueue_style( 'your-css-id', get_template_directory(). '/inc/css/your_custom_base.css' );
}
}
条件is_admin()
将确保文件仅包含在管理区域中,您可以扩展条件以专门检查发布/编辑屏幕。这可以确保您可以在主题目录中包含js / css文件(或者如果将其包装在插件中,则可以将其保存到插件目录中)。无论哪种方式,你在管理领域的侵入性都会降低。
现在,就你的实际脚本而言,Alex有一个良好的开端,但你应该更进一步,实际上将输入类型更改为单选按钮,这样你就可以继承它们的自然行为,而不是强制一个复选框来表现得像一个单选按钮。这是一篇关于SO的相关文章,非常适合做how to change an element type using jquery(奖励:所选答案的作者将其包装成一个漂亮的插件)
答案 3 :(得分:0)
我曾尝试像许多建议一样使用单选按钮插件,但是它破坏了ACF的所有功能,因此保留复选框是必不可少的。
在我的示例中,大多数代码改编自jQuery checkbox change and click event和Make parent categories not selectable
在我的 functions.php 中,我为admin_footer-post
和admin_footer-post-new
添加了操作(否则新帖子将不受影响)。我确定您可以将其添加到标题中,但不要忘记使用.ready()
无论如何,代码真的很简单:如果是帖子,则在更改类别复选框后,将所有选中的复选框删除,并应用单击的复选框。
add_action( 'admin_footer-post.php', 'only_allow_one_checkbox' );
add_action( 'admin_footer-post-new.php', 'only_allow_one_checkbox' );
function only_allow_one_checkbox()
{
global $post_type;
if ( 'post' != $post_type )
return;
?>
<script type="text/javascript">
$('#categorychecklist>li>label input').change(function() {
if(this.checked) {
$('#categorychecklist>li>label input').prop("checked", false);
$(this).prop("checked", true);
}
});
</script>
<?php
}
到目前为止,它非常容易实现,并且没有遇到任何问题。