From 13f35c3b9116409e8a0b39994139a4b1dc51bb12 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 14:03:21 -0500 Subject: [PATCH 01/20] Fix admin enqueue scripts --- includes/class-displayfeaturedimagegenesis.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis.php b/includes/class-displayfeaturedimagegenesis.php index 6044950..96521a0 100644 --- a/includes/class-displayfeaturedimagegenesis.php +++ b/includes/class-displayfeaturedimagegenesis.php @@ -170,9 +170,14 @@ class Display_Featured_Image_Genesis { wp_register_script( 'displayfeaturedimage-upload', plugins_url( '/includes/js/settings-upload.js', dirname( __FILE__ ) ), array( 'jquery', 'media-upload', 'thickbox' ), $version ); wp_register_script( 'widget_selector', plugins_url( '/includes/js/widget-selector.js', dirname( __FILE__ ) ), array( 'jquery' ), $version ); - $screen = get_current_screen(); + $screen = get_current_screen(); + $screen_ids = array( + 'appearance_page_displayfeaturedimagegenesis', + 'profile', + 'user-edit' + ); - if ( 'appearance_page_displayfeaturedimagegenesis' === $screen->id || ! empty( $screen->taxonomy ) || 'profile' === $screen->id ) { + if ( in_array( $screen->id, $screen_ids ) || ! empty( $screen->taxonomy ) ) { wp_enqueue_media(); wp_enqueue_script( 'displayfeaturedimage-upload' ); wp_localize_script( 'displayfeaturedimage-upload', 'objectL10n', array( From d8d43adaf11f85cd71e1fb53e18bdcab5f3ac668 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 14:03:41 -0500 Subject: [PATCH 02/20] Add helper class for settings pages --- display-featured-image-genesis.php | 2 + ...ass-displayfeaturedimagegenesis-author.php | 59 +++- ...ass-displayfeaturedimagegenesis-helper.php | 255 +++++++++++++++ ...s-displayfeaturedimagegenesis-settings.php | 292 +----------------- ...displayfeaturedimagegenesis-taxonomies.php | 68 +++- 5 files changed, 375 insertions(+), 301 deletions(-) create mode 100644 includes/class-displayfeaturedimagegenesis-helper.php diff --git a/display-featured-image-genesis.php b/display-featured-image-genesis.php index 8e4631f..9ab905e 100644 --- a/display-featured-image-genesis.php +++ b/display-featured-image-genesis.php @@ -31,6 +31,7 @@ if ( ! defined( 'DISPLAYFEATUREDIMAGEGENESIS_BASENAME' ) ) { function display_featured_image_genesis_require() { $files = array( 'class-displayfeaturedimagegenesis', + 'class-displayfeaturedimagegenesis-helper', 'class-displayfeaturedimagegenesis-admin', 'class-displayfeaturedimagegenesis-author', 'class-displayfeaturedimagegenesis-common', @@ -48,6 +49,7 @@ function display_featured_image_genesis_require() { display_featured_image_genesis_require(); // Instantiate dependent classes +$displayfeaturedimagegenesis_helper = new Display_Featured_Image_Genesis_Helper(); $displayfeaturedimagegenesis_admin = new Display_Featured_Image_Genesis_Admin(); $displayfeaturedimagegenesis_author = new Display_Featured_Image_Genesis_Author(); $displayfeaturedimagegenesis_common = new Display_Featured_Image_Genesis_Common(); diff --git a/includes/class-displayfeaturedimagegenesis-author.php b/includes/class-displayfeaturedimagegenesis-author.php index e2dcaae..679fcf2 100644 --- a/includes/class-displayfeaturedimagegenesis-author.php +++ b/includes/class-displayfeaturedimagegenesis-author.php @@ -1,6 +1,6 @@ name, $user->ID ); @@ -33,10 +33,10 @@ class Display_Featured_Image_Genesis_Author { echo ''; if ( $id ) { - echo wp_kses_post( $this->settings->render_image_preview( $id ) ); + echo wp_kses_post( $this->render_image_preview( $id ) ); } - $this->settings->render_buttons( $id, $this->name ); + $this->render_buttons( $id, $this->name ); echo '

Upload an image to use as your author page featured image.

'; echo ''; echo ''; @@ -44,7 +44,7 @@ class Display_Featured_Image_Genesis_Author { echo ''; } - function save_profile_fields( $user_id ) { + public function save_profile_fields( $user_id ) { if ( ! current_user_can( 'edit_user', $user_id ) ) { return false; @@ -57,10 +57,57 @@ class Display_Featured_Image_Genesis_Author { $new_value = $_POST[ $this->name ]; $old_value = get_the_author_meta( $this->name, $user_id ); if ( $old_value !== $new_value ) { - $new_value = $this->settings->validate_author_image( $new_value, $old_value ); + $new_value = $this->validate_author_image( $new_value, $old_value ); update_user_meta( $user_id, $this->name, $new_value ); } } + /** + * Returns old value for author image if not correct file type/size + * @param string $new_value New value + * @return string New value or old, depending on allowed image size. + * @since 2.3.0 + */ + public function validate_author_image( $new_value, $old_value ) { + + $medium = get_option( 'medium_size_w' ); + $source = wp_get_attachment_image_src( $new_value, 'full' ); + $valid = $this->is_valid_img_ext( $source[0] ); + $width = $source[1]; + + if ( ! $new_value || ( $new_value && $valid && $width > $medium ) ) { + return $new_value; + } + + add_filter( 'user_profile_update_errors', array( $this, 'user_profile_error_message' ), 10, 3 ); + + return $old_value; + + } + + /** + * User profile error message + * @param var $errors error message depending on what's wrong + * @param var $update whether or not to update + * @param var $user user being updated + * @return error message + * + * @since 2.3.0 + */ + public function user_profile_error_message( $errors, $update, $user ) { + $new_value = (int) $_POST['displayfeaturedimagegenesis']; + $medium = get_option( 'medium_size_w' ); + $source = wp_get_attachment_image_src( $new_value, 'full' ); + $valid = $this->is_valid_img_ext( $source[0] ); + $width = $source[1]; + $reset = sprintf( __( ' The %s Featured Image has been reset to the last valid setting.', 'display-featured-image-genesis' ), $user->display_name ); + + if ( ! $valid ) { + $error = __( 'Sorry, that is an invalid file type.', 'display-featured-image-genesis' ); + } elseif ( $width <= $medium ) { + $error = __( 'Sorry, your image is too small.', 'display-featured-image-genesis' ); + } + $errors->add( 'profile_error', $error . $reset ); + } } diff --git a/includes/class-displayfeaturedimagegenesis-helper.php b/includes/class-displayfeaturedimagegenesis-helper.php new file mode 100644 index 0000000..640e7f4 --- /dev/null +++ b/includes/class-displayfeaturedimagegenesis-helper.php @@ -0,0 +1,255 @@ + + * @license GPL-2.0+ + * @link http://robincornett.com + * @copyright 2014 Robin Cornett Creative, LLC + */ + +class Display_Featured_Image_Genesis_Helper { + + /** + * Generic function to add settings sections + * + * @since x.y.z + */ + protected function add_sections( $sections ) { + + foreach ( $sections as $section ) { + add_settings_section( + $section['id'], + $section['title'], + array( $this, $section['id'] . '_section_description' ), + $this->page + ); + } + } + + /** + * Generic function to add settings fields + * @param array $sections registered sections + * @return array all settings fields + * + * @since x.y.z + */ + protected function add_fields( $fields, $sections ) { + + foreach ( $fields as $field ) { + add_settings_field( + '[' . $field['id'] . ']', + sprintf( '', $field['id'], $field['title'] ), + array( $this, $field['callback'] ), + $this->page, + $sections[ $field['section'] ]['id'], + empty( $field['args'] ) ? array() : $field['args'] + ); + } + + } + + /** + * Echoes out the section description. + * @param string $description text string for description + * @return string as paragraph and escaped + * + * @since 2.3.0 + */ + protected function print_section_description( $description ) { + echo wp_kses_post( wpautop( $description ) ); + } + + /** + * Generic callback to create a number field setting. + * + * @since 2.3.0 + */ + public function do_number( $args ) { + + printf( '', esc_attr( $this->page ),esc_attr( $args['setting'] ), esc_attr( $args['label'] ) ); + printf( '', + (int) $args['min'], + (int) $args['max'], + esc_attr( $args['setting'] ), + esc_attr( $this->displaysetting[ $args['setting'] ] ), + esc_attr( $this->page ) + ); + $this->do_description( $args['setting'] ); + + } + + /** + * generic checkbox function (for all checkbox settings) + * @return 0 1 checkbox + * + * @since 2.3.0 + */ + public function do_checkbox( $args ) { + printf( '', esc_attr( $args['setting'] ) ); + printf( '', + esc_attr( $args['setting'] ), + checked( 1, esc_attr( $this->displaysetting[ $args['setting'] ] ), false ), + esc_attr( $args['label'] ) + ); + $this->do_description( $args['setting'] ); + } + + /** + * Generic callback to display a field description. + * @param string $args setting name used to identify description callback + * @return string Description to explain a field. + * + * @since 2.3.0 + */ + protected function do_description( $args ) { + $function = $args . '_description'; + if ( ! method_exists( $this, $function ) ) { + return; + } + $description = $this->$function(); + printf( '

%s

', wp_kses_post( $description ) ); + } + + /** + * display image preview + * @param variable $id featured image ID + * @return $image image preview + * + * @since 2.3.0 + */ + public function render_image_preview( $id ) { + if ( empty( $id ) ) { + return; + } + + $id = displayfeaturedimagegenesis_check_image_id( $id ); + $preview = wp_get_attachment_image_src( (int) $id, 'medium' ); + $image = sprintf( '
', $preview[0] ); + return $image; + } + + /** + * show image select/delete buttons + * @param variable $id image ID + * @param varable $name name for value/ID/class + * @return $buttons select/delete image buttons + * + * @since 2.3.0 + */ + public function render_buttons( $id, $name ) { + $id = displayfeaturedimagegenesis_check_image_id( $id ); + $id = $id ? (int) $id : ''; + printf( '', esc_attr( $name ), esc_attr( $id ) ); + printf( '', + esc_attr( $name ), + esc_attr__( 'Select Image', 'display-featured-image-genesis' ) + ); + if ( ! empty( $id ) ) { + printf( ' ', + esc_attr__( 'Delete Image', 'display-featured-image-genesis' ) + ); + } + } + + /** + * Determines if the user has permission to save the information from the submenu + * page. + * + * @since 2.3.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 ); + } + + /** + * Returns previous value for image if not correct file type/size + * @param string $new_value New value + * @return string New or previous value, depending on allowed image size. + * @since 1.2.2 + */ + protected function validate_image( $new_value, $old_value, $label, $size_to_check ) { + + $new_value = displayfeaturedimagegenesis_check_image_id( $new_value ); + $old_value = displayfeaturedimagegenesis_check_image_id( $old_value ); + $source = wp_get_attachment_image_src( $new_value, 'full' ); + $valid = $this->is_valid_img_ext( $source[0] ); + $width = $source[1]; + $reset = sprintf( __( ' The %s Featured Image has been reset to the last valid setting.', 'display-featured-image-genesis' ), $label ); + + // ok for field to be empty + if ( ! $new_value ) { + return ''; + } + + if ( $valid && $width > $size_to_check ) { + return (int) $new_value; + } + + $new_value = $old_value; + if ( ! $valid ) { + $message = __( 'Sorry, that is an invalid file type.', 'display-featured-image-genesis' ); + $class = 'invalid'; + } elseif ( $width <= $size_to_check ) { + $message = __( 'Sorry, your image is too small.', 'display-featured-image-genesis' ); + $class = 'weetiny'; + } + + add_settings_error( + $old_value, + esc_attr( $class ), + esc_attr( $message . $reset ), + 'error' + ); + + return (int) $new_value; + } + + /** + * returns file extension + * @since 1.2.2 + */ + protected function get_file_ext( $file ) { + $parsed = @parse_url( $file, PHP_URL_PATH ); + return $parsed ? strtolower( pathinfo( $parsed, PATHINFO_EXTENSION ) ) : false; + } + + /** + * check if file type is image + * @return file check file extension against list + * @since 1.2.2 + */ + protected function is_valid_img_ext( $file ) { + $file_ext = $this->get_file_ext( $file ); + + $is_valid_types = (array) apply_filters( 'displayfeaturedimage_valid_img_types', array( 'jpg', 'jpeg', 'png', 'gif' ) ); + + return ( $file_ext && in_array( $file_ext, $is_valid_types ) ); + } + + /** + * Returns a 1 or 0, for all truthy / falsy values. + * + * Uses double casting. First, we cast to bool, then to integer. + * + * @since 1.3.0 + * + * @param mixed $new_value Should ideally be a 1 or 0 integer passed in + * @return integer 1 or 0. + */ + protected function one_zero( $new_value ) { + return (int) (bool) $new_value; + } +} diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index ecd6e21..faf47cb 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -7,7 +7,7 @@ * @copyright 2014 Robin Cornett Creative, LLC */ -class Display_Featured_Image_Genesis_Settings { +class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Genesis_Helper { /** * variable set for featured image option @@ -31,7 +31,7 @@ class Display_Featured_Image_Genesis_Settings { add_theme_page( __( 'Display Featured Image for Genesis', 'display-featured-image-genesis' ), - __( 'Display Featured Image Settings', 'display-featured-image-genesis' ), + __( 'Display Featured Image for Genesis', 'display-featured-image-genesis' ), 'manage_options', $this->page, array( $this, 'do_settings_form' ) @@ -132,15 +132,7 @@ class Display_Featured_Image_Genesis_Settings { ); } - foreach ( $sections as $section ) { - add_settings_section( - $section['id'], - $section['title'], - array( $this, $section['id'] . '_section_description' ), - $this->page - ); - } - + $this->add_sections( $sections ); $this->register_fields( $sections ); } @@ -217,17 +209,7 @@ class Display_Featured_Image_Genesis_Settings { } } - foreach ( $this->fields as $field ) { - add_settings_field( - '[' . $field['id'] . ']', - sprintf( '', $field['id'], $field['title'] ), - array( $this, $field['callback'] ), - $this->page, - $sections[ $field['section'] ]['id'], - empty( $field['args'] ) ? array() : $field['args'] - ); - } - + $this->add_fields( $this->fields, $sections ); } /** @@ -252,36 +234,6 @@ class Display_Featured_Image_Genesis_Settings { $this->print_section_description( $description ); } - /** - * Echoes out the section description. - * @param string $description text string for description - * @return string as paragraph and escaped - * - * @since 2.3.0 - */ - protected function print_section_description( $description ) { - echo wp_kses_post( wpautop( $description ) ); - } - - /** - * Generic callback to create a number field setting. - * - * @since 2.3.0 - */ - public function do_number( $args ) { - - printf( '', esc_attr( $this->page ),esc_attr( $args['setting'] ), esc_attr( $args['label'] ) ); - printf( '', - (int) $args['min'], - (int) $args['max'], - esc_attr( $args['setting'] ), - esc_attr( $this->displaysetting[ $args['setting'] ] ), - esc_attr( $this->page ) - ); - $this->do_description( $args['setting'] ); - - } - /** * Description for less_header setting. * @return string description @@ -325,22 +277,6 @@ class Display_Featured_Image_Genesis_Settings { ); } - /** - * generic checkbox function (for all checkbox settings) - * @return 0 1 checkbox - * - * @since 2.3.0 - */ - public function do_checkbox( $args ) { - printf( '', esc_attr( $args['setting'] ) ); - printf( '', - esc_attr( $args['setting'] ), - checked( 1, esc_attr( $this->displaysetting[ $args['setting'] ] ), false ), - esc_attr( $args['label'] ) - ); - $this->do_description( $args['setting'] ); - } - /** * Custom Post Type image uploader * @@ -375,96 +311,6 @@ class Display_Featured_Image_Genesis_Settings { printf( '

%s

', wp_kses_post( $description ) ); } - /** - * display image preview - * @param variable $id featured image ID - * @return $image image preview - * - * @since 2.3.0 - */ - public function render_image_preview( $id ) { - if ( empty( $id ) ) { - return; - } - - $id = displayfeaturedimagegenesis_check_image_id( $id ); - $preview = wp_get_attachment_image_src( (int) $id, 'medium' ); - $image = sprintf( '
', $preview[0] ); - return $image; - } - - /** - * show image select/delete buttons - * @param variable $id image ID - * @param varable $name name for value/ID/class - * @return $buttons select/delete image buttons - * - * @since 2.3.0 - */ - public function render_buttons( $id, $name ) { - $id = displayfeaturedimagegenesis_check_image_id( $id ); - $id = $id ? (int) $id : ''; - printf( '', esc_attr( $name ), esc_attr( $id ) ); - printf( '', - esc_attr( $name ), - esc_attr__( 'Select Image', 'display-featured-image-genesis' ) - ); - if ( ! empty( $id ) ) { - printf( ' ', - esc_attr__( 'Delete Image', 'display-featured-image-genesis' ) - ); - } - } - - /** - * Save extra taxonomy fields callback function. - * @param term id $term_id the id of the term - * @return updated option updated option for term featured image - * - * @since 2.0.0 - */ - public function save_taxonomy_custom_meta( $term_id ) { - - if ( isset( $_POST['displayfeaturedimagegenesis'] ) ) { - $t_id = $term_id; - $displaysetting = get_option( "displayfeaturedimagegenesis_$t_id" ); - $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); - $is_updated = false; - foreach ( $cat_keys as $key ) { - if ( isset( $_POST['displayfeaturedimagegenesis'][ $key ] ) ) { - $displaysetting[ $key ] = $_POST['displayfeaturedimagegenesis'][ $key ]; - if ( $_POST['displayfeaturedimagegenesis']['term_image'] === $displaysetting[ $key ] ) { - $displaysetting[ $key ] = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis'][ $key ] ); - if ( false !== $displaysetting[ $key ] ) { - $is_updated = true; - } - } - } - } - // Save the option array. - if ( $is_updated ) { - update_option( "displayfeaturedimagegenesis_$t_id", $displaysetting ); - } - } - - } - - /** - * Generic callback to display a field description. - * @param string $args setting name used to identify description callback - * @return string Description to explain a field. - * - * @since 2.3.0 - */ - protected function do_description( $args ) { - $function = $args . '_description'; - if ( ! method_exists( $this, $function ) ) { - return; - } - $description = $this->$function(); - printf( '

%s

', wp_kses_post( $description ) ); - } - /** * validate all inputs * @param string $new_value various settings @@ -515,29 +361,6 @@ class Display_Featured_Image_Genesis_Settings { } - /** - * Determines if the user has permission to save the information from the submenu - * page. - * - * @since 2.3.0 - * @access private - * - * @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/) - */ - private 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 ); - } - /** * Returns previous value for image if not correct file type/size * @param string $new_value New value @@ -581,113 +404,6 @@ class Display_Featured_Image_Genesis_Settings { return (int) $new_value; } - /** - * Returns false value for image if not correct file type/size - * @param string $new_value New value - * @return string New value or false, depending on allowed image size. - * @since 2.0.0 - */ - protected function validate_taxonomy_image( $new_value ) { - - // if the image was selected using the old URL method - $new_value = displayfeaturedimagegenesis_check_image_id( $new_value ); - $medium = get_option( 'medium_size_w' ); - $source = wp_get_attachment_image_src( $new_value, 'full' ); - $valid = $this->is_valid_img_ext( $source[0] ); - $width = $source[1]; - - // ok for field to be empty - if ( $new_value && ( ! $valid || $width <= $medium ) ) { - $new_value = false; - } - - return $new_value; - } - - /** - * Returns old value for author image if not correct file type/size - * @param string $new_value New value - * @return string New value or old, depending on allowed image size. - * @since 2.3.0 - */ - public function validate_author_image( $new_value, $old_value ) { - - $medium = get_option( 'medium_size_w' ); - $source = wp_get_attachment_image_src( $new_value, 'full' ); - $valid = $this->is_valid_img_ext( $source[0] ); - $width = $source[1]; - - if ( ! $new_value || ( $new_value && $valid && $width > $medium ) ) { - return $new_value; - } - - add_filter( 'user_profile_update_errors', array( $this, 'user_profile_error_message' ), 10, 3 ); - - return $old_value; - - } - - /** - * User profile error message - * @param var $errors error message depending on what's wrong - * @param var $update whether or not to update - * @param var $user user being updated - * @return error message - * - * @since 2.3.0 - */ - public function user_profile_error_message( $errors, $update, $user ) { - $new_value = (int) $_POST['displayfeaturedimagegenesis']; - $medium = get_option( 'medium_size_w' ); - $source = wp_get_attachment_image_src( $new_value, 'full' ); - $valid = $this->is_valid_img_ext( $source[0] ); - $width = $source[1]; - $reset = sprintf( __( ' The %s Featured Image has been reset to the last valid setting.', 'display-featured-image-genesis' ), $user->display_name ); - - if ( ! $valid ) { - $error = __( 'Sorry, that is an invalid file type.', 'display-featured-image-genesis' ); - } elseif ( $width <= $medium ) { - $error = __( 'Sorry, your image is too small.', 'display-featured-image-genesis' ); - } - $errors->add( 'profile_error', $error . $reset ); - } - - /** - * returns file extension - * @since 1.2.2 - */ - protected function get_file_ext( $file ) { - $parsed = @parse_url( $file, PHP_URL_PATH ); - return $parsed ? strtolower( pathinfo( $parsed, PATHINFO_EXTENSION ) ) : false; - } - - /** - * check if file type is image - * @return file check file extension against list - * @since 1.2.2 - */ - protected function is_valid_img_ext( $file ) { - $file_ext = $this->get_file_ext( $file ); - - $is_valid_types = (array) apply_filters( 'displayfeaturedimage_valid_img_types', array( 'jpg', 'jpeg', 'png', 'gif' ) ); - - return ( $file_ext && in_array( $file_ext, $is_valid_types ) ); - } - - /** - * Returns a 1 or 0, for all truthy / falsy values. - * - * Uses double casting. First, we cast to bool, then to integer. - * - * @since 1.3.0 - * - * @param mixed $new_value Should ideally be a 1 or 0 integer passed in - * @return integer 1 or 0. - */ - protected function one_zero( $new_value ) { - return (int) (bool) $new_value; - } - /** * Help tab for media screen * @return help tab with verbose information for plugin diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 99bedbb..24b4666 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -7,7 +7,7 @@ * * @since 2.0.0 */ -class Display_Featured_Image_Genesis_Taxonomies { +class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_Genesis_Helper { protected $settings; @@ -17,8 +17,6 @@ class Display_Featured_Image_Genesis_Taxonomies { */ public function set_taxonomy_meta() { - $this->settings = new Display_Featured_Image_Genesis_Settings(); - $args = array( 'public' => true, ); @@ -27,8 +25,8 @@ class Display_Featured_Image_Genesis_Taxonomies { foreach ( $taxonomies as $taxonomy ) { add_action( "{$taxonomy}_add_form_fields", array( $this, 'add_taxonomy_meta_fields' ), 5, 2 ); add_action( "{$taxonomy}_edit_form_fields", array( $this, 'edit_taxonomy_meta_fields' ), 5, 2 ); - add_action( "edited_{$taxonomy}", array( $this->settings, 'save_taxonomy_custom_meta' ), 10, 2 ); - add_action( "create_{$taxonomy}", array( $this->settings, 'save_taxonomy_custom_meta' ), 10, 2 ); + add_action( "edited_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ), 10, 2 ); + add_action( "create_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ), 10, 2 ); add_action( 'load-edit-tags.php', array( $this, 'help' ) ); } @@ -75,9 +73,9 @@ class Display_Featured_Image_Genesis_Taxonomies { $id = $displaysetting['term_image']; $name = 'displayfeaturedimagegenesis[term_image]'; if ( ! empty( $id ) ) { - echo wp_kses_post( $this->settings->render_image_preview( $id ) ); + echo wp_kses_post( $this->render_image_preview( $id ) ); } - $this->settings->render_buttons( $id, $name ); + $this->render_buttons( $id, $name ); echo '

'; printf( esc_attr__( 'Set Featured Image for %1$s.', 'display-featured-image-genesis' ), @@ -88,6 +86,62 @@ class Display_Featured_Image_Genesis_Taxonomies { echo ''; } + /** + * Save extra taxonomy fields callback function. + * @param term id $term_id the id of the term + * @return updated option updated option for term featured image + * + * @since 2.0.0 + */ + public function save_taxonomy_custom_meta( $term_id ) { + + if ( ! isset( $_POST['displayfeaturedimagegenesis'] ) ) { + return; + } + $t_id = $term_id; + $displaysetting = get_option( "displayfeaturedimagegenesis_$t_id" ); + $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); + $is_updated = false; + foreach ( $cat_keys as $key ) { + if ( isset( $_POST['displayfeaturedimagegenesis'][ $key ] ) ) { + $displaysetting[ $key ] = $_POST['displayfeaturedimagegenesis'][ $key ]; + if ( $_POST['displayfeaturedimagegenesis']['term_image'] === $displaysetting[ $key ] ) { + $displaysetting[ $key ] = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis'][ $key ] ); + if ( false !== $displaysetting[ $key ] ) { + $is_updated = true; + } + } + } + } + // Save the option array. + if ( $is_updated ) { + update_option( "displayfeaturedimagegenesis_$t_id", $displaysetting ); + } + } + + /** + * Returns false value for image if not correct file type/size + * @param string $new_value New value + * @return string New value or false, depending on allowed image size. + * @since 2.0.0 + */ + protected function validate_taxonomy_image( $new_value ) { + + // if the image was selected using the old URL method + $new_value = displayfeaturedimagegenesis_check_image_id( $new_value ); + $medium = get_option( 'medium_size_w' ); + $source = wp_get_attachment_image_src( $new_value, 'full' ); + $valid = $this->is_valid_img_ext( $source[0] ); + $width = $source[1]; + + // ok for field to be empty + if ( $new_value && ( ! $valid || $width <= $medium ) ) { + $new_value = false; + } + + return $new_value; + } + /** * Help tab for media screen * @return help tab with verbose information for plugin From 2c7f0105d1e8d7ede05ce20a4cc79316ee5c4ac8 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 16:35:54 -0500 Subject: [PATCH 03/20] Update copyright --- includes/class-displayfeaturedimagegenesis-description.php | 2 +- includes/class-displayfeaturedimagegenesis-helper.php | 2 +- includes/class-displayfeaturedimagegenesis-output.php | 2 +- includes/class-displayfeaturedimagegenesis-rss.php | 2 +- includes/class-displayfeaturedimagegenesis-settings.php | 2 +- includes/class-displayfeaturedimagegenesis.php | 2 +- .../widgets/displayfeaturedimagegenesis-cpt-archive-widget.php | 2 +- .../widgets/displayfeaturedimagegenesis-taxonomy-widget.php | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-description.php b/includes/class-displayfeaturedimagegenesis-description.php index 5527b06..013a001 100644 --- a/includes/class-displayfeaturedimagegenesis-description.php +++ b/includes/class-displayfeaturedimagegenesis-description.php @@ -4,7 +4,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC */ class Display_Featured_Image_Genesis_Description { diff --git a/includes/class-displayfeaturedimagegenesis-helper.php b/includes/class-displayfeaturedimagegenesis-helper.php index 640e7f4..b4f9ecf 100644 --- a/includes/class-displayfeaturedimagegenesis-helper.php +++ b/includes/class-displayfeaturedimagegenesis-helper.php @@ -4,7 +4,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC */ class Display_Featured_Image_Genesis_Helper { diff --git a/includes/class-displayfeaturedimagegenesis-output.php b/includes/class-displayfeaturedimagegenesis-output.php index fb23b2e..0b1dd17 100644 --- a/includes/class-displayfeaturedimagegenesis-output.php +++ b/includes/class-displayfeaturedimagegenesis-output.php @@ -4,7 +4,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC */ class Display_Featured_Image_Genesis_Output { diff --git a/includes/class-displayfeaturedimagegenesis-rss.php b/includes/class-displayfeaturedimagegenesis-rss.php index 7f26272..bc9be2d 100644 --- a/includes/class-displayfeaturedimagegenesis-rss.php +++ b/includes/class-displayfeaturedimagegenesis-rss.php @@ -4,7 +4,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC */ class Display_Featured_Image_Genesis_RSS { diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index faf47cb..3758241 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -4,7 +4,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC */ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Genesis_Helper { diff --git a/includes/class-displayfeaturedimagegenesis.php b/includes/class-displayfeaturedimagegenesis.php index 96521a0..5cf4eb9 100644 --- a/includes/class-displayfeaturedimagegenesis.php +++ b/includes/class-displayfeaturedimagegenesis.php @@ -5,7 +5,7 @@ * @package DisplayFeaturedImageGenesis * @author Robin Cornett * @link https://github.com/robincornett/display-featured-image-genesis/ - * @copyright 2014 Robin Cornett + * @copyright 2014-2015 Robin Cornett * @license GPL-2.0+ */ diff --git a/includes/widgets/displayfeaturedimagegenesis-cpt-archive-widget.php b/includes/widgets/displayfeaturedimagegenesis-cpt-archive-widget.php index 554f251..23ed975 100644 --- a/includes/widgets/displayfeaturedimagegenesis-cpt-archive-widget.php +++ b/includes/widgets/displayfeaturedimagegenesis-cpt-archive-widget.php @@ -5,7 +5,7 @@ * @package DisplayFeaturedImageGenesis * @author Robin Cornett * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC * @license GPL-2.0+ * @since 2.0.0 */ diff --git a/includes/widgets/displayfeaturedimagegenesis-taxonomy-widget.php b/includes/widgets/displayfeaturedimagegenesis-taxonomy-widget.php index 9de5e4b..88771d4 100644 --- a/includes/widgets/displayfeaturedimagegenesis-taxonomy-widget.php +++ b/includes/widgets/displayfeaturedimagegenesis-taxonomy-widget.php @@ -6,7 +6,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014 Robin Cornett Creative, LLC + * @copyright 2014-2015 Robin Cornett Creative, LLC * @since 2.0.0 */ From 3a59ea0f0257028c4c3de5677ce4529e44815b3d Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 16:36:15 -0500 Subject: [PATCH 04/20] Fix $screen array --- includes/class-displayfeaturedimagegenesis.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis.php b/includes/class-displayfeaturedimagegenesis.php index 5cf4eb9..4153830 100644 --- a/includes/class-displayfeaturedimagegenesis.php +++ b/includes/class-displayfeaturedimagegenesis.php @@ -174,10 +174,10 @@ class Display_Featured_Image_Genesis { $screen_ids = array( 'appearance_page_displayfeaturedimagegenesis', 'profile', - 'user-edit' + 'user-edit', ); - if ( in_array( $screen->id, $screen_ids ) || ! empty( $screen->taxonomy ) ) { + if ( in_array( $screen->id, $screen_ids, true ) || ! empty( $screen->taxonomy ) ) { wp_enqueue_media(); wp_enqueue_script( 'displayfeaturedimage-upload' ); wp_localize_script( 'displayfeaturedimage-upload', 'objectL10n', array( @@ -189,7 +189,7 @@ class Display_Featured_Image_Genesis { return; } - if ( in_array( $screen->id, array( 'widgets', 'customize' ) ) ) { + if ( in_array( $screen->id, array( 'widgets', 'customize' ), true ) ) { wp_enqueue_script( 'widget_selector' ); wp_localize_script( 'widget_selector', 'displayfeaturedimagegenesis_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); } @@ -233,5 +233,4 @@ class Display_Featured_Image_Genesis { $links[] = sprintf( '%s', esc_url( admin_url( 'themes.php?page=displayfeaturedimagegenesis' ) ), esc_attr__( 'Settings', 'display-featured-image-genesis' ) ); return $links; } - } From 37422ecc0b1faf3326b098dbb89701b9bc30c2a1 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 16:37:22 -0500 Subject: [PATCH 05/20] Add term_meta support Includes new helper function to retrieve a term image_id --- display-featured-image-genesis.php | 2 +- ...lass-displayfeaturedimagegenesis-admin.php | 7 +- ...ass-displayfeaturedimagegenesis-common.php | 8 +-- ...displayfeaturedimagegenesis-taxonomies.php | 65 +++++++++++-------- includes/helper-functions.php | 16 +++-- 5 files changed, 56 insertions(+), 42 deletions(-) diff --git a/display-featured-image-genesis.php b/display-featured-image-genesis.php index 9ab905e..14716bf 100644 --- a/display-featured-image-genesis.php +++ b/display-featured-image-genesis.php @@ -6,7 +6,7 @@ * @author Robin Cornett * @license GPL-2.0+ * @link http://robincornett.com - * @copyright 2014-2015 Robin Cornett Creative, LLC + * @copyright 2014-2015-2015 Robin Cornett Creative, LLC * * @wordpress-plugin * Plugin Name: Display Featured Image for Genesis diff --git a/includes/class-displayfeaturedimagegenesis-admin.php b/includes/class-displayfeaturedimagegenesis-admin.php index 8926f3d..19e87ec 100644 --- a/includes/class-displayfeaturedimagegenesis-admin.php +++ b/includes/class-displayfeaturedimagegenesis-admin.php @@ -106,15 +106,14 @@ class Display_Featured_Image_Genesis_Admin { return; } - $term_meta = get_option( "displayfeaturedimagegenesis_$term_id" ); - - if ( empty( $term_meta['term_image'] ) ) { + $image_id = displayfeaturedimagegenesis_term_image( $term_id ); + if ( ! $image_id ) { return; } $taxonomy = filter_input( INPUT_POST, 'taxonomy', FILTER_SANITIZE_STRING ); $taxonomy = ! is_null( $taxonomy ) ? $taxonomy : get_current_screen()->taxonomy; - $image_id = displayfeaturedimagegenesis_check_image_id( $term_meta['term_image'] ); + $image_id = displayfeaturedimagegenesis_check_image_id( $image_id ); $args = array( 'image_id' => $image_id, diff --git a/includes/class-displayfeaturedimagegenesis-common.php b/includes/class-displayfeaturedimagegenesis-common.php index 47e027e..df27d94 100644 --- a/includes/class-displayfeaturedimagegenesis-common.php +++ b/includes/class-displayfeaturedimagegenesis-common.php @@ -156,12 +156,8 @@ class Display_Featured_Image_Genesis_Common { } // taxonomy if ( is_category() || is_tag() || is_tax() ) { - $t_id = $object->term_id; - $term_meta = get_option( "displayfeaturedimagegenesis_$t_id" ); - // if there is a term image - if ( ! empty( $term_meta['term_image'] ) ) { - $image_id = displayfeaturedimagegenesis_check_image_id( $term_meta['term_image'] ); - } + $term_id = $object->term_id; + $image_id = displayfeaturedimagegenesis_term_image( $term_id ); } // any singular post/page/CPT diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 24b4666..6cf3b9d 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -17,6 +17,8 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G */ public function set_taxonomy_meta() { + register_meta( 'term', 'displayfeaturedimagegenesis', array( $this, 'validate_taxonomy_image' ) ); + $args = array( 'public' => true, ); @@ -25,8 +27,9 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G foreach ( $taxonomies as $taxonomy ) { add_action( "{$taxonomy}_add_form_fields", array( $this, 'add_taxonomy_meta_fields' ), 5, 2 ); add_action( "{$taxonomy}_edit_form_fields", array( $this, 'edit_taxonomy_meta_fields' ), 5, 2 ); - add_action( "edited_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ), 10, 2 ); - add_action( "create_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ), 10, 2 ); + add_action( "edited_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ) ); + add_action( "create_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ) ); + add_action( 'edit_{$taxonomy}', array( $this, 'save_taxonomy_custom_meta' ) ); add_action( 'load-edit-tags.php', array( $this, 'help' ) ); } @@ -41,6 +44,7 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G ?>

+ @@ -61,21 +65,20 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G */ public function edit_taxonomy_meta_fields( $term ) { - $t_id = $term->term_id; - $displaysetting = get_option( "displayfeaturedimagegenesis_$t_id" ); - $id = ''; + $term_id = $term->term_id; + $image_id = displayfeaturedimagegenesis_term_image( $term_id ); echo ''; + wp_nonce_field( 'displayfeaturedimagegenesis', 'displayfeaturedimagegenesis' ); printf( '', esc_attr__( 'Featured Image', 'display-featured-image-genesis' ) ); echo ''; - $id = $displaysetting['term_image']; $name = 'displayfeaturedimagegenesis[term_image]'; - if ( ! empty( $id ) ) { - echo wp_kses_post( $this->render_image_preview( $id ) ); + if ( $image_id ) { + echo wp_kses_post( $this->render_image_preview( $image_id ) ); } - $this->render_buttons( $id, $name ); + $this->render_buttons( $image_id, $name ); echo '

'; printf( esc_attr__( 'Set Featured Image for %1$s.', 'display-featured-image-genesis' ), @@ -98,24 +101,33 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G if ( ! isset( $_POST['displayfeaturedimagegenesis'] ) ) { return; } - $t_id = $term_id; - $displaysetting = get_option( "displayfeaturedimagegenesis_$t_id" ); - $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); - $is_updated = false; - foreach ( $cat_keys as $key ) { - if ( isset( $_POST['displayfeaturedimagegenesis'][ $key ] ) ) { - $displaysetting[ $key ] = $_POST['displayfeaturedimagegenesis'][ $key ]; - if ( $_POST['displayfeaturedimagegenesis']['term_image'] === $displaysetting[ $key ] ) { - $displaysetting[ $key ] = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis'][ $key ] ); - if ( false !== $displaysetting[ $key ] ) { - $is_updated = true; + $displaysetting = displayfeaturedimagegenesis_term_image( $term_id ); + if ( $GLOBALS['wp_version'] >= '4.4' ) { + $new_image = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis']['term_image'] ); + + if ( $displaysetting && '' === $new_image ) { + delete_term_meta( $term_id, 'displayfeaturedimagegenesis' ); + } else if ( $displaysetting !== $new_image ) { + update_term_meta( $term_id, 'displayfeaturedimagegenesis', $new_image ); + } + } else { + $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); + $is_updated = false; + foreach ( $cat_keys as $key ) { + if ( isset( $_POST['displayfeaturedimagegenesis'][ $key ] ) ) { + $displaysetting[ $key ] = $_POST['displayfeaturedimagegenesis'][ $key ]; + if ( $_POST['displayfeaturedimagegenesis']['term_image'] === $displaysetting[ $key ] ) { + $displaysetting[ $key ] = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis'][ $key ] ); + if ( false !== $displaysetting[ $key ] ) { + $is_updated = true; + } } } } - } - // Save the option array. - if ( $is_updated ) { - update_option( "displayfeaturedimagegenesis_$t_id", $displaysetting ); + // Save the option array. + if ( $is_updated ) { + update_option( "displayfeaturedimagegenesis_$t_id", $displaysetting ); + } } } @@ -139,7 +151,7 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G $new_value = false; } - return $new_value; + return (int) $new_value; } /** @@ -173,7 +185,7 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G * @param integer @new_term_id The ID of the newly created term. * */ - function split_shared_term( $old_term_id, $new_term_id ) { + public function split_shared_term( $old_term_id, $new_term_id ) { $old_setting = get_option( "displayfeaturedimagegenesis_$old_term_id" ); $new_setting = get_option( "displayfeaturedimagegenesis_$new_term_id" ); @@ -187,5 +199,4 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G update_option( "displayfeaturedimagegenesis_$new_term_id", $new_setting ); } - } diff --git a/includes/helper-functions.php b/includes/helper-functions.php index 15a0d9c..8b0ade6 100644 --- a/includes/helper-functions.php +++ b/includes/helper-functions.php @@ -22,10 +22,9 @@ function display_featured_image_genesis_get_term_image_id( $image_id = '' ) { $terms = wp_get_object_terms( get_the_ID(), $taxonomies, $args ); foreach ( $terms as $term ) { - $t_id = $term->term_id; - $term_meta = get_option( "displayfeaturedimagegenesis_$t_id" ); - if ( ! empty( $term_meta['term_image'] ) ) { - $image_id = displayfeaturedimagegenesis_check_image_id( $term_meta['term_image'] ); + $term_id = $term->term_id; + $image_id = displayfeaturedimagegenesis_term_image( $term_id ); + if ( $image_id ) { break; } } @@ -34,6 +33,15 @@ function display_featured_image_genesis_get_term_image_id( $image_id = '' ) { } +function displayfeaturedimagegenesis_term_image( $term_id ) { + $image_id = get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); + if ( ! $image_id ) { + $term_meta = get_option( "displayfeaturedimagegenesis_$term_id" ); + $image_id = $term_meta['term_image']; + } + return $image_id; +} + /** * Helper function to get the term image URL. * @param string $size image size From 362a25a40d401e79d939eb5c2403facb8a7b3cb7 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 16:50:44 -0500 Subject: [PATCH 06/20] Fix term_meta 4.3 backwards compat things --- includes/class-displayfeaturedimagegenesis-common.php | 7 +++++-- includes/class-displayfeaturedimagegenesis-taxonomies.php | 2 +- includes/helper-functions.php | 6 ++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-common.php b/includes/class-displayfeaturedimagegenesis-common.php index df27d94..177b992 100644 --- a/includes/class-displayfeaturedimagegenesis-common.php +++ b/includes/class-displayfeaturedimagegenesis-common.php @@ -156,8 +156,11 @@ class Display_Featured_Image_Genesis_Common { } // taxonomy if ( is_category() || is_tag() || is_tax() ) { - $term_id = $object->term_id; - $image_id = displayfeaturedimagegenesis_term_image( $term_id ); + $term_id = $object->term_id; + $term_meta = displayfeaturedimagegenesis_term_image( $term_id ); + if ( $term_meta ) { + $image_id = $term_meta; + } } // any singular post/page/CPT diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 6cf3b9d..9e85145 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -126,7 +126,7 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G } // Save the option array. if ( $is_updated ) { - update_option( "displayfeaturedimagegenesis_$t_id", $displaysetting ); + update_option( "displayfeaturedimagegenesis_$term_id", $displaysetting ); } } } diff --git a/includes/helper-functions.php b/includes/helper-functions.php index 8b0ade6..0d25d31 100644 --- a/includes/helper-functions.php +++ b/includes/helper-functions.php @@ -33,8 +33,10 @@ function display_featured_image_genesis_get_term_image_id( $image_id = '' ) { } -function displayfeaturedimagegenesis_term_image( $term_id ) { - $image_id = get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); +function displayfeaturedimagegenesis_term_image( $term_id, $image_id = '' ) { + if ( function_exists( 'get_term_meta' ) ) { + $image_id = get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); + } if ( ! $image_id ) { $term_meta = get_option( "displayfeaturedimagegenesis_$term_id" ); $image_id = $term_meta['term_image']; From 8e51f05058ce4012e339526406a3405c906c5df2 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 17:22:52 -0500 Subject: [PATCH 07/20] Fix string/array for 4.3 meta --- .../class-displayfeaturedimagegenesis-taxonomies.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 9e85145..6846d97 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -101,18 +101,18 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G if ( ! isset( $_POST['displayfeaturedimagegenesis'] ) ) { return; } - $displaysetting = displayfeaturedimagegenesis_term_image( $term_id ); if ( $GLOBALS['wp_version'] >= '4.4' ) { - $new_image = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis']['term_image'] ); - + $new_image = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis']['term_image'] ); + $displaysetting = displayfeaturedimagegenesis_term_image( $term_id ); if ( $displaysetting && '' === $new_image ) { delete_term_meta( $term_id, 'displayfeaturedimagegenesis' ); } else if ( $displaysetting !== $new_image ) { update_term_meta( $term_id, 'displayfeaturedimagegenesis', $new_image ); } } else { - $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); - $is_updated = false; + $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id" ); + $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); + $is_updated = false; foreach ( $cat_keys as $key ) { if ( isset( $_POST['displayfeaturedimagegenesis'][ $key ] ) ) { $displaysetting[ $key ] = $_POST['displayfeaturedimagegenesis'][ $key ]; From 52f899430ff457a5ff37d33b89c7b8275e210f63 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 17 Nov 2015 17:46:38 -0500 Subject: [PATCH 08/20] correctly delete empty term_meta --- .../class-displayfeaturedimagegenesis-taxonomies.php | 9 +++++++-- includes/helper-functions.php | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 6846d97..6584fa5 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -104,10 +104,12 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G if ( $GLOBALS['wp_version'] >= '4.4' ) { $new_image = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis']['term_image'] ); $displaysetting = displayfeaturedimagegenesis_term_image( $term_id ); - if ( $displaysetting && '' === $new_image ) { + if ( false === $new_image ) { delete_term_meta( $term_id, 'displayfeaturedimagegenesis' ); + delete_option( "displayfeaturedimagegenesis_$term_id" ); } else if ( $displaysetting !== $new_image ) { - update_term_meta( $term_id, 'displayfeaturedimagegenesis', $new_image ); + update_term_meta( $term_id, 'displayfeaturedimagegenesis', (int) $new_image ); + delete_option( "displayfeaturedimagegenesis_$term_id" ); } } else { $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id" ); @@ -147,6 +149,9 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G $width = $source[1]; // ok for field to be empty + if ( ! $new_value ) { + return false; + } if ( $new_value && ( ! $valid || $width <= $medium ) ) { $new_value = false; } diff --git a/includes/helper-functions.php b/includes/helper-functions.php index 0d25d31..2a409cc 100644 --- a/includes/helper-functions.php +++ b/includes/helper-functions.php @@ -35,11 +35,11 @@ function display_featured_image_genesis_get_term_image_id( $image_id = '' ) { function displayfeaturedimagegenesis_term_image( $term_id, $image_id = '' ) { if ( function_exists( 'get_term_meta' ) ) { - $image_id = get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); + $image_id = (int) get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); } if ( ! $image_id ) { $term_meta = get_option( "displayfeaturedimagegenesis_$term_id" ); - $image_id = $term_meta['term_image']; + $image_id = (int) $term_meta['term_image']; } return $image_id; } From b7439b2ed02d48869c882ceba71c4e747a6423e0 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Thu, 19 Nov 2015 09:56:27 -0500 Subject: [PATCH 09/20] Return null to delete option/meta --- includes/class-displayfeaturedimagegenesis-taxonomies.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 6584fa5..2b76afd 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -150,13 +150,13 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G // ok for field to be empty if ( ! $new_value ) { - return false; + return null; } - if ( $new_value && ( ! $valid || $width <= $medium ) ) { - $new_value = false; + if ( $new_value && $valid && $width > $medium ) { + return (int) $new_value; } - return (int) $new_value; + return (int) $old_value; } /** From 3b6062c87e0985bc17838bacb415f5bc7002232e Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Thu, 19 Nov 2015 09:58:16 -0500 Subject: [PATCH 10/20] Update term_meta/options functions Deletes meta/option if empty, silently fails for invalid images. Need to think/verify checks for existing setting so we don't update the DB if we don't have to. --- ...displayfeaturedimagegenesis-taxonomies.php | 73 ++++++++++++------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 2b76afd..42e2299 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -98,38 +98,58 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G */ public function save_taxonomy_custom_meta( $term_id ) { - if ( ! isset( $_POST['displayfeaturedimagegenesis'] ) ) { + $nonce = $_POST['displayfeaturedimagegenesis']; + + if ( ! isset( $nonce ) ) { return; } - if ( $GLOBALS['wp_version'] >= '4.4' ) { - $new_image = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis']['term_image'] ); - $displaysetting = displayfeaturedimagegenesis_term_image( $term_id ); - if ( false === $new_image ) { - delete_term_meta( $term_id, 'displayfeaturedimagegenesis' ); - delete_option( "displayfeaturedimagegenesis_$term_id" ); - } else if ( $displaysetting !== $new_image ) { + $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id" ); + $action = $GLOBALS['wp_version'] >= '4.4' ? 'do_term_meta' : 'do_options_meta'; + $this->$action( $term_id, $nonce, $displaysetting ); + } + + protected function do_term_meta( $term_id, $nonce, $displaysetting ) { + $new_image = $this->validate_taxonomy_image( $nonce['term_image'], $term_id ); + if ( null === $new_image ) { + // if the new image is empty, delete term_meta and old option + delete_term_meta( $term_id, 'displayfeaturedimagegenesis' ); + delete_option( "displayfeaturedimagegenesis_$term_id" ); + } elseif ( false === $new_image ) { + // do nothing if the new image doesn't meet requirements + return; + } elseif ( $new_image ) { + // if the new image is different from the term meta + $current_setting = get_term_meta( $term_id, 'displayfeaturedimagegenesis' ); + if ( $current_setting !== $new_image ) { update_term_meta( $term_id, 'displayfeaturedimagegenesis', (int) $new_image ); + } + // if there is a valid image, and the old setting exists + if ( $displaysetting ) { delete_option( "displayfeaturedimagegenesis_$term_id" ); } - } else { - $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id" ); - $cat_keys = array_keys( $_POST['displayfeaturedimagegenesis'] ); - $is_updated = false; - foreach ( $cat_keys as $key ) { - if ( isset( $_POST['displayfeaturedimagegenesis'][ $key ] ) ) { - $displaysetting[ $key ] = $_POST['displayfeaturedimagegenesis'][ $key ]; - if ( $_POST['displayfeaturedimagegenesis']['term_image'] === $displaysetting[ $key ] ) { - $displaysetting[ $key ] = $this->validate_taxonomy_image( $_POST['displayfeaturedimagegenesis'][ $key ] ); - if ( false !== $displaysetting[ $key ] ) { - $is_updated = true; - } - } + } + } + + protected function do_options_meta( $term_id, $nonce, $displaysetting ) { + $cat_keys = array_keys( $nonce ); + $is_updated = false; + foreach ( $cat_keys as $key ) { + if ( isset( $nonce[ $key ] ) ) { + $displaysetting[ $key ] = $nonce[ $key ]; + if ( $nonce['term_image'] !== $displaysetting[ $key ] ) { + break; + } + $displaysetting[ $key ] = $this->validate_taxonomy_image( $nonce[ $key ], $term_id ); + if ( null === $displaysetting[ $key ] ) { + delete_option( "displayfeaturedimagegenesis_$term_id" ); + } else { + $is_updated = true; } } - // Save the option array. - if ( $is_updated ) { - update_option( "displayfeaturedimagegenesis_$term_id", $displaysetting ); - } + } + // Save the option array. + if ( $is_updated ) { + update_option( "displayfeaturedimagegenesis_$term_id", $displaysetting ); } } @@ -139,10 +159,11 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G * @return string New value or false, depending on allowed image size. * @since 2.0.0 */ - protected function validate_taxonomy_image( $new_value ) { + protected function validate_taxonomy_image( $new_value, $term_id ) { // if the image was selected using the old URL method $new_value = displayfeaturedimagegenesis_check_image_id( $new_value ); + $old_value = displayfeaturedimagegenesis_term_image( $term_id ); $medium = get_option( 'medium_size_w' ); $source = wp_get_attachment_image_src( $new_value, 'full' ); $valid = $this->is_valid_img_ext( $source[0] ); From a6e3bf9a1ad42ef3ffb40b54a1c0b6e61de9dc16 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Thu, 19 Nov 2015 14:34:52 -0500 Subject: [PATCH 11/20] Fix term image function in case term images are URLs, not ID --- includes/helper-functions.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/includes/helper-functions.php b/includes/helper-functions.php index 2a409cc..a44862f 100644 --- a/includes/helper-functions.php +++ b/includes/helper-functions.php @@ -33,13 +33,22 @@ function display_featured_image_genesis_get_term_image_id( $image_id = '' ) { } +/** + * Helper function to retrieve the term image ID, whether as term_meta or wp_options + * @param int $term_id term ID + * @param string $image_id image ID + * @return int image ID + * @since 2.4.0 + */ function displayfeaturedimagegenesis_term_image( $term_id, $image_id = '' ) { if ( function_exists( 'get_term_meta' ) ) { - $image_id = (int) get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); + $image_id = get_term_meta( $term_id, 'displayfeaturedimagegenesis', true ); } if ( ! $image_id ) { $term_meta = get_option( "displayfeaturedimagegenesis_$term_id" ); - $image_id = (int) $term_meta['term_image']; + if ( $term_meta ) { + $image_id = displayfeaturedimagegenesis_check_image_id( $term_meta['term_image'] ); + } } return $image_id; } From aef42e913907029c90d691bf07006b98ed3e18f9 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Thu, 19 Nov 2015 14:36:22 -0500 Subject: [PATCH 12/20] Fix term meta validation Make behavior consistent in 4.4 and earlier. --- ...displayfeaturedimagegenesis-taxonomies.php | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 42e2299..83327de 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -98,27 +98,31 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G */ public function save_taxonomy_custom_meta( $term_id ) { - $nonce = $_POST['displayfeaturedimagegenesis']; - - if ( ! isset( $nonce ) ) { + $input = $_POST['displayfeaturedimagegenesis']; + if ( ! isset( $input ) ) { return; } $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id" ); - $action = $GLOBALS['wp_version'] >= '4.4' ? 'do_term_meta' : 'do_options_meta'; - $this->$action( $term_id, $nonce, $displaysetting ); + $action = function_exists( 'get_term_meta' ) ? 'update_term_meta' : 'update_options_meta'; + $this->$action( $term_id, $input, $displaysetting ); } - protected function do_term_meta( $term_id, $nonce, $displaysetting ) { - $new_image = $this->validate_taxonomy_image( $nonce['term_image'], $term_id ); + /** + * update/delete term meta + * @param int $term_id term id + * @param array $displaysetting old option, if it exists + * @return term_meta + * + * @since 2.4.0 + */ + protected function update_term_meta( $term_id, $input, $displaysetting ) { + $new_image = $this->validate_taxonomy_image( $input['term_image'] ); if ( null === $new_image ) { // if the new image is empty, delete term_meta and old option delete_term_meta( $term_id, 'displayfeaturedimagegenesis' ); delete_option( "displayfeaturedimagegenesis_$term_id" ); - } elseif ( false === $new_image ) { - // do nothing if the new image doesn't meet requirements - return; - } elseif ( $new_image ) { - // if the new image is different from the term meta + } elseif ( false !== $new_image ) { + // if the new image is different from the existing term meta $current_setting = get_term_meta( $term_id, 'displayfeaturedimagegenesis' ); if ( $current_setting !== $new_image ) { update_term_meta( $term_id, 'displayfeaturedimagegenesis', (int) $new_image ); @@ -130,19 +134,27 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G } } - protected function do_options_meta( $term_id, $nonce, $displaysetting ) { - $cat_keys = array_keys( $nonce ); + /** + * update term option (for sites running WP below 4.4) + * @param int $term_id term id + * @param array $displaysetting previous option, if it exists + * @return array updated option + * + * @since 2.4.0 + */ + protected function update_options_meta( $term_id, $input, $displaysetting ) { + $cat_keys = array_keys( $input ); $is_updated = false; foreach ( $cat_keys as $key ) { - if ( isset( $nonce[ $key ] ) ) { - $displaysetting[ $key ] = $nonce[ $key ]; - if ( $nonce['term_image'] !== $displaysetting[ $key ] ) { + if ( isset( $input[ $key ] ) ) { + $displaysetting[ $key ] = $input[ $key ]; + if ( $input['term_image'] !== $displaysetting[ $key ] ) { break; } - $displaysetting[ $key ] = $this->validate_taxonomy_image( $nonce[ $key ], $term_id ); + $displaysetting[ $key ] = $this->validate_taxonomy_image( $input[ $key ] ); if ( null === $displaysetting[ $key ] ) { delete_option( "displayfeaturedimagegenesis_$term_id" ); - } else { + } elseif ( false !== $displaysetting[ $key ] ) { $is_updated = true; } } @@ -159,25 +171,20 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G * @return string New value or false, depending on allowed image size. * @since 2.0.0 */ - protected function validate_taxonomy_image( $new_value, $term_id ) { + protected function validate_taxonomy_image( $new_value ) { - // if the image was selected using the old URL method - $new_value = displayfeaturedimagegenesis_check_image_id( $new_value ); - $old_value = displayfeaturedimagegenesis_term_image( $term_id ); - $medium = get_option( 'medium_size_w' ); - $source = wp_get_attachment_image_src( $new_value, 'full' ); - $valid = $this->is_valid_img_ext( $source[0] ); - $width = $source[1]; + $medium = get_option( 'medium_size_w' ); + $source = wp_get_attachment_image_src( $new_value, 'full' ); + $valid = $this->is_valid_img_ext( $source[0] ); + $width = $source[1]; - // ok for field to be empty if ( ! $new_value ) { return null; - } - if ( $new_value && $valid && $width > $medium ) { + } elseif ( $new_value && $valid && $width > $medium ) { return (int) $new_value; } - return (int) $old_value; + return false; } /** From 1389035cdba01c7234eda94c4dae999ce998cb9a Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Fri, 20 Nov 2015 18:18:36 -0500 Subject: [PATCH 13/20] Move empty value to return early --- .../class-displayfeaturedimagegenesis-taxonomies.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 83327de..7008587 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -69,7 +69,6 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G $image_id = displayfeaturedimagegenesis_term_image( $term_id ); echo ''; - wp_nonce_field( 'displayfeaturedimagegenesis', 'displayfeaturedimagegenesis' ); printf( '', esc_attr__( 'Featured Image', 'display-featured-image-genesis' ) ); @@ -173,14 +172,16 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G */ protected function validate_taxonomy_image( $new_value ) { + if ( ! $new_value ) { + return null; + } + $medium = get_option( 'medium_size_w' ); $source = wp_get_attachment_image_src( $new_value, 'full' ); $valid = $this->is_valid_img_ext( $source[0] ); $width = $source[1]; - if ( ! $new_value ) { - return null; - } elseif ( $new_value && $valid && $width > $medium ) { + if ( $valid && $width > $medium ) { return (int) $new_value; } From b1e109983446b79382eebde457191f6b25b19829 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Sat, 21 Nov 2015 18:00:39 -0500 Subject: [PATCH 14/20] Add buttons to update all term meta at one time --- ...s-displayfeaturedimagegenesis-settings.php | 98 ++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index 3758241..a9a6eb0 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -41,7 +41,11 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen add_action( 'load-appearance_page_displayfeaturedimagegenesis', array( $this, 'help' ) ); $this->displaysetting = $this->get_display_setting(); - + $updated = get_option( 'displayfeaturedimagegenesis_updatedtermmeta', false ); + if ( $updated ) { + return; + } + $this->update_delete_term_meta(); } /** @@ -56,6 +60,10 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen echo '

