diff --git a/README.md b/README.md index 37318fa..d9c8387 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Display Featured Image for Genesis -This plugin works within the Genesis Framework, to display your post/page featured images in new and fun ways. For now, an HTML5 theme is required. +This plugin works within the Genesis Framework, to display your post/page featured images in new and fun ways. It should work with either HTML5 or XHTML themes, but older themes may have a width set on elements which may not allow the full backstretch experience. ## Description @@ -55,13 +55,27 @@ function rgc_skip_post_types( $post_types ) { return $post_types; } ``` +### The backstretch image is a little too tall. +If you do not want the height of the backstretch image to be quite the height of the user's window, you can reduce it by just a hair. Go to Settings > Media and change the 'Reduction amount' number from the default of 0. The higher this number is, the shorter your image will be. Feel free to experiment, as no images are harmed by changing this number. + +Additionally/alternatively, you could set a max-height for the backstretch image via css: + +```css +.backstretch { + max-height: 700px; +} +``` ## Credits * Built by [Robin Cornett](http://robincornett.com/) ## Changelog +###1.1.1 +* added a setting in the admin to optionally reduce the height of the backstretch image +* refactoring + ###1.0.1 * added the filter for certain post types, and optional filter for other custom post types diff --git a/display-featured-image-genesis.php b/display-featured-image-genesis.php index 8060812..c729f8e 100644 --- a/display-featured-image-genesis.php +++ b/display-featured-image-genesis.php @@ -19,11 +19,23 @@ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt */ -require plugin_dir_path( __FILE__ ) . 'includes/class-displayfeaturedimagegenesis.php'; - -add_action( 'init', 'displayfeaturedimagegenesis_instantiate' ); -function displayfeaturedimagegenesis_instantiate() { - if ( basename( get_template_directory() ) == 'genesis' ) { - new Display_Featured_Image_Genesis(); - } +// If this file is called directly, abort. +if ( ! defined( 'WPINC' ) ) { + die; } + +// Include classes +require plugin_dir_path( __FILE__ ) . 'includes/class-displayfeaturedimagegenesis.php'; +require plugin_dir_path( __FILE__ ) . 'includes/class-displayfeaturedimage-output.php'; +require plugin_dir_path( __FILE__ ) . 'includes/class-displayfeaturedimage-settings.php'; + +// Instantiate dependent classes +$displayfeaturedimagegenesis_output = new Display_Featured_Image_Genesis_Output(); +$displayfeaturedimagegenesis_settings = new Display_Featured_Image_Genesis_Settings(); + +$displayfeaturedimage = new Display_Featured_Image_Genesis( + $displayfeaturedimagegenesis_output, + $displayfeaturedimagegenesis_settings +); + +$displayfeaturedimage->run(); diff --git a/includes/class-displayfeaturedimagegenesis-output.php b/includes/class-displayfeaturedimagegenesis-output.php new file mode 100644 index 0000000..698cec9 --- /dev/null +++ b/includes/class-displayfeaturedimagegenesis-output.php @@ -0,0 +1,158 @@ + + * @license GPL-2.0+ + * @link http://robincornett.com + * @copyright 2014 Robin Cornett Creative, LLC + */ + +class Display_Featured_Image_Genesis_Output { + /** + * set and retreive variables for the featured image. + * @return $image + * + * @since 1.1.0 + */ + protected function get_image_variables() { + $image = new stdClass(); + global $post; + if ( is_home() ) { + $postspage = get_option( 'page_for_posts' ); + $image->original = wp_get_attachment_image_src( get_post_thumbnail_id( $postspage ), 'original' ); + } + else { + $image->original = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'original' ); + } + $image->large = get_option( 'large_size_w' ); + $image->medium = get_option( 'medium_size_w' ); + $image->content = strpos( $post->post_content, $image->original[0] ); + + return $image; + + } + + /** + * skip certain post types + * @return filter creates a new filter for themes/plugins to use to skip certain post types + * + * @since 1.0.1 + */ + public function get_skipped_posttypes() { + return apply_filters( 'display_featured_image_genesis_skipped_posttypes', array( 'attachment', 'revision', 'nav_menu_item' ) ); + } + + /** + * enqueue plugin styles and scripts. + * @return enqueue + * + * @since 1.0.0 + */ + public function load_scripts() { + + if ( !is_home() && in_array( get_post_type(), $this->get_skipped_posttypes() ) ) { + return; + } + + $image = $this->get_image_variables(); + if ( ( has_post_thumbnail() && $image->content === false ) || is_home() ) { + + wp_enqueue_style( 'displayfeaturedimage-style', plugins_url( 'includes/css/display-featured-image-genesis.css', dirname( __FILE__ ) ), array(), 1.0 ); + + add_action( 'genesis_before', array( $this, 'do_featured_image' ) ); + + if ( ( $image->original[1] ) > $image->large ) { + wp_enqueue_script( 'displayfeaturedimage-backstretch', plugins_url( '/includes/js/backstretch.js', dirname( __FILE__ ) ), array( 'jquery' ), '1.0.0' ); + wp_enqueue_script( 'displayfeaturedimage-backstretch-set', plugins_url( '/includes/js/backstretch-set.js', dirname( __FILE__ ) ), array( 'jquery', 'displayfeaturedimage-backstretch' ), '1.0.0' ); + + wp_localize_script( 'displayfeaturedimage-backstretch-set', 'BackStretchImg', array( 'src' => $image->original[0] ) ); + + $headerheight = get_option( 'displayfeaturedimage_less_header', 0 ); + wp_localize_script( 'displayfeaturedimage-backstretch-set', 'HeaderHeight', array( 'height' => esc_attr( $headerheight ) ) ); + + } + } + } + + /** + * set body class if featured images are displayed using the plugin + * @param filter $classes body_class + * + * @since 1.0.0 + */ + public function add_body_class( $classes ) { + global $post; + + $image = $this->get_image_variables(); + + if ( $image->content === false ) { + if ( ( has_post_thumbnail() || is_home() ) && $image->original[1] > $image->large ) { + $classes[] = 'has-leader'; + } + elseif ( has_post_thumbnail() && ( ( $image->original[1] <= $image->large ) && ( $image->original[1] > $image->medium ) ) ) { + $classes[] = 'large-featured'; + } + } + return $classes; + } + + /** + * do the featured image + * @return image + * + * @since 1.0.0 + */ + public function do_featured_image() { + global $post; + + $image = $this->get_image_variables(); + + if ( $image->content === false ) { + if ( $image->original[1] > $image->large ) { + add_action( 'genesis_after_header', array( $this, 'do_backstretch_image' ) ); + } + elseif ( ( $image->original[1] <= $image->large ) && ( $image->original[1] > $image->medium ) ) { + add_action( 'genesis_before_entry', array( $this, 'do_large_image' ) ); + } + } + + } + + /** + * backstretch image (for images which are larger than Media Settings > Large ) + * @return image + * + * @since 1.0.0 + */ + public function do_backstretch_image() { + + $image = $this->get_image_variables(); + + if ( ! is_home() ) { + remove_action( 'genesis_entry_header', 'genesis_do_post_title' ); + } + + echo '
' . __( 'Change this setting to reduce the maximum height of the backstretch image.', 'display-featured-image-genesis' ) . '
'; + } + + /** + * Setting for reduction amount + * @return number of pixels to remove in backstretch-set.js + * + * @since 1.1.0 + */ + public function header_size() { + $value = get_option( 'displayfeaturedimage_less_header', 0 ); + + echo ''; + echo ''; + echo '' . __( 'Changing this number will reduce the backstretch image height by this number of pixels. Default is zero.', 'display-featured-image-genesis' ) . '
'; + + } + + /** + * Help tab for media screen + * @return help tab with verbose information for plugin + * + * @since 1.1.0 + */ + public function help() { + $screen = get_current_screen(); + + $displayfeaturedimage_help = + '' . __( 'Depending on how your header/nav are set up, or if you just do not want your backstretch image to extend to the bottom of the user screen, you may want to change this number. It will raise the bottom line of the backstretch image, making it shorter.', 'display-featured-image-genesis' ) . '
'; + + $screen->add_help_tab( array( + 'id' => 'displayfeaturedimage-help', + 'title' => __( 'Display Featured Image for Genesis', 'display-featured-image-genesis' ), + 'content' => $displayfeaturedimage_help, + ) ); + + } + +} diff --git a/includes/class-displayfeaturedimagegenesis.php b/includes/class-displayfeaturedimagegenesis.php index 4ade9ed..5f550ff 100644 --- a/includes/class-displayfeaturedimagegenesis.php +++ b/includes/class-displayfeaturedimagegenesis.php @@ -15,154 +15,43 @@ * @package DisplayFeaturedImageGenesis */ class Display_Featured_Image_Genesis { - function __construct() { - add_action( 'wp_enqueue_scripts', array( $this, 'load_scripts' ) ); - add_filter( 'body_class', array( $this, 'add_body_class' ) ); + function __construct( $output, $settings ) { + $this->output = $output; + $this->settings = $settings; } - /** - * set and retreive variables for the featured image. - * @return $image - * - * @since 1.0.0 - */ - protected function get_image_variables() { - $image = new stdClass(); - global $post; - if ( is_home() ) { - $postspage = get_option( 'page_for_posts' ); - $image->original = wp_get_attachment_image_src( get_post_thumbnail_id( $postspage ), 'original' ); - } - else { - $image->original = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'original' ); - } - $image->large = get_option( 'large_size_w' ); - $image->medium = get_option( 'medium_size_w' ); - $image->content = strpos( $post->post_content, $image->original[0] ); - - return $image; - - } - - - /** - * skip certain post types - * @return filter creates a new filter for themes/plugins to use to skip certain post types - * - * @since 1.0.1 - */ - public function get_skipped_posttypes() { - return apply_filters( 'display_featured_image_genesis_skipped_posttypes', array( 'attachment', 'revision', 'nav_menu_item' ) ); - } - - /** - * enqueue plugin styles and scripts. - * @return enqueue - * - * @since 1.0.0 - */ - public function load_scripts() { - - if ( !is_home() && in_array( get_post_type(), $this->get_skipped_posttypes() ) ) { + public function run() { + if ( basename( get_template_directory() ) !== 'genesis' ) { + add_action( 'admin_notices', array( $this, 'error_message' ) ); return; } - - $image = $this->get_image_variables(); - if ( ( has_post_thumbnail() && $image->content === false ) || is_home() ) { - - wp_enqueue_style( 'displayfeaturedimage-style', plugins_url( 'includes/css/display-featured-image-genesis.css', dirname( __FILE__ ) ), array(), 1.0 ); - - add_action( 'genesis_before', array( $this, 'do_featured_image' ) ); - - if ( ( $image->original[1] ) > $image->large ) { - wp_enqueue_script( 'displayfeaturedimage-backstretch', plugins_url( '/includes/js/backstretch.js', dirname( __FILE__ ) ), array( 'jquery' ), '1.0.0' ); - wp_enqueue_script( 'displayfeaturedimage-backstretch-set', plugins_url( '/includes/js/backstretch-set.js', dirname( __FILE__ ) ), array( 'jquery', 'displayfeaturedimage-backstretch' ), '1.0.0' ); - - wp_localize_script( 'displayfeaturedimage-backstretch-set', 'BackStretchImg', array( 'src' => $image->original[0] ) ); - - } - } + add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) ); + add_action( 'admin_init', array( $this->settings, 'register_settings' ) ); + add_action( 'load-options-media.php', array( $this->settings, 'help' ) ); + add_action( 'wp_enqueue_scripts', array( $this->output, 'load_scripts' ) ); + add_filter( 'body_class', array( $this->output, 'add_body_class' ) ); } /** - * set body class if featured images are displayed using the plugin - * @param filter $classes body_class + * Error message if we're not using the Genesis Framework. * - * @since 1.0.0 + * @since 1.1.0 */ - public function add_body_class( $classes ) { - global $post; - - $image = $this->get_image_variables(); - - if ( $image->content === false ) { - if ( ( has_post_thumbnail() || is_home() ) && $image->original[1] > $image->large ) { - $classes[] = 'has-leader'; - } - elseif ( has_post_thumbnail( $post->ID ) && ( ( $image->original[1] <= $image->large ) && ( $image->original[1] > $image->medium ) ) ) { - $classes[] = 'large-featured'; - } - } - return $classes; + public function error_message() { + echo '' . sprintf( + __( 'Sorry, Display Featured Image for Genesis works only with the Genesis Framework. You can deactivate the plugin, since it is not working anyway, or you can activate a Genesis child theme.', 'display-featured-image-genesis' ), + esc_url( admin_url( 'plugins.php' ) ), + esc_url( admin_url( 'themes.php' ) ) + ) . '