在wordpress中,如何将帖子限制在类别上?

时间:2012-10-17 21:37:43

标签: jquery wordpress

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

对不起,我应该更清楚了。当选中框以选择帖子将进入的类别时,我希望它可以用作单选按钮,您只能选择一个选项。

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 个答案:

答案 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 eventMake parent categories not selectable

在我的 functions.php 中,我为admin_footer-postadmin_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
}

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