'; printf( '<%1$s>%2$s', esc_attr( $heading ), esc_attr( $page_title ) ); + $updated = get_option( 'displayfeaturedimagegenesis_updatedtermmeta', false ); + if ( ! $updated ) { + $this->term_meta_notice(); + } echo '
'; settings_fields( 'displayfeaturedimagegenesis' ); do_settings_sections( 'displayfeaturedimagegenesis' ); @@ -500,4 +508,92 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen } } + public function term_meta_notice() { + $screen = get_current_screen(); + if ( 'appearance_page_displayfeaturedimagegenesis' !== $screen->id ) { + return; + } + $term_ids = $this->get_term_ids(); + if ( empty( $term_ids ) ) { + return; + } + $message = sprintf( '

%s

', __( 'WordPress 4.4 introduced term metadata for categories, tags, and other taxonomies. We\'d like to convert your existing term images to use this new awesomeness.', 'display-featured-image-genesis' ) ); + $message .= sprintf( '

%s

', __( 'This will modify your database, so if you\'d rather do it yourself, you can. Just click the Dismiss button and I won\'t bother you again. If you let us do it, please double check your terms afterwards.', 'display-featured-image-genesis' ) ); + echo '
' . wp_kses_post( $message ); + echo ''; + wp_nonce_field( 'displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce', false ); + $buttons = array( + array( + 'value' => __( 'Update My Terms', 'display-featured-image-genesis' ), + 'name' => 'displayfeaturedimagegenesis_termmeta', + 'class' => 'button-primary', + ), + array( + 'value' => __( 'Dismiss (I\'ve got this!)', 'display-featured-image-genesis' ), + 'name' => 'displayfeaturedimagegenesis_termmetadismiss', + 'class' => 'button-secondary', + ), + ); + echo '

