在 Wordpress 中,如何将帖子限制为仅一个类别复选框?
Posted
技术标签:
【中文标题】在 Wordpress 中,如何将帖子限制为仅一个类别复选框?【英文标题】:In Wordpress, how to restrict posts to only one category checkbox? 【发布时间】:2012-10-08 06:29:58 【问题描述】:发帖时,我希望用户只能选择一个类别。我怎样才能实现这样的目标?
对不起,我应该更清楚。在选中复选框以选择帖子将进入的类别时,我希望它充当单选按钮,您可以在其中仅选择一个选项。
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');
)
)
);
【问题讨论】:
如果你想得到答案,你需要更多的信息。 我的意思是我想将用户限制在一个类别(红色小部件或蓝色小部件,而不是两者)。我不知道从哪里开始。也许我可以得到一些指示...... 我花了 45 秒才找到这个:wordpress.org/extend/plugins/members-category 那么,您只想选择一 (1) 个类别——您通常在单选按钮组中看到的那种行为? 【参考方案1】:我尝试使用许多建议的单选按钮插件,但它破坏了 ACF 的任何功能,因此保留复选框是必不可少的。
在我的示例中,大部分代码改编自 jQuery checkbox change and click event 和 Make parent categories not selectable
在我的 functions.php 中,我为 admin_footer-post
和 admin_footer-post-new
添加了操作(否则新帖子不会受到影响)。我相信您可以将其添加到标题中,但不要忘记使用 .ready() 更新 jquery
无论如何,代码非常简单:如果是帖子,则在更改类别复选框时删除所有选中并应用单击的检查。
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
到目前为止,它很容易实现并且没有遇到任何问题。
【讨论】:
【参考方案2】:因此,假设您想要选择一个并且恰好选择一个类别,我会考虑将输入输出类型从复选框更改为单选按钮。您可以做到这一点,而不会使管理区域的<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】:我也在寻找解决此类问题的好方法。本主题显示了一个插件(php)变体,它将类别转换为单选按钮:http://wordpress.org/support/topic/select-only-one-category-1,但它不进行任何类型的验证,因此可以通过 webkit 或 firebug 编辑 html 来操作它(type="radio" => type="checkbox") 并且您可以再次为帖子提供许多类别,并且 js 脚本也容易受到萤火虫的操纵。
编辑:我找到了一个很好的解决方案,可以将类别(和任何其他分类)变成一个不能被欺骗的下拉列表: http://wordpress.org/extend/plugins/acategory-dropdown-list/
@dpassage 我似乎无法评论
【讨论】:
这并不能真正回答问题,因此作为评论可能更好。【参考方案4】:为什么不把它像这样放在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>
<?
【讨论】:
以上是关于在 Wordpress 中,如何将帖子限制为仅一个类别复选框?的主要内容,如果未能解决你的问题,请参考以下文章