需要设置发布密码才能发布

时间:2012-01-13 作者:Tom

我正在制作一个只有密码保护页面的网站。我想它,使密码框是默认情况下打开的,是一个必要的字段发布后。理想情况下,我也会删除“公共”和“私人”选项。

这可能吗?

3 个回复
SO网友:chrisguitarguy

您更适合允许成员在您的网站上注册,然后为每个用户授予阅读不同帖子的权限。像这样的插件Members 这可能有用。

但是,如果你真的想按你的要求去做,你就必须进行一些javascript黑客攻击,或者完全删除发布元框,然后推出你自己的。遗憾的是,那里没有太多的过滤器可供使用。

要使用JS方式,您需要将脚本排队。。。

<?php
add_action( \'admin_print_scripts-post.php\', \'wpse38806_enqueue_js\' );
add_action( \'admin_print_scripts-post-new.php\', \'wpse38806_enqueue_js\' );
function wpse38806_enqueue_js()
{
    if( \'post\' != get_post_type() ) return;

    wp_enqueue_script(
        \'wpse38806js\',
        plugin_dir_url( __FILE__ ) . \'private.js\',
        array( \'jquery\' ),
        NULL,
        true
    );
}
。。。可能是这样的:

jQuery(document).ready(function(){
    // hide the stuff you don\'t want
    jQuery(\'label[for=visibility-radio-public], label[for=visibility-radio-private]\').hide();
    jQuery(\'input#visibility-radio-public, input#visibility-radio-private\').hide();

    // trigger clicks to open the various things
    jQuery(\'a.edit-visibility\').trigger(\'click\');
    jQuery(\'input#visibility-radio-password\').trigger(\'click\');

    // stop form submission if there\'s no password, add an error message
    jQuery(\'form#post\').submit(function(){
        if( ! jQuery(\'input#post_password\').val() ){
            jQuery(\'img#ajax-loading\').hide();
            jQuery(\'input#publish\').removeClass(\'button-primary-disabled\');
            jQuery(\'div.wrap h2\').after(\'<div id="message" class="error"><p>Please enter a password!</p></div>\');
            return false;
        }
    });
});
要滚动您自己的提交元框,您可以将操作添加到add_meta_boxes_post 在挂钩函数中,删除当前提交框,然后添加您自己的提交框。

<?php
add_action(\'add_meta_boxes_post\', \'wpse38806_hijack_meta_boxes\' );
function wpse38806_hijack_meta_boxes( $post )
{
    remove_meta_box( \'submitdiv\', $post->post_type, \'side\' );
    add_meta_box(\'submitdiv-2\', __(\'Publish\'), \'wpse38806_post_submit_meta_box\', $post->post_type, \'side\', \'high\');
}
在您的wpse38806_post_submit_meta_box 回调时,应复制post_submit_meta_box, 找到intwp-admin/includes/meta-boxes.php, 并取出相关部分。这是一个很长的函数,所以我不会发布整个内容。我只是删除了一些我们不需要的内容,并添加了一些样式属性来强制显示内容。

function wpse38806_post_submit_meta_box($post) {
    // snip snip
    ?>

<div class="misc-pub-section " id="visibility">
<?php if ( $can_publish ) { ?>

<div id="post-visibility-select" class="hide-if-js" style="display:block">
<input type="hidden" name="hidden_post_password" id="hidden-post-password" value="<?php echo esc_attr($post->post_password); ?>" />
<?php if ($post_type == \'post\'): ?>
<input type="checkbox" style="display:none" name="hidden_post_sticky" id="hidden-post-sticky" value="sticky" <?php checked(is_sticky($post->ID)); ?> />
<?php endif; ?>
<input type="hidden" name="hidden_post_visibility" id="hidden-post-visibility" value="<?php echo esc_attr( $visibility ); ?>" />

<input type="radio" name="visibility" id="visibility-radio-password" value="password" <?php checked( $visibility, \'password\' ); ?> /> <label for="visibility-radio-password" class="selectit"><?php _e(\'Password protected\'); ?></label><br />
<span id="password-span" style="display:block"><label for="post_password"><?php _e(\'Password:\'); ?></label> <input type="text" name="post_password" id="post_password" value="<?php echo esc_attr($post->post_password); ?>" /><br /></span>
</div>
<?php } ?>

</div>
<?php
// snip snip
}
这些都是as a plugin.

SO网友:TheDeadMedic

您最好使用插件将博客设置为私有,而不是每个帖子,比如Private Only?

SO网友:Brian Fegter

可以使用Javascript执行此操作:

add_action(\'admin_head-post.php\', \'require_post_password\');
add_action(\'admin_head-post-new.php\', \'require_post_password\');

function require_post_password(){
    echo "
        <script type=\'text/javascript\'>
                jQuery(document).ready(function($) {
                    $(\'#publish\').bind(\'click\', function(){
                            if($(\'#post_password\').val() == \'\'){
                                    $(\'#ajax-loading\').hide();
                                    alert(\'Please enter a post password\');
                                    return false;
                            }
                    });
                    $(\'#visibility-radio-private, label[for=visibility-radio-private], #visibility-radio-public, label[for=visibility-radio-public]\').remove();
                    $(\'#hidden-post-visibility\').val(\'password\');
                    $(\'#post-visibility-display\').text(\'Password Protected\');
                });
        </script>
    ";
}

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点