'; + foreach ( $buttons as $button ) { + printf( '', + esc_attr( $button['class'] ), + esc_attr( $button['name'] ), + esc_attr( $button['value'] ) + ); + } + echo '

'; + echo ''; + echo '
'; + } + + protected function update_delete_term_meta() { + + if ( isset( $_POST['displayfeaturedimagegenesis_termmeta'] ) ) { + if ( ! check_admin_referer( 'displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce' ) ) { + return; + } + $term_ids = $this->get_term_ids(); + foreach ( $term_ids as $term_id ) { + $option = get_option( "displayfeaturedimagegenesis_{$term_id}" ); + if ( false !== $option ) { + $image_id = (int) displayfeaturedimagegenesis_check_image_id( $option['term_image'] ); + update_term_meta( $term_id, 'displayfeaturedimagegenesis', $image_id ); + delete_option( "displayfeaturedimagegenesis_{$term_id}" ); + } + } + } + + if ( isset( $_POST['displayfeaturedimagegenesis_termmeta'] ) || isset( $_POST['displayfeaturedimagegenesis_termmetadismiss'] ) ) { + if ( ! check_admin_referer( 'displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce' ) ) { + return; + } + update_option( 'displayfeaturedimagegenesis_updatedtermmeta', true ); + } + } + + protected function get_term_ids( $term_ids = array() ) { + $args = array( + 'public' => true, + 'show_ui' => true, + ); + $taxonomies = get_taxonomies( $args, 'objects' ); + + foreach ( $taxonomies as $tax ) { + $args = array( + 'orderby' => 'name', + 'order' => 'ASC', + 'hide_empty' => false, + ); + $terms = get_terms( $tax->name, $args ); + foreach ( $terms as $term ) { + $term_id = $term->term_id; + $option = get_option( "displayfeaturedimagegenesis_{$term_id}" ); + if ( false !== $option ) { + $term_ids[] = $term_id; + } + } + } + return $term_ids; + } } From d4bc5e285d07620a1cf7d989959464ac2de2eb06 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Sat, 21 Nov 2015 18:14:57 -0500 Subject: [PATCH 15/20] Document functions, update option name --- ...s-displayfeaturedimagegenesis-settings.php | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index a9a6eb0..6960630 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -41,7 +41,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen add_action( 'load-appearance_page_displayfeaturedimagegenesis', array( $this, 'help' ) ); $this->displaysetting = $this->get_display_setting(); - $updated = get_option( 'displayfeaturedimagegenesis_updatedtermmeta', false ); + $updated = get_option( 'displayfeaturedimagegenesis_updatedterms', false ); if ( $updated ) { return; } @@ -60,7 +60,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen echo '
'; printf( '<%1$s>%2$s', esc_attr( $heading ), esc_attr( $page_title ) ); - $updated = get_option( 'displayfeaturedimagegenesis_updatedtermmeta', false ); + $updated = get_option( 'displayfeaturedimagegenesis_updatedterms', false ); if ( ! $updated ) { $this->term_meta_notice(); } @@ -508,7 +508,12 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen } } - public function term_meta_notice() { + /** + * For 4.4, output a notice explaining that old term options can be updated to term_meta. + * Options are to update all terms or to ignore, and do by hand. + * @since x.y.z + */ + protected function term_meta_notice() { $screen = get_current_screen(); if ( 'appearance_page_displayfeaturedimagegenesis' !== $screen->id ) { return; @@ -547,6 +552,10 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen echo '
'; } + /** + * Update and/or delete term_meta and wp_options + * @since x.y.z + */ protected function update_delete_term_meta() { if ( isset( $_POST['displayfeaturedimagegenesis_termmeta'] ) ) { @@ -568,10 +577,16 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen if ( ! check_admin_referer( 'displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce' ) ) { return; } - update_option( 'displayfeaturedimagegenesis_updatedtermmeta', true ); + update_option( 'displayfeaturedimagegenesis_updatedterms', true ); } } + /** + * Get IDs of terms with featured images + * @param array $term_ids empty array + * @return array all terms with featured images + * @since x.y.z + */ protected function get_term_ids( $term_ids = array() ) { $args = array( 'public' => true, From 2a84c8e7e196b251b251f4993811733a7109cd4e Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Mon, 23 Nov 2015 11:39:17 -0500 Subject: [PATCH 16/20] Only check update if term_meta is supported --- includes/class-displayfeaturedimagegenesis-settings.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index 6960630..0cec618 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -41,6 +41,9 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen add_action( 'load-appearance_page_displayfeaturedimagegenesis', array( $this, 'help' ) ); $this->displaysetting = $this->get_display_setting(); + if ( ! function_exists( 'get_term_meta' ) ) { + return; + } $updated = get_option( 'displayfeaturedimagegenesis_updatedterms', false ); if ( $updated ) { return; From 4f6334b1aa10cdd32c7c7fbae10442ed88846a40 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Mon, 23 Nov 2015 11:47:22 -0500 Subject: [PATCH 17/20] Change term_meta message to include affected terms Also needed to change function to get the terms, to return objects, not just IDs. --- ...s-displayfeaturedimagegenesis-settings.php | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index 0cec618..2cd5e46 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -514,19 +514,25 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen /** * For 4.4, output a notice explaining that old term options can be updated to term_meta. * Options are to update all terms or to ignore, and do by hand. - * @since x.y.z + * @since 2.4.0 */ protected function term_meta_notice() { $screen = get_current_screen(); if ( 'appearance_page_displayfeaturedimagegenesis' !== $screen->id ) { return; } - $term_ids = $this->get_term_ids(); - if ( empty( $term_ids ) ) { + $terms = $this->get_affected_terms(); + if ( empty( $terms ) ) { return; } - $message = sprintf( '

