Created
January 13, 2012 14:18
-
-
Save chrisguitarguy/1606434 to your computer and use it in GitHub Desktop.
For a wpse question: only allow password protected posts to be published.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: Passworded Posts Only (for wpse38806) | |
Author: Christopher Davis | |
Author URI: http://www.christopherguitar.net/ | |
License: GPL2 | |
*/ | |
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 | |
); | |
} | |
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'); | |
} | |
function wpse38806_post_submit_meta_box($post) { | |
global $action; | |
$post_type = $post->post_type; | |
$post_type_object = get_post_type_object($post_type); | |
$can_publish = current_user_can($post_type_object->cap->publish_posts); | |
?> | |
<div class="submitbox" id="submitpost"> | |
<div id="minor-publishing"> | |
<?php // Hidden submit button early on so that the browser chooses the right button when form is submitted with Return key ?> | |
<div style="display:none;"> | |
<?php submit_button( __( 'Save' ), 'button', 'save' ); ?> | |
</div> | |
<div id="minor-publishing-actions"> | |
<div id="save-action"> | |
<?php if ( 'publish' != $post->post_status && 'future' != $post->post_status && 'pending' != $post->post_status ) { ?> | |
<input <?php if ( 'private' == $post->post_status ) { ?>style="display:none"<?php } ?> type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save Draft'); ?>" tabindex="4" class="button button-highlighted" /> | |
<?php } elseif ( 'pending' == $post->post_status && $can_publish ) { ?> | |
<input type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save as Pending'); ?>" tabindex="4" class="button button-highlighted" /> | |
<?php } ?> | |
<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="draft-ajax-loading" alt="" /> | |
</div> | |
<div id="preview-action"> | |
<?php | |
if ( 'publish' == $post->post_status ) { | |
$preview_link = esc_url( get_permalink( $post->ID ) ); | |
$preview_button = __( 'Preview Changes' ); | |
} else { | |
$preview_link = get_permalink( $post->ID ); | |
if ( is_ssl() ) | |
$preview_link = str_replace( 'http://', 'https://', $preview_link ); | |
$preview_link = esc_url( apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ) ) ); | |
$preview_button = __( 'Preview' ); | |
} | |
?> | |
<a class="preview button" href="<?php echo $preview_link; ?>" target="wp-preview" id="post-preview" tabindex="4"><?php echo $preview_button; ?></a> | |
<input type="hidden" name="wp-preview" id="wp-preview" value="" /> | |
</div> | |
<div class="clear"></div> | |
</div><?php // /minor-publishing-actions ?> | |
<div id="misc-publishing-actions"> | |
<div class="misc-pub-section<?php if ( !$can_publish ) { echo ' misc-pub-section-last'; } ?>"><label for="post_status"><?php _e('Status:') ?></label> | |
<span id="post-status-display"> | |
<?php | |
switch ( $post->post_status ) { | |
case 'private': | |
_e('Privately Published'); | |
break; | |
case 'publish': | |
_e('Published'); | |
break; | |
case 'future': | |
_e('Scheduled'); | |
break; | |
case 'pending': | |
_e('Pending Review'); | |
break; | |
case 'draft': | |
case 'auto-draft': | |
_e('Draft'); | |
break; | |
} | |
?> | |
</span> | |
<?php if ( 'publish' == $post->post_status || 'private' == $post->post_status || $can_publish ) { ?> | |
<a href="#post_status" <?php if ( 'private' == $post->post_status ) { ?>style="display:none;" <?php } ?>class="edit-post-status hide-if-no-js" tabindex='4'><?php _e('Edit') ?></a> | |
<div id="post-status-select" class="hide-if-js"> | |
<input type="hidden" name="hidden_post_status" id="hidden_post_status" value="<?php echo esc_attr( ('auto-draft' == $post->post_status ) ? 'draft' : $post->post_status); ?>" /> | |
<select name='post_status' id='post_status' tabindex='4'> | |
<?php if ( 'publish' == $post->post_status ) : ?> | |
<option<?php selected( $post->post_status, 'publish' ); ?> value='publish'><?php _e('Published') ?></option> | |
<?php elseif ( 'private' == $post->post_status ) : ?> | |
<option<?php selected( $post->post_status, 'private' ); ?> value='publish'><?php _e('Privately Published') ?></option> | |
<?php elseif ( 'future' == $post->post_status ) : ?> | |
<option<?php selected( $post->post_status, 'future' ); ?> value='future'><?php _e('Scheduled') ?></option> | |
<?php endif; ?> | |
<option<?php selected( $post->post_status, 'pending' ); ?> value='pending'><?php _e('Pending Review') ?></option> | |
<?php if ( 'auto-draft' == $post->post_status ) : ?> | |
<option<?php selected( $post->post_status, 'auto-draft' ); ?> value='draft'><?php _e('Draft') ?></option> | |
<?php else : ?> | |
<option<?php selected( $post->post_status, 'draft' ); ?> value='draft'><?php _e('Draft') ?></option> | |
<?php endif; ?> | |
</select> | |
<a href="#post_status" class="save-post-status hide-if-no-js button"><?php _e('OK'); ?></a> | |
<a href="#post_status" class="cancel-post-status hide-if-no-js"><?php _e('Cancel'); ?></a> | |
</div> | |
<?php } ?> | |
</div><?php // /misc-pub-section ?> | |
<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 // /misc-pub-section ?> | |
<?php | |
// translators: Publish box date format, see http://php.net/date | |
$datef = __( 'M j, Y @ G:i' ); | |
if ( 0 != $post->ID ) { | |
if ( 'future' == $post->post_status ) { // scheduled for publishing at a future date | |
$stamp = __('Scheduled for: <b>%1$s</b>'); | |
} else if ( 'publish' == $post->post_status || 'private' == $post->post_status ) { // already published | |
$stamp = __('Published on: <b>%1$s</b>'); | |
} else if ( '0000-00-00 00:00:00' == $post->post_date_gmt ) { // draft, 1 or more saves, no date specified | |
$stamp = __('Publish <b>immediately</b>'); | |
} else if ( time() < strtotime( $post->post_date_gmt . ' +0000' ) ) { // draft, 1 or more saves, future date specified | |
$stamp = __('Schedule for: <b>%1$s</b>'); | |
} else { // draft, 1 or more saves, date specified | |
$stamp = __('Publish on: <b>%1$s</b>'); | |
} | |
$date = date_i18n( $datef, strtotime( $post->post_date ) ); | |
} else { // draft (no saves, and thus no date specified) | |
$stamp = __('Publish <b>immediately</b>'); | |
$date = date_i18n( $datef, strtotime( current_time('mysql') ) ); | |
} | |
if ( $can_publish ) : // Contributors don't get to choose the date of publish ?> | |
<div class="misc-pub-section curtime misc-pub-section-last"> | |
<span id="timestamp"> | |
<?php printf($stamp, $date); ?></span> | |
<a href="#edit_timestamp" class="edit-timestamp hide-if-no-js" tabindex='4'><?php _e('Edit') ?></a> | |
<div id="timestampdiv" class="hide-if-js"><?php touch_time(($action == 'edit'),1,4); ?></div> | |
</div><?php // /misc-pub-section ?> | |
<?php endif; ?> | |
<?php do_action('post_submitbox_misc_actions'); ?> | |
</div> | |
<div class="clear"></div> | |
</div> | |
<div id="major-publishing-actions"> | |
<?php do_action('post_submitbox_start'); ?> | |
<div id="delete-action"> | |
<?php | |
if ( current_user_can( "delete_post", $post->ID ) ) { | |
if ( !EMPTY_TRASH_DAYS ) | |
$delete_text = __('Delete Permanently'); | |
else | |
$delete_text = __('Move to Trash'); | |
?> | |
<a class="submitdelete deletion" href="<?php echo get_delete_post_link($post->ID); ?>"><?php echo $delete_text; ?></a><?php | |
} ?> | |
</div> | |
<div id="publishing-action"> | |
<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="ajax-loading" alt="" /> | |
<?php | |
if ( !in_array( $post->post_status, array('publish', 'future', 'private') ) || 0 == $post->ID ) { | |
if ( $can_publish ) : | |
if ( !empty($post->post_date_gmt) && time() < strtotime( $post->post_date_gmt . ' +0000' ) ) : ?> | |
<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Schedule') ?>" /> | |
<?php submit_button( __( 'Schedule' ), 'primary', 'publish', false, array( 'tabindex' => '5', 'accesskey' => 'p' ) ); ?> | |
<?php else : ?> | |
<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Publish') ?>" /> | |
<?php submit_button( __( 'Publish' ), 'primary', 'publish', false, array( 'tabindex' => '5', 'accesskey' => 'p' ) ); ?> | |
<?php endif; | |
else : ?> | |
<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Submit for Review') ?>" /> | |
<?php submit_button( __( 'Submit for Review' ), 'primary', 'publish', false, array( 'tabindex' => '5', 'accesskey' => 'p' ) ); ?> | |
<?php | |
endif; | |
} else { ?> | |
<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Update') ?>" /> | |
<input name="save" type="submit" class="button-primary" id="publish" tabindex="5" accesskey="p" value="<?php esc_attr_e('Update') ?>" /> | |
<?php | |
} ?> | |
</div> | |
<div class="clear"></div> | |
</div> | |
</div> | |
<?php | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment