/** * Echo the widget content. * * @since 2.0.0 * * * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget. * @param array $instance The settings for the particular instance of the widget */ function widget($args, $instance) { global $wp_query, $_genesis_displayed_ids; // Merge with defaults $instance = wp_parse_args((array) $instance, $this->defaults); $term_id = $instance['term']; $term_meta = get_option("displayfeaturedimagegenesis_{$term_id}"); $term = get_term_by('id', $term_id, $instance['taxonomy']); if (!$term) { return; } $title = $term->meta['headline']; if (!$title) { $title = $term->name; } $permalink = get_term_link($term); $args['before_widget'] = str_replace('class="widget ', 'class="widget ' . $term->slug . ' ', $args['before_widget']); echo $args['before_widget']; if (!empty($instance['title'])) { echo $args['before_title'] . apply_filters('widget_title', $instance['title'], $instance, $this->id_base) . $args['after_title']; } if ($term_meta) { $image_id = displayfeaturedimagegenesis_check_image_id($term_meta['term_image']); $image_src = wp_get_attachment_image_src($image_id, $instance['image_size']); if ($image_src) { $image = '<img src="' . esc_url($image_src[0]) . '" alt="' . esc_html($title) . '" />'; } if ($instance['show_image'] && $image) { $role = empty($instance['show_title']) ? '' : 'aria-hidden="true"'; printf('<a href="%s" title="%s" class="%s" %s>%s</a>', esc_url($permalink), esc_html($title), esc_attr($instance['image_alignment']), esc_attr($role), wp_kses_post($image)); } } if ($instance['show_title']) { if (!empty($instance['show_title'])) { $title_output = sprintf('<h2><a href="%s">%s</a></h2>', esc_url($permalink), esc_html($title)); if (genesis_html5()) { $title_output = sprintf('<h2 class="archive-title"><a href="%s">%s</a></h2>', esc_url($permalink), esc_html($title)); } echo wp_kses_post($title_output); } } if ($instance['show_content']) { echo genesis_html5() ? '<div class="term-description">' : ''; $intro_text = apply_filters('display_featured_image_genesis_term_description', $term->meta['intro_text']); if (!$intro_text) { $intro_text = $term->description; } echo wp_kses_post(wpautop($intro_text)); echo genesis_html5() ? '</div>' : ''; } echo $args['after_widget']; }
/** * manage new taxonomy column * @param blank $value blank (because WP) * @param column id $column column id is featured_image * @param term id $term_id term_id for taxonomy * @return featured image display featured image, if it exists, for each term in a public taxonomy * * @since 2.0.0 */ public function manage_taxonomy_column($value, $column, $term_id) { if ('featured_image' !== $column) { return; } $term_meta = get_option("displayfeaturedimagegenesis_{$term_id}"); if (empty($term_meta['term_image'])) { 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']); $args = array('image_id' => $image_id, 'context' => 'term', 'alt' => get_term($term_id, $taxonomy)->name); echo wp_kses_post($this->admin_featured_image($args)); }
/** * Get custom post type featured image ID. * @return ID Gets the ID of the image assigned as the custom post type featured image. * * @since 2.1.0 */ function display_featured_image_genesis_get_cpt_image_id($image_id = '') { $post_type = ''; $displaysetting = get_option('displayfeaturedimagegenesis'); $object = get_queried_object(); if (!$object || is_admin()) { return; } if ($object->name) { // results in post type on cpt archive $post_type = $object->name; } elseif ($object->taxonomy) { // on a tax/term/category $tax_object = get_taxonomy($object->taxonomy); $post_type = $tax_object->object_type[0]; } elseif ($object->post_type) { // on singular $post_type = $object->post_type; } if (!empty($displaysetting['post_type'][$post_type])) { $image_id = displayfeaturedimagegenesis_check_image_id($displaysetting['post_type'][$post_type]); } return (int) $image_id; }
/** * retrieve image ID for output * @param string $image_id variable, ID of featured image * * @since 2.2.1 */ public static function set_image_id($image_id = '') { $frontpage = get_option('show_on_front'); // either 'posts' or 'page' $postspage = get_option('page_for_posts'); $displaysetting = get_option('displayfeaturedimagegenesis'); $postspage_image = get_post_thumbnail_id($postspage); $fallback = $displaysetting['default']; $medium = (int) get_option('medium_size_w'); $fallback_id = displayfeaturedimagegenesis_check_image_id($fallback); /** * create a filter to use the fallback image * @var filter * @since 2.0.0 (deprecated old use_fallback_image function from 1.2.2) */ $use_fallback = apply_filters('display_featured_image_genesis_use_default', array()); // set here with fallback preemptively, if it exists if (!empty($fallback)) { $image_id = $fallback_id; if (in_array(get_post_type(), $use_fallback)) { return (int) $image_id; } } // outlier: if it's a home page with a static front page, and there is a featured image set on the home page // also provisionally sets featured image for posts, similar to CPT archives if (is_home() && 'page' === $frontpage && !empty($postspage_image) || 'post' === get_post_type()) { $image_id = $postspage_image ? $postspage_image : $image_id; } $object = get_queried_object(); // singular or archive CPT if ($object && is_main_query() && !is_admin()) { $post_type = ''; if ($object->name) { // results in post type on cpt archive $post_type = $object->name; } elseif ($object->taxonomy) { // on a tax/term/category $tax_object = get_taxonomy($object->taxonomy); $post_type = $tax_object->object_type[0]; } elseif ($object->post_type) { // on singular $post_type = $object->post_type; } if (!empty($displaysetting['post_type'][$post_type])) { $image_id = displayfeaturedimagegenesis_check_image_id($displaysetting['post_type'][$post_type]); /** * use the custom post type featured image * * @since 2.2.1 */ $use_cpt = apply_filters('displayfeaturedimagegenesis_use_post_type_image', array()); if (in_array(get_post_type(), $use_cpt)) { return (int) $image_id; } } } if (is_author()) { $image_id = get_the_author_meta('displayfeaturedimagegenesis', (int) get_query_var('author')); } // 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']); } } // any singular post/page/CPT if (is_singular()) { $term_image = display_featured_image_genesis_get_term_image_id(); if (!empty($term_image)) { $image_id = $term_image; /** * create filter to use taxonomy image if single post doesn't have a thumbnail, but one of its terms does. * @var filter */ $use_tax_image = apply_filters('display_featured_image_genesis_use_taxonomy', array()); if (in_array(get_post_type(), $use_tax_image)) { return (int) $image_id; } } $thumb_metadata = wp_get_attachment_metadata(get_post_thumbnail_id(get_the_ID())); // needed only for the next line $width = $thumb_metadata ? $thumb_metadata['width'] : ''; if (has_post_thumbnail() && $width >= $medium) { $image_id = get_post_thumbnail_id(get_the_ID()); } } /** * filter to use a different image id * @var $image_id * * @since 2.2.0 */ $image_id = apply_filters('display_featured_image_genesis_image_id', $image_id); // make sure the image id is an integer $image_id = is_numeric($image_id) ? (int) $image_id : ''; return $image_id; }
/** * Echo the widget content. * * @since 2.0.0 * * * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget. * @param array $instance The settings for the particular instance of the widget */ function widget($args, $instance) { //* Merge with defaults $instance = wp_parse_args((array) $instance, $this->defaults); $post_type = get_post_type_object($instance['post_type']); $option = get_option('displayfeaturedimagegenesis'); if ('post' === $instance['post_type']) { $frontpage = get_option('show_on_front'); // either 'posts' or 'page' $postspage = get_option('page_for_posts'); $postspage_image = get_post_thumbnail_id($postspage); $title = get_post($postspage)->post_title; $permalink = esc_url(get_the_permalink($postspage)); if ('posts' === $frontpage || 'page' === $frontpage && !$postspage) { $postspage_image = display_featured_image_genesis_get_default_image_id(); $title = get_bloginfo('name'); $permalink = home_url(); } } else { $title = $post_type->label; $permalink = esc_url(get_post_type_archive_link($instance['post_type'])); if (post_type_supports($instance['post_type'], 'genesis-cpt-archives-settings')) { $headline = genesis_get_cpt_option('headline', $instance['post_type']); if (!empty($headline)) { $title = $headline; } } } echo $args['before_widget']; if (!empty($instance['title'])) { echo $args['before_title'] . apply_filters('widget_title', $instance['title'], $instance, $this->id_base) . $args['after_title']; } $image = ''; $image_id = 'post' === $instance['post_type'] ? $postspage_image : displayfeaturedimagegenesis_check_image_id($option['post_type'][$post_type->name]); $image_src = wp_get_attachment_image_src($image_id, $instance['image_size']); if ($image_src) { $image = '<img src="' . $image_src[0] . '" alt="' . $title . '" />'; } if ($instance['show_image'] && $image) { $role = empty($instance['show_title']) ? '' : 'aria-hidden="true"'; printf('<a href="%s" title="%s" class="%s" %s>%s</a>', esc_url($permalink), esc_html($title), esc_attr($instance['image_alignment']), esc_attr($role), $image); } if ($instance['show_title']) { if (!empty($instance['show_title'])) { $title_output = sprintf('<h2><a href="%s">%s</a></h2>', $permalink, esc_html($title)); if (genesis_html5()) { $title_output = sprintf('<h2 class="archive-title"><a href="%s">%s</a></h2>', $permalink, esc_html($title)); } echo wp_kses_post($title_output); } } $intro_text = ''; if (post_type_supports($instance['post_type'], 'genesis-cpt-archives-settings')) { $intro_text = genesis_get_cpt_option('intro_text', $instance['post_type']); } elseif ('post' === $instance['post_type']) { $intro_text = get_post($postspage)->post_excerpt; if ('posts' === $frontpage || 'page' === $frontpage && !$postspage) { $intro_text = get_bloginfo('description'); } } if ($instance['show_content'] && $intro_text) { echo genesis_html5() ? '<div class="archive-description">' : ''; $intro_text = apply_filters('display_featured_image_genesis_cpt_description', $intro_text); echo wp_kses_post(wpautop($intro_text)); echo genesis_html5() ? '</div>' : ''; } echo $args['after_widget']; }
/** * retrieve image ID for output * * @param string $image_id variable, ID of featured image * * @since 2.2.1 * @return int|string $image_id */ public static function set_image_id($image_id = '') { $setting = displayfeaturedimagegenesis_get_setting(); $fallback = $setting['default']; $fallback_id = displayfeaturedimagegenesis_check_image_id($fallback); // set here with fallback preemptively, if it exists if (!empty($fallback)) { /** * Creates display_featured_image_genesis_use_default filter to check * whether get_post_type array should use default image. * @uses is_in_array() */ $image_id = $fallback_id; if (self::is_in_array('use_default') || $setting['always_default']) { return (int) $image_id; } } // outlier: if it's a home page with a static front page, and there is a featured image set on the home page // also provisionally sets featured image for posts, similar to CPT archives $frontpage = get_option('show_on_front'); // either 'posts' or 'page' if ('page' === $frontpage) { $postspage = get_option('page_for_posts'); $postspage_image = get_post_thumbnail_id($postspage); $setting['post_type']['post'] = (int) $postspage_image; } // if a post type image exists, it takes priority over the fallback. check that next. $post_type = get_post_type(); if (!empty($setting['post_type'][$post_type])) { /** * Creates display_featured_image_genesis_use_post_type_image filter to check * whether get_post_type array should use the post type image. * @uses is_in_array() */ $image_id = displayfeaturedimagegenesis_check_image_id($setting['post_type'][$post_type]); if (self::is_in_array('use_post_type_image')) { return (int) $image_id; } } if (is_author()) { $image_id = get_the_author_meta('displayfeaturedimagegenesis', (int) get_query_var('author')); } // taxonomy if (is_category() || is_tag() || is_tax()) { $object = get_queried_object(); $image = displayfeaturedimagegenesis_get_term_image($object->term_id); if ($image) { $image_id = $image; } } // search page if (is_search() && !empty($setting['post_type']['search'])) { $image_id = $setting['post_type']['search']; } // 404 if (is_404() && !empty($setting['post_type']['fourohfour'])) { $image_id = $setting['post_type']['fourohfour']; } // any singular post/page/CPT if (is_singular()) { $image_id = self::get_singular_post_image($image_id, $setting, $post_type); } /** * filter to use a different image id * @var $image_id * * @since 2.2.0 */ $image_id = apply_filters('display_featured_image_genesis_image_id', $image_id); // make sure the image id is an integer $image_id = is_numeric($image_id) ? (int) $image_id : ''; return $image_id; }
/** * 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) { // 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'); $valid = (bool) $this->is_valid_img_ext($source[0]); $width = $source[1]; if ($valid && $width > $size_to_check) { return (int) $new_value; } $class = 'invalid'; $message = $this->image_validation_message($valid, $label); if (!is_customize_preview()) { add_settings_error($old_value, esc_attr($class), esc_attr($message), 'error'); } elseif (method_exists('WP_Customize_Setting', 'validate')) { return new WP_Error(esc_attr($class), esc_attr($message)); } return (int) $old_value; }
/** * Update and/or delete term_meta and wp_options * @since 2.4.0 */ protected function update_delete_term_meta() { if (isset($_POST['displayfeaturedimagegenesis_termmeta'])) { if (!check_admin_referer('displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce')) { return; } foreach ($this->term_option_query as $option_key) { $term_id = (int) str_replace('displayfeaturedimagegenesis_', '', $option_key); $option = get_option(esc_attr($option_key), false); $term = get_term((int) $term_id); if (!is_wp_error($term) && !is_null($term)) { $image_id = (int) displayfeaturedimagegenesis_check_image_id($option['term_image']); update_term_meta($term_id, 'displayfeaturedimagegenesis', $image_id); } if (false !== $option) { delete_option(esc_attr($option_key)); } } } if (isset($_POST['displayfeaturedimagegenesis_termmeta']) || isset($_POST['displayfeaturedimagegenesis_termmetadismiss'])) { if (!check_admin_referer('displayfeaturedimagegenesis_metanonce', 'displayfeaturedimagegenesis_metanonce')) { return; } update_option('displayfeaturedimagegenesis_updatedterms', true); } }
/** * 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; }