%s

', __( 'WordPress 4.4 introduced term metadata for categories, tags, and other taxonomies. We\'d like to convert your existing term images to use this new awesomeness.', 'display-featured-image-genesis' ) ); - $message .= sprintf( '

%s

', __( 'This will modify your database, so if you\'d rather do it yourself, you can. Just click the Dismiss button and I won\'t bother you again. If you let us do it, please double check your terms afterwards.', 'display-featured-image-genesis' ) ); + $message = sprintf( '

%s

', __( 'WordPress 4.4 introduced term metadata for categories, tags, and other taxonomies. I\'d like to automatically convert your existing term images to use this new awesomeness.', 'display-featured-image-genesis' ) ); + $message .= sprintf( '

%s

', __( 'This will modify your database, so if you\'d rather do it yourself, you can. Here\'s a list of the affected terms:', 'display-featured-image-genesis' ) ); + $message .= '
    '; + foreach ( $terms as $term ) { + $message .= edit_term_link( $term->name, '
  • ', '
  • ', $term, false ); + } + $message .= '
'; + $message .= sprintf( '

%s

', __( 'If you update the terms by hand, this notice will disappear, or you can dismiss the notice. Or, you know, click the Update button to do it all at once. Just please double check your terms after the update process.', 'display-featured-image-genesis' ) ); echo '
' . wp_kses_post( $message ); echo '
'; wp_nonce_field( 'displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce', false ); @@ -557,7 +563,7 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen /** * Update and/or delete term_meta and wp_options - * @since x.y.z + * @since 2.4.0 */ protected function update_delete_term_meta() { @@ -565,9 +571,10 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen if ( ! check_admin_referer( 'displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce' ) ) { return; } - $term_ids = $this->get_term_ids(); - foreach ( $term_ids as $term_id ) { - $option = get_option( "displayfeaturedimagegenesis_{$term_id}" ); + $terms = $this->get_affected_terms(); + foreach ( $terms as $term ) { + $term_id = $term->term_id; + $option = get_option( "displayfeaturedimagegenesis_{$term_id}" ); if ( false !== $option ) { $image_id = (int) displayfeaturedimagegenesis_check_image_id( $option['term_image'] ); update_term_meta( $term_id, 'displayfeaturedimagegenesis', $image_id ); @@ -588,9 +595,9 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen * Get IDs of terms with featured images * @param array $term_ids empty array * @return array all terms with featured images - * @since x.y.z + * @since 2.4.0 */ - protected function get_term_ids( $term_ids = array() ) { + protected function get_affected_terms( $affected_terms = array() ) { $args = array( 'public' => true, 'show_ui' => true, @@ -608,10 +615,10 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen $term_id = $term->term_id; $option = get_option( "displayfeaturedimagegenesis_{$term_id}" ); if ( false !== $option ) { - $term_ids[] = $term_id; + $affected_terms[] = $term; } } } - return $term_ids; + return $affected_terms; } } From f3209da3e37c627839f24403b843e17dd3c47bb7 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Mon, 23 Nov 2015 14:29:35 -0500 Subject: [PATCH 18/20] Fix term_meta notice to only display for 4.4 --- ...s-displayfeaturedimagegenesis-settings.php | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index 2cd5e46..71cb2b3 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -41,14 +41,6 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen add_action( 'load-appearance_page_displayfeaturedimagegenesis', array( $this, 'help' ) ); $this->displaysetting = $this->get_display_setting(); - if ( ! function_exists( 'get_term_meta' ) ) { - return; - } - $updated = get_option( 'displayfeaturedimagegenesis_updatedterms', false ); - if ( $updated ) { - return; - } - $this->update_delete_term_meta(); } /** @@ -58,13 +50,15 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen * @since 1.4.0 */ public function do_settings_form() { + if ( $this->terms_need_updating() ) { + $this->update_delete_term_meta(); + } $page_title = get_admin_page_title(); $heading = $GLOBALS['wp_version'] >= '4.3' ? 'h1' : 'h2'; echo '
'; printf( '<%1$s>%2$s', esc_attr( $heading ), esc_attr( $page_title ) ); - $updated = get_option( 'displayfeaturedimagegenesis_updatedterms', false ); - if ( ! $updated ) { + if ( $this->terms_need_updating() ) { $this->term_meta_notice(); } echo ''; @@ -75,7 +69,6 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen settings_errors(); echo ''; echo '
'; - } /** @@ -297,8 +290,6 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen */ public function set_cpt_image( $args ) { - $item = Display_Featured_Image_Genesis_Common::get_image_variables(); - $post_type = $args['post_type']->name; if ( empty( $this->displaysetting['post_type'][ $post_type ] ) ) { $this->displaysetting['post_type'][ $post_type ] = $id = ''; @@ -621,4 +612,18 @@ class Display_Featured_Image_Genesis_Settings extends Display_Featured_Image_Gen } return $affected_terms; } + + /** + * Check whether terms need to be udpated + * @return boolean true if on 4.4 and wp_options for terms exist; false otherwise + * + * @since 2.4.0 + */ + protected function terms_need_updating() { + $updated = get_option( 'displayfeaturedimagegenesis_updatedterms', false ); + if ( ! $updated && function_exists( 'get_term_meta' ) ) { + return true; + } + return false; + } } From a361d2be703672e610e8adca5d9fc7d06bbe5d44 Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 24 Nov 2015 10:09:15 -0500 Subject: [PATCH 19/20] Move early return --- includes/class-displayfeaturedimagegenesis-helper.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-helper.php b/includes/class-displayfeaturedimagegenesis-helper.php index b4f9ecf..8e91f0d 100644 --- a/includes/class-displayfeaturedimagegenesis-helper.php +++ b/includes/class-displayfeaturedimagegenesis-helper.php @@ -182,6 +182,11 @@ class Display_Featured_Image_Genesis_Helper { */ protected function validate_image( $new_value, $old_value, $label, $size_to_check ) { + // ok for field to be empty + if ( ! $new_value ) { + return ''; + } + $new_value = displayfeaturedimagegenesis_check_image_id( $new_value ); $old_value = displayfeaturedimagegenesis_check_image_id( $old_value ); $source = wp_get_attachment_image_src( $new_value, 'full' ); @@ -189,11 +194,6 @@ class Display_Featured_Image_Genesis_Helper { $width = $source[1]; $reset = sprintf( __( ' The %s Featured Image has been reset to the last valid setting.', 'display-featured-image-genesis' ), $label ); - // ok for field to be empty - if ( ! $new_value ) { - return ''; - } - if ( $valid && $width > $size_to_check ) { return (int) $new_value; } From 41a751496c33b2be1c4060df42072c3b3379961c Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Tue, 24 Nov 2015 10:11:55 -0500 Subject: [PATCH 20/20] Set get_option default and quotes on action --- includes/class-displayfeaturedimagegenesis-taxonomies.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-taxonomies.php b/includes/class-displayfeaturedimagegenesis-taxonomies.php index 7008587..fb659d4 100644 --- a/includes/class-displayfeaturedimagegenesis-taxonomies.php +++ b/includes/class-displayfeaturedimagegenesis-taxonomies.php @@ -29,7 +29,7 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G add_action( "{$taxonomy}_edit_form_fields", array( $this, 'edit_taxonomy_meta_fields' ), 5, 2 ); add_action( "edited_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ) ); add_action( "create_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ) ); - add_action( 'edit_{$taxonomy}', array( $this, 'save_taxonomy_custom_meta' ) ); + add_action( "edit_{$taxonomy}", array( $this, 'save_taxonomy_custom_meta' ) ); add_action( 'load-edit-tags.php', array( $this, 'help' ) ); } @@ -101,7 +101,7 @@ class Display_Featured_Image_Genesis_Taxonomies extends Display_Featured_Image_G if ( ! isset( $input ) ) { return; } - $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id" ); + $displaysetting = get_option( "displayfeaturedimagegenesis_$term_id", false ); $action = function_exists( 'get_term_meta' ) ? 'update_term_meta' : 'update_options_meta'; $this->$action( $term_id, $input, $displaysetting ); }