diff --git a/display-featured-image-genesis.php b/display-featured-image-genesis.php index 3a5115b..b151c60 100644 --- a/display-featured-image-genesis.php +++ b/display-featured-image-genesis.php @@ -38,6 +38,7 @@ function display_featured_image_genesis_require() { 'class-displayfeaturedimagegenesis-common', 'class-displayfeaturedimagegenesis-description', 'class-displayfeaturedimagegenesis-output', + 'class-displayfeaturedimagegenesis-postmeta', 'class-displayfeaturedimagegenesis-rss', 'class-displayfeaturedimagegenesis-settings', 'class-displayfeaturedimagegenesis-taxonomies', @@ -56,6 +57,7 @@ $displayfeaturedimagegenesis_author = new Display_Featured_Image_Genesis_Au $displayfeaturedimagegenesis_common = new Display_Featured_Image_Genesis_Common(); $displayfeaturedimagegenesis_description = new Display_Featured_Image_Genesis_Description(); $displayfeaturedimagegenesis_output = new Display_Featured_Image_Genesis_Output(); +$displayfeaturedimagegenesis_postmeta = new Display_Featured_Image_Genesis_Post_Meta(); $displayfeaturedimagegenesis_rss = new Display_Featured_Image_Genesis_RSS(); $displayfeaturedimagegenesis_settings = new Display_Featured_Image_Genesis_Settings(); $displayfeaturedimagegenesis_taxonomies = new Display_Featured_Image_Genesis_Taxonomies(); @@ -66,6 +68,7 @@ $displayfeaturedimage = new Display_Featured_Image_Genesis( $displayfeaturedimagegenesis_common, $displayfeaturedimagegenesis_description, $displayfeaturedimagegenesis_output, + $displayfeaturedimagegenesis_postmeta, $displayfeaturedimagegenesis_rss, $displayfeaturedimagegenesis_settings, $displayfeaturedimagegenesis_taxonomies diff --git a/includes/class-displayfeaturedimagegenesis-output.php b/includes/class-displayfeaturedimagegenesis-output.php index ecc40a2..e400968 100644 --- a/includes/class-displayfeaturedimagegenesis-output.php +++ b/includes/class-displayfeaturedimagegenesis-output.php @@ -50,6 +50,11 @@ class Display_Featured_Image_Genesis_Output { return; } + // if the output is disabled for this specific post, quit + if ( is_singular() && get_post_meta( get_the_ID(), '_displayfeaturedimagegenesis_disable', true ) ) { + return; + } + $this->common = new Display_Featured_Image_Genesis_Common(); $this->item = Display_Featured_Image_Genesis_Common::get_image_variables(); add_filter( 'jetpack_photon_override_image_downsize', '__return_true' ); diff --git a/includes/class-displayfeaturedimagegenesis-postmeta.php b/includes/class-displayfeaturedimagegenesis-postmeta.php new file mode 100644 index 0000000..7e9ee5d --- /dev/null +++ b/includes/class-displayfeaturedimagegenesis-postmeta.php @@ -0,0 +1,92 @@ + + * @license GPL-2.0+ + * @link http://robincornett.com + * @copyright 2014-2016 Robin Cornett Creative, LLC + */ +class Display_Featured_Image_Genesis_Post_Meta { + + /** + * The plugin setting + * @var $setting + */ + protected $setting; + + /** + * Post meta key to disable buttons + * @var string + */ + protected $disable = '_displayfeaturedimagegenesis_disable'; + + /** + * Build the metabox with the checkbox setting. + */ + public function meta_box( $content ) { + + $check = get_post_meta( get_the_ID(), $this->disable, true ) ? 1 : ''; + + wp_nonce_field( 'displayfeaturedimagegenesis_post_save', 'displayfeaturedimagegenesis_post_nonce' ); + $output = '

'; + $output .= sprintf( '', $this->disable, checked( $check, 1, false ) ); + $output .= sprintf( '', $this->disable, __( 'Don\'t show the featured image on this post', 'display-featured-image-genesis' ) ); + $output .= '

'; + + return $output . $content; + } + + /** + * Update the post meta. + * @param $post_id + */ + public function save_meta( $post_id ) { + + // Bail if we're doing an auto save + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + + // if our nonce isn't there, or we can't verify it, bail + if ( ! $this->user_can_save( 'displayfeaturedimagegenesis_post_save', 'displayfeaturedimagegenesis_post_nonce' ) ) { + return; + } + + // if our current user can't edit this post, bail + if ( ! current_user_can( 'edit_posts' ) ) { + return; + } + + if ( isset( $_POST[ $this->disable ] ) ) { + update_post_meta( $post_id, $this->disable, 1 ); + } else { + delete_post_meta( $post_id, $this->disable ); + } + } + + /** + * Determines if the user has permission to save the information from the submenu + * page. + * + * @since 1.2.0 + * @access protected + * + * @param string $action The name of the action specified on the submenu page + * @param string $nonce The nonce specified on the submenu page + * + * @return bool True if the user has permission to save; false, otherwise. + * @author Tom McFarlin (https://tommcfarlin.com/save-wordpress-submenu-page-options/) + */ + protected function user_can_save( $action, $nonce ) { + $is_nonce_set = isset( $_POST[ $nonce ] ); + $is_valid_nonce = false; + + if ( $is_nonce_set ) { + $is_valid_nonce = wp_verify_nonce( $_POST[ $nonce ], $action ); + } + + return ( $is_nonce_set && $is_valid_nonce ); + } +} diff --git a/includes/class-displayfeaturedimagegenesis.php b/includes/class-displayfeaturedimagegenesis.php index c676981..a221189 100644 --- a/includes/class-displayfeaturedimagegenesis.php +++ b/includes/class-displayfeaturedimagegenesis.php @@ -46,6 +46,12 @@ class Display_Featured_Image_Genesis { */ protected $output; + /** + * Updates metabox on post edit page + * @var Display_Featured_Image_Genesis_Post_Meta $postmeta + */ + protected $postmeta; + /** * Handles RSS feed output * @var Display_Featured_Image_Genesis_RSS $rss @@ -76,12 +82,13 @@ class Display_Featured_Image_Genesis { * @param $settings * @param $taxonomies */ - function __construct( $admin, $author, $common, $description, $output, $rss, $settings, $taxonomies ) { + function __construct( $admin, $author, $common, $description, $output, $postmeta, $rss, $settings, $taxonomies ) { $this->admin = $admin; $this->author = $author; $this->common = $common; $this->description = $description; $this->output = $output; + $this->postmeta = $postmeta; $this->rss = $rss; $this->settings = $settings; $this->taxonomies = $taxonomies; @@ -112,6 +119,8 @@ class Display_Featured_Image_Genesis { add_filter( 'plugin_action_links_' . DISPLAYFEATUREDIMAGEGENESIS_BASENAME, array( $this, 'add_settings_link' ) ); add_filter( 'displayfeaturedimagegenesis_get_setting', array( $this->settings, 'get_display_setting' ) ); add_filter( 'genesis_get_image_default_args', array( $this->output, 'change_thumbnail_fallback' ) ); + add_filter( 'admin_post_thumbnail_html', array( $this->postmeta, 'meta_box' ) ); + add_action( 'save_post' , array( $this->postmeta, 'save_meta' ) ); }