3

发布时,我希望用户只能选择一个类别。我怎样才能实现这样的目标?

对不起,我应该更清楚。在选中复选框以选择帖子将进入的类别时,我希望它充当单选按钮,您可以在其中仅选择一个选项。

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');
    })
  })
});
4

4 回答 4

1

我也在寻找解决此类问题的好方法。本主题显示了一个插件(php)变体,它将类别转换为单选按钮:http ://wordpress.org/support/topic/select-only-one-category-1但它不做任何类型的任何验证,所以它可以通过 webkit 或 firebug (type="radio" => type="checkbox") 编辑 html 来操作,并且您可以再次为帖子创建许多类别,并且 js 脚本也容易受到 firebug 操作的影响。

编辑:我找到了一个很好的解决方案,可以将类别(和任何其他分类)变成一个不能被欺骗的下拉列表: http ://wordpress.org/extend/plugins/acategory-dropdown-list/

@dpassage 我似乎无法发表评论

于 2012-10-18T21:35:37.323 回答
0

因此,假设您想要选择一个并且恰好选择一个类别,我会考虑将输入输出类型从复选框更改为单选按钮。您可以做到这一点,而不会使管理区域<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 的相关帖子,这是一个非常好的参考,可以准确地说明如何使用 jquery 更改元素类型奖励:所选答案的作者将其包装成一个不错的插件)

于 2012-10-19T02:12:43.143 回答
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>
} <?
于 2012-10-17T22:34:48.663 回答
0

我尝试使用许多建议的单选按钮插件,但它破坏了 ACF 的任何功能,因此保留复选框是必不可少的。

在我的示例中,大多数代码改编自 jQuery 复选框更改和单击事件&使父类别不可选择

在我的functions.phpadmin_footer-post中,我为and添加操作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
}

到目前为止,它很容易实现并且没有遇到任何问题。

于 2019-09-20T20:52:39.733 回答