如果未选择类别,则阻止发布帖子

时间:2014-01-02 作者:Prakash Raman

如果没有选择类别,我不希望用户能够发布帖子。我不介意抛出JS警报或在服务器端处理此问题。

无论如何,我怎样才能确保这一点?

注意:也不应选择“未分类”。

2 个回复
最合适的回答,由SO网友:shahpranaf 整理而成

使用jQuery可以轻松做到这一点:

/* Checks if cat is selected when publish button is clicked */
jQuery( \'#submitdiv\' ).on( \'click\', \'#publish\', function( e ) {
    var $checked = jQuery( \'#category-all li input:checked\' );

    //Checks if cat is selected
    if( $checked.length <= 0 ) {
        alert( "Please Select atleast one category" );
        return false;
    } else { 
        return true;
    }
} );
如果未选择任何类别,上述代码将显示警报框。如果愿意,可以使用对话框。

SO网友:Mario Hendricks

这是我的解决方案。我包括这个。所有管理页面上都有js文件,但由于我的一些自定义帖子类型不包含类别,我通过在函数开头检查并返回true来处理这种情况。我不是JQuery方面的专家,所以我大部分都是用纯JavaScript编写的。请注意,它专门检查未发布的类别,以及所选类别的数量。

jQuery(document).ready(function ($) {
    // Check for exactly one category before publishing or updating
    $(\'#publish\').click(checkForCategory);
});

function checkForCategory()
{
    var categoryBlock = document.getElementById(\'categorychecklist\');
    if categoryBlock == null {
        return true;
    }
    var catList = categoryBlock.getElementsByClassName(\'selectit\');

    var error = false;
    var idx;
    var selectedCnt = 0;
    var uncategorized = false;

    // Iterate through all of the categories to count the checked ones
    for (idx = 0; idx < catList.length; idx++) {
        inputElements = catList[idx].getElementsByTagName(\'input\');
        if ((inputElements.length > 0) && (inputElements[0].checked)) {
            selectedCnt++;
            if (catList[idx].innerHTML.indexOf(\'Uncategorized\') > 0) {
                uncategorized = true;
            }
        }
    }

    if (uncategorized) {
        alert("You must unselect the Uncategorized category before publishing.");
        error = true;
    }
    else if (selectedCnt == 0) {
        alert("You must select a category before publishing.");
        error = true;
    }
    else if (selectedCnt > 1) {
        alert("You may only select one category when publishing.");
        error = true;
    }

    return !error;
}

结束

相关推荐

为什么‘Pre_Get_Posts’没有效果?

我第一次尝试使用pre\\u get\\u帖子,但没有成功。这是一段非常简单的代码,位于一个空主题的索引页上,纯粹是为了了解动作挂钩的窍门:function just_one( $query ) { $query->set( \'posts_per_page\', 1 ); } add_action( \'pre_get_posts\', \'just_one\' ); 从我读到的内容来看,我看不出这有什么错,但当我在下面运行时:echo get_q