1249 lines
48 KiB
PHP
1249 lines
48 KiB
PHP
|
<?php
|
||
|
defined( 'WPINC' ) or die;
|
||
|
|
||
|
if ( ! defined( 'GP_IMAGE_RESIZER' ) ) {
|
||
|
require_once GP_LIBRARY_DIRECTORY . 'image-processing-queue/image-processing-queue.php';
|
||
|
}
|
||
|
|
||
|
require plugin_dir_path( __FILE__ ) . 'post-type.php';
|
||
|
require plugin_dir_path( __FILE__ ) . 'global-locations.php';
|
||
|
require plugin_dir_path( __FILE__ ) . 'metabox.php';
|
||
|
require plugin_dir_path( __FILE__ ) . 'page-header.php';
|
||
|
require plugin_dir_path( __FILE__ ) . 'post-image.php';
|
||
|
|
||
|
add_action( 'wp', 'generate_page_header_do_setup' );
|
||
|
/**
|
||
|
* Adds our page headers in their correct places, and sets any necessary filters.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function generate_page_header_do_setup() {
|
||
|
if ( is_admin() ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$options = generate_page_header_get_options();
|
||
|
$global_locations = wp_parse_args( get_option( 'generate_page_header_global_locations', array() ), '' );
|
||
|
|
||
|
// Remove elements if they're being added as a template tag
|
||
|
if ( '' !== $options[ 'content' ] ) {
|
||
|
if ( strpos( $options[ 'content' ], '{{post_title}}' ) !== false ) {
|
||
|
add_filter( 'generate_show_title', '__return_false' );
|
||
|
remove_action( 'generate_archive_title', 'generate_archive_title' );
|
||
|
add_filter( 'post_class', 'generate_page_header_remove_hentry' );
|
||
|
}
|
||
|
|
||
|
if ( strpos( $options[ 'content' ], '{{post_date}}' ) !== false ) {
|
||
|
add_filter( 'generate_post_date', '__return_false' );
|
||
|
add_filter( 'post_class', 'generate_page_header_remove_hentry' );
|
||
|
}
|
||
|
|
||
|
if ( strpos( $options[ 'content' ], '{{post_author}}' ) !== false ) {
|
||
|
add_filter( 'generate_post_author', '__return_false' );
|
||
|
add_filter( 'post_class', 'generate_page_header_remove_hentry' );
|
||
|
}
|
||
|
|
||
|
if ( strpos( $options[ 'content' ], '{{post_terms.category}}' ) !== false ) {
|
||
|
add_filter( 'generate_show_categories', '__return_false' );
|
||
|
}
|
||
|
|
||
|
if ( strpos( $options[ 'content' ], '{{post_terms.post_tag}}' ) !== false ) {
|
||
|
add_filter( 'generate_show_tags', '__return_false' );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Replace our logos if set
|
||
|
if ( generate_page_header_logo_exists() && $options[ 'logo_url' ] ) {
|
||
|
add_filter( 'generate_logo', 'generate_page_header_replace_logo' );
|
||
|
}
|
||
|
|
||
|
if ( generate_page_header_navigation_logo_exists() && $options[ 'navigation_logo_url' ] ) {
|
||
|
add_filter( 'generate_navigation_logo', 'generate_page_header_replace_navigation_logo' );
|
||
|
}
|
||
|
|
||
|
// Single posts
|
||
|
if ( is_singular() ) {
|
||
|
if ( 'inside-content' == generate_get_page_header_location() ) {
|
||
|
add_action( 'generate_before_content','generate_page_header' );
|
||
|
}
|
||
|
|
||
|
if ( 'below-title' == generate_get_page_header_location() ) {
|
||
|
add_action( 'generate_after_entry_header','generate_page_header' );
|
||
|
}
|
||
|
|
||
|
if ( 'above-content' == generate_get_page_header_location() ) {
|
||
|
add_action( 'generate_after_header','generate_page_header' );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Need to check all 3
|
||
|
* @see https://core.trac.wordpress.org/ticket/18636
|
||
|
*/
|
||
|
if ( is_tax() || is_category() || is_tag() ) {
|
||
|
add_action( 'generate_after_header','generate_page_header' );
|
||
|
}
|
||
|
|
||
|
// Blog page header
|
||
|
if ( generate_get_blog_page_header() ) {
|
||
|
add_action( 'generate_after_header','generate_page_header' );
|
||
|
}
|
||
|
|
||
|
// Custom post types (excluding single posts)
|
||
|
if ( isset( $global_locations[ get_post_type( get_the_ID() ) ] ) && '' !== $global_locations[ get_post_type( get_the_ID() ) ] && ! is_singular() ) {
|
||
|
add_action( 'generate_after_header','generate_page_header' );
|
||
|
}
|
||
|
|
||
|
// Search results
|
||
|
if ( is_search() ) {
|
||
|
add_action( 'generate_after_header','generate_page_header' );
|
||
|
}
|
||
|
|
||
|
// 404 page
|
||
|
if ( is_404() ) {
|
||
|
add_action( 'generate_after_header','generate_page_header' );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets our post meta if it exists.
|
||
|
* If it doesn't, return an empty string.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*
|
||
|
* @return string|bool
|
||
|
*/
|
||
|
function generate_page_header_get_post_meta( $post_id, $key = '', $single = false ) {
|
||
|
return null !== get_post_meta( $post_id, $key, $single ) ? get_post_meta( $post_id, $key, $single ) : '';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Put all of our meta box settings into an array we can use
|
||
|
*
|
||
|
* We set the post ID based on various settings in here so we can use the same
|
||
|
* settings no matter the location.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*
|
||
|
* @param int $id The ID of our page header to return.
|
||
|
* @return array All our meta box settings.
|
||
|
*/
|
||
|
function generate_page_header_get_options( $id = false ) {
|
||
|
$global_locations = wp_parse_args( get_option( 'generate_page_header_global_locations', array() ), '' );
|
||
|
$post_type = get_post_type( get_the_ID() );
|
||
|
|
||
|
// Get our term meta if we're on a taxonomy
|
||
|
// Need to check all 3
|
||
|
// @see https://core.trac.wordpress.org/ticket/18636
|
||
|
if ( is_tax() || is_category() || is_tag() && ! $id && ! is_singular() ) {
|
||
|
$queried_object = get_queried_object();
|
||
|
|
||
|
if ( is_object( $queried_object ) ) {
|
||
|
if ( isset( $global_locations[ $queried_object->taxonomy ] ) && '' !== $global_locations[ $queried_object->taxonomy ] && ! $id ) {
|
||
|
$id = $global_locations[ $queried_object->taxonomy ];
|
||
|
|
||
|
if ( 'publish' !== get_post_status( $id ) ) {
|
||
|
$id = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$tax_post_id = get_term_meta( $queried_object->term_id, '_generate-select-page-header', true );
|
||
|
if ( '' !== $tax_post_id && 'publish' == get_post_status( $tax_post_id ) ) {
|
||
|
$id = $tax_post_id;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Set our blog page ID if we're on the blog
|
||
|
if ( isset( $global_locations[ 'blog' ] ) && generate_get_blog_page_header() && ! $id ) {
|
||
|
$id = $global_locations[ 'blog' ];
|
||
|
}
|
||
|
|
||
|
// Archive post types
|
||
|
if ( isset( $global_locations[ $post_type . '_archives' ] ) && '' !== $global_locations[ $post_type . '_archives' ] && ! $id && is_post_type_archive( $post_type ) ) {
|
||
|
$id = $global_locations[ $post_type . '_archives' ];
|
||
|
}
|
||
|
|
||
|
// Search results
|
||
|
if ( isset( $global_locations[ 'search_results' ] ) && '' !== $global_locations[ 'search_results' ] && ! $id && is_search() ) {
|
||
|
$id = $global_locations[ 'search_results' ];
|
||
|
}
|
||
|
|
||
|
// 404
|
||
|
if ( isset( $global_locations[ '404' ] ) && '' !== $global_locations[ '404' ] && ! $id && is_404() ) {
|
||
|
$id = $global_locations[ '404' ];
|
||
|
}
|
||
|
|
||
|
if ( is_singular() ) {
|
||
|
// Single post types
|
||
|
if ( isset( $global_locations[ $post_type ] ) && '' !== $global_locations[ $post_type ] && ! $id ) {
|
||
|
$id = $global_locations[ $post_type ];
|
||
|
|
||
|
if ( 'publish' !== get_post_status( $id ) ) {
|
||
|
$id = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Use our Page Header CPT
|
||
|
// If it doesn't exist, use our on-page meta box
|
||
|
$cpt_post_id = get_post_meta( get_the_ID(), '_generate-select-page-header', true );
|
||
|
if ( '' !== $cpt_post_id && 'publish' == get_post_status( $cpt_post_id ) ) {
|
||
|
$id = get_post_meta( get_the_ID(), '_generate-select-page-header', true );
|
||
|
} elseif ( get_post_meta( get_the_ID(), '_meta-generate-page-header-image', true ) || get_post_meta( get_the_ID(), '_meta-generate-page-header-content', true ) ) {
|
||
|
// Get the page ID if we have a featured image, custom image or page header content
|
||
|
$id = get_the_ID();
|
||
|
}
|
||
|
|
||
|
// If we still don't have an ID, check if we have a featured image to show
|
||
|
if ( ! $id && has_post_thumbnail() ) {
|
||
|
$id = get_the_ID();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$id = apply_filters( 'generate_page_header_id', $id );
|
||
|
|
||
|
// Bail if we don't have an ID
|
||
|
if ( ! $id ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Figure out our image ID
|
||
|
$image_id = null;
|
||
|
if ( get_post_meta( $id, '_meta-generate-page-header-image-id', true ) ) {
|
||
|
$image_id = get_post_meta( $id, '_meta-generate-page-header-image-id', true );
|
||
|
} elseif ( has_post_thumbnail( $id ) ) {
|
||
|
$image_id = get_post_thumbnail_id( $id, 'full' );
|
||
|
} elseif ( is_singular() ) {
|
||
|
$image_id = get_post_thumbnail_id( get_the_ID(), 'full' );
|
||
|
}
|
||
|
|
||
|
$options = array(
|
||
|
'page_header_id' => $id,
|
||
|
'image_url' => get_post_meta( $id, '_meta-generate-page-header-image', true ),
|
||
|
'image_id' => $image_id,
|
||
|
'image_link' => get_post_meta( $id, '_meta-generate-page-header-image-link', true ),
|
||
|
'image_resize' => get_post_meta( $id, '_meta-generate-page-header-enable-image-crop', true ),
|
||
|
'image_width' => get_post_meta( $id, '_meta-generate-page-header-image-width', true ),
|
||
|
'image_height' => get_post_meta( $id, '_meta-generate-page-header-image-height', true ),
|
||
|
'content' => get_post_meta( $id, '_meta-generate-page-header-content', true ),
|
||
|
'autop' => get_post_meta( $id, '_meta-generate-page-header-content-autop', true ),
|
||
|
'add_padding' => get_post_meta( $id, '_meta-generate-page-header-content-padding', true ),
|
||
|
'background_image' => get_post_meta( $id, '_meta-generate-page-header-image-background', true ),
|
||
|
'container_type' => get_post_meta( $id, '_meta-generate-page-header-image-background-type', true ),
|
||
|
'inner_container' => get_post_meta( $id, '_meta-generate-page-header-inner-container', true ),
|
||
|
'parallax' => get_post_meta( $id, '_meta-generate-page-header-image-background-fixed', true ),
|
||
|
'background_overlay' => get_post_meta( $id, '_meta-generate-page-header-image-background-overlay', true ),
|
||
|
'full_screen' => get_post_meta( $id, '_meta-generate-page-header-full-screen', true ),
|
||
|
'vertical_center' => get_post_meta( $id, '_meta-generate-page-header-vertical-center', true ),
|
||
|
'alignment' => get_post_meta( $id, '_meta-generate-page-header-image-background-alignment', true ),
|
||
|
'padding' => get_post_meta( $id, '_meta-generate-page-header-image-background-spacing', true ),
|
||
|
'padding_unit' => get_post_meta( $id, '_meta-generate-page-header-image-background-spacing-unit', true ),
|
||
|
'x_padding' => get_post_meta( $id, '_meta-generate-page-header-left-right-padding', true ),
|
||
|
'x_padding_unit' => get_post_meta( $id, '_meta-generate-page-header-left-right-padding-unit', true ),
|
||
|
'text_color' => get_post_meta( $id, '_meta-generate-page-header-image-background-text-color', true ),
|
||
|
'background_color' => get_post_meta( $id, '_meta-generate-page-header-image-background-color', true ),
|
||
|
'link_color' => get_post_meta( $id, '_meta-generate-page-header-image-background-link-color', true ),
|
||
|
'link_color_hover' => get_post_meta( $id, '_meta-generate-page-header-image-background-link-color-hover', true ),
|
||
|
'merge' => get_post_meta( $id, '_meta-generate-page-header-combine', true ),
|
||
|
'absolute' => get_post_meta( $id, '_meta-generate-page-header-absolute-position', true ),
|
||
|
'custom_menu_colors' => get_post_meta( $id, '_meta-generate-page-header-transparent-navigation', true ),
|
||
|
'menu_background_color' => get_post_meta( $id, '_meta-generate-page-header-navigation-background', true ),
|
||
|
'menu_text_color' => get_post_meta( $id, '_meta-generate-page-header-navigation-text', true ),
|
||
|
'site_title_color' => get_post_meta( $id, '_meta-generate-page-header-site-title', true ),
|
||
|
'site_tagline_color' => get_post_meta( $id, '_meta-generate-page-header-site-tagline', true ),
|
||
|
'menu_background_color_hover' => get_post_meta( $id, '_meta-generate-page-header-navigation-background-hover', true ),
|
||
|
'menu_text_color_hover' => get_post_meta( $id, '_meta-generate-page-header-navigation-text-hover', true ),
|
||
|
'menu_background_current' => get_post_meta( $id, '_meta-generate-page-header-navigation-background-current', true ),
|
||
|
'menu_text_current' => get_post_meta( $id, '_meta-generate-page-header-navigation-text-current', true ),
|
||
|
'background_video' => get_post_meta( $id, '_meta-generate-page-header-video', true ),
|
||
|
'background_video_ogv' => get_post_meta( $id, '_meta-generate-page-header-video-ogv', true ),
|
||
|
'background_video_webm' => get_post_meta( $id, '_meta-generate-page-header-video-webm', true ),
|
||
|
'background_video_overlay' => get_post_meta( $id, '_meta-generate-page-header-video-overlay', true ),
|
||
|
'logo_url' => get_post_meta( $id, '_meta-generate-page-header-logo', true ),
|
||
|
'logo_id' => get_post_meta( $id, '_meta-generate-page-header-logo-id', true ),
|
||
|
'navigation_logo_url' => get_post_meta( $id, '_meta-generate-page-header-navigation-logo', true ),
|
||
|
'navigation_logo_id' => get_post_meta( $id, '_meta-generate-page-header-navigation-logo-id', true ),
|
||
|
);
|
||
|
|
||
|
return apply_filters( 'generate_page_header_options', $options );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* A helper function to return either the URL or ID of our images.
|
||
|
*
|
||
|
* Typically we should have an ID, but this add-on used to only
|
||
|
* store the image URL, so we have to account for that.
|
||
|
*
|
||
|
* If we don't have a custom images, we check to see if we can use
|
||
|
* the featured image instead.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*
|
||
|
* @param $type What to return.
|
||
|
* @param $id The ID of our post.
|
||
|
* @return int|string
|
||
|
*/
|
||
|
function generate_page_header_get_image( $type = 'URL', $id = '' ) {
|
||
|
if ( '' == $id ) {
|
||
|
$id = get_the_ID();
|
||
|
}
|
||
|
|
||
|
if ( is_attachment() ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$options = generate_page_header_get_options();
|
||
|
$image_id = $options[ 'image_id' ];
|
||
|
$image_url = $options[ 'image_url' ];
|
||
|
|
||
|
// If we're getting the URL
|
||
|
if ( 'URL' == $type || 'ALL' == $type ) {
|
||
|
|
||
|
// If we have an image ID, get the link
|
||
|
if ( '' !== $image_id ) {
|
||
|
return esc_url( wp_get_attachment_url( $image_id ) );
|
||
|
}
|
||
|
|
||
|
// If we don't have the ID, check for the URL
|
||
|
if ( '' == $image_id && '' !== $image_url ) {
|
||
|
return esc_url( $image_url );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// If we're getting the ID
|
||
|
if ( 'ID' == $type || 'ALL' == $type ) {
|
||
|
// If we have the ID, return it
|
||
|
if ( '' !== $image_id ) {
|
||
|
return absint( $image_id );
|
||
|
}
|
||
|
|
||
|
// If we have a URL and no ID, return it
|
||
|
if ( '' == $image_id && '' !== $image_url ) {
|
||
|
if ( function_exists( 'attachment_url_to_postid' ) ) {
|
||
|
return attachment_url_to_postid( esc_url( $image_url ) );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Still here?
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Output our image HTML.
|
||
|
*
|
||
|
* This function figures out if we need to crop/resize the image or not,
|
||
|
* then it returns the image HTML based on that.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function generate_page_header_get_image_output() {
|
||
|
$options = generate_page_header_get_options();
|
||
|
$image_url = generate_page_header_get_image( 'URL' );
|
||
|
$image_id = generate_page_header_get_image( 'ID' );
|
||
|
|
||
|
// If we're not resizing the image, we can just output the HTML here
|
||
|
if ( 'enable' !== $options[ 'image_resize' ] ) {
|
||
|
return apply_filters( 'post_thumbnail_html',
|
||
|
wp_get_attachment_image( $image_id, apply_filters( 'generate_page_header_default_size', 'full' ), '', array( 'itemprop' => 'image' ) ),
|
||
|
get_the_ID(),
|
||
|
$image_id,
|
||
|
apply_filters( 'generate_page_header_default_size', 'full' ),
|
||
|
''
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// Values when to ignore crop
|
||
|
$ignore_crop = array( '', '0', '9999' );
|
||
|
|
||
|
// Set our image attributes
|
||
|
$image_atts = array(
|
||
|
'width' => ( in_array( $options[ 'image_width' ], $ignore_crop ) ) ? 9999 : absint( $options[ 'image_width' ] ),
|
||
|
'height' => ( in_array( $options[ 'image_height' ], $ignore_crop ) ) ? 9999 : absint( $options[ 'image_height' ] ),
|
||
|
'crop' => ( in_array( $options[ 'image_width' ], $ignore_crop ) || in_array( $options[ 'image_height' ], $ignore_crop ) ) ? false : true
|
||
|
);
|
||
|
|
||
|
if ( ! empty( $image_atts ) ) {
|
||
|
// If there's no height or width, empty the array
|
||
|
if ( 9999 == $image_atts[ 'width' ] && 9999 == $image_atts[ 'height' ] ) {
|
||
|
$image_atts = array();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $image_atts ) && 'enable' == $options[ 'image_resize' ] && function_exists( 'ipq_get_theme_image' ) ) {
|
||
|
return ipq_get_theme_image( $image_id, array( array( $image_atts[ 'width' ], $image_atts[ 'height' ], $image_atts[ 'crop' ] ) ) );
|
||
|
} else {
|
||
|
return apply_filters( 'post_thumbnail_html',
|
||
|
wp_get_attachment_image( $image_id, apply_filters( 'generate_page_header_default_size', 'full' ), '', array( 'itemprop' => 'image' ) ),
|
||
|
get_the_ID(),
|
||
|
$image_id,
|
||
|
apply_filters( 'generate_page_header_default_size', 'full' ),
|
||
|
''
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_combined_page_header_start' ) ) {
|
||
|
add_action( 'generate_inside_merged_page_header', 'generate_combined_page_header_start', 0 );
|
||
|
/**
|
||
|
* Add our generate-combined-header class into the page header.
|
||
|
*
|
||
|
* This makes the header use position:absolute and places it on top
|
||
|
* of the content below it.
|
||
|
*/
|
||
|
function generate_combined_page_header_start() {
|
||
|
$options = generate_page_header_get_options();
|
||
|
|
||
|
if ( '' == $options[ 'merge' ] || '' == $options[ 'content' ] || '' == $options[ 'absolute' ] ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
echo '<div class="generate-combined-header">';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_combined_page_header_end' ) ) {
|
||
|
add_action( 'generate_after_header', 'generate_combined_page_header_end', 9 );
|
||
|
/**
|
||
|
* End our generate-combined-header element
|
||
|
*/
|
||
|
function generate_combined_page_header_end() {
|
||
|
$options = generate_page_header_get_options();
|
||
|
|
||
|
if ( '' == $options[ 'merge' ] || '' == $options[ 'content' ] || '' == $options[ 'absolute' ] ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
echo '</div><!-- .generate-combined-header -->';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_enqueue' ) ) {
|
||
|
add_action( 'wp_enqueue_scripts', 'generate_page_header_enqueue' );
|
||
|
/**
|
||
|
* Add our scripts
|
||
|
*/
|
||
|
function generate_page_header_enqueue() {
|
||
|
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
||
|
$options = generate_page_header_get_options();
|
||
|
|
||
|
if ( ! empty( $options[ 'full_screen' ] ) && '' !== $options[ 'content' ] ) {
|
||
|
wp_enqueue_script( 'generate-page-header-full-height', plugin_dir_url( __FILE__ ) . "js/full-height{$suffix}.js", array('jquery'), GENERATE_PAGE_HEADER_VERSION, true );
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $options[ 'parallax' ] ) && '' !== $options[ 'content' ] ) {
|
||
|
wp_enqueue_script( 'generate-page-header-parallax', plugin_dir_url( __FILE__ ) . "js/parallax{$suffix}.js", array(), GENERATE_PAGE_HEADER_VERSION, true );
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $options[ 'background_video' ] ) && '' !== $options[ 'content' ] ) {
|
||
|
wp_enqueue_script( 'generate-page-header-video', plugin_dir_url( __FILE__ ) . "js/jquery.vide.min.js", array('jquery'), GENERATE_PAGE_HEADER_VERSION, true );
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $options[ 'content' ] ) ) {
|
||
|
wp_enqueue_style( 'generate-page-header', plugin_dir_url( __FILE__ ) . "css/page-header{$suffix}.css", array(), GENERATE_PAGE_HEADER_VERSION );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_css' ) ) {
|
||
|
/**
|
||
|
* Generate the CSS in the <head> section using the Theme Customizer.
|
||
|
*
|
||
|
* @since 0.1
|
||
|
*/
|
||
|
function generate_page_header_css() {
|
||
|
// Get our options
|
||
|
$options = generate_page_header_get_options();
|
||
|
|
||
|
// If we don't have any content, we don't need any of the below
|
||
|
if ( empty( $options[ 'content' ] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// See if we have a video
|
||
|
$video = ( empty( $options[ 'background_video' ] ) && empty( $options[ 'background_video_ogv' ] ) && empty( $options[ 'background_video_webm' ] ) ) ? false : true;
|
||
|
|
||
|
// Figure out our background color
|
||
|
if ( '' !== $options[ 'background_video_overlay' ] && $options[ 'background_video' ] ) {
|
||
|
if ( substr( $options[ 'background_video_overlay' ], 0, 4 ) === "rgba" ) {
|
||
|
$background_color = $options[ 'background_video_overlay' ];
|
||
|
} else {
|
||
|
$background_color = generate_page_header_hex2rgba( $options[ 'background_video_overlay' ], apply_filters( 'generate_page_header_video_overlay', 0.7 ) ) . ' !important';
|
||
|
}
|
||
|
} elseif ( !empty( $options[ 'background_color' ] ) && ! $video ) {
|
||
|
$background_color = $options[ 'background_color' ];
|
||
|
} else {
|
||
|
$background_color = null;
|
||
|
}
|
||
|
|
||
|
// Get our image URL
|
||
|
$image_url = generate_page_header_get_image( 'URL' );
|
||
|
|
||
|
// Check if we have a background image overlay
|
||
|
$background_overlay = ! empty( $options[ 'background_image' ] ) && ! empty( $background_color ) && ! empty( $options[ 'background_overlay' ] ) ? true : false;
|
||
|
|
||
|
$background_image = null;
|
||
|
if ( ! empty( $options[ 'background_image' ] ) && ! $background_overlay && false == $video ) {
|
||
|
$background_image = 'url(' . $image_url . ')';
|
||
|
}
|
||
|
|
||
|
if ( $background_overlay && ! $video ) {
|
||
|
$background_image = 'linear-gradient(0deg, ' . $background_color . ',' . $background_color . '), url(' . $image_url . ')';
|
||
|
}
|
||
|
|
||
|
// Initiate our CSS class
|
||
|
require_once GP_LIBRARY_DIRECTORY . 'class-make-css.php';
|
||
|
$css = new GeneratePress_Pro_CSS;
|
||
|
|
||
|
// Page Header container
|
||
|
$css->set_selector( '.generate-content-header' );
|
||
|
|
||
|
if ( ! $background_overlay || $video ) {
|
||
|
$css->add_property( 'background-color', esc_attr( $background_color ) );
|
||
|
}
|
||
|
|
||
|
$css->add_property( 'background-image', $background_image );
|
||
|
|
||
|
if ( ! empty( $options[ 'parallax' ] ) ) {
|
||
|
$css->add_property( 'background-position', 'center top' );
|
||
|
} else {
|
||
|
$css->add_property( 'background-position', 'center center' );
|
||
|
}
|
||
|
|
||
|
// Merged header container
|
||
|
if ( '' !== $options[ 'merge' ] && ! empty( $options[ 'full_screen' ] ) ) {
|
||
|
$css->set_selector( '.generate-combined-page-header' );
|
||
|
$css->add_property( 'height', '100vh !important' );
|
||
|
}
|
||
|
|
||
|
// Remove the top margin from the container
|
||
|
if ( 'fluid' == $options[ 'container_type' ] || '' !== $options[ 'merge' ] ) {
|
||
|
$css->set_selector( '.separate-containers .generate-content-header.generate-page-header' );
|
||
|
$css->add_property( 'margin-top', '0px' );
|
||
|
}
|
||
|
|
||
|
// Remove the content background color if an image or color is set
|
||
|
$css->set_selector( '.inside-page-header' );
|
||
|
if ( ! empty( $options[ 'background_image' ] ) || ! empty( $options[ 'background_color' ] ) ) {
|
||
|
$css->add_property( 'background-color', 'transparent' );
|
||
|
}
|
||
|
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'text_color' ] ) );
|
||
|
|
||
|
// Add the page header content atts
|
||
|
$css->set_selector( '.page-header-content-container' );
|
||
|
$css->add_property( 'text-align', esc_attr( $options[ 'alignment' ] ) );
|
||
|
|
||
|
if ( ! empty( $options[ 'padding' ] ) ) {
|
||
|
$padding_unit = ( '%' == $options[ 'padding_unit' ] || 'percent' == $options[ 'padding_unit' ] ) ? '%' : 'px';
|
||
|
$css->add_property( 'padding-top', absint( $options[ 'padding' ] ) . $padding_unit );
|
||
|
$css->add_property( 'padding-bottom', absint( $options[ 'padding' ] ) . $padding_unit );
|
||
|
}
|
||
|
|
||
|
if ( isset( $options[ 'x_padding_unit' ] ) && ! empty( $options[ 'x_padding' ] ) ) {
|
||
|
$x_padding_unit = ( '%' == $options[ 'x_padding_unit' ] || 'percent' == $options[ 'x_padding_unit' ] ) ? '%' : 'px';
|
||
|
$css->add_property( 'padding-left', absint( $options[ 'x_padding' ] ) . $x_padding_unit );
|
||
|
$css->add_property( 'padding-right', absint( $options[ 'x_padding' ] ) . $x_padding_unit );
|
||
|
}
|
||
|
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'text_color' ] ) );
|
||
|
|
||
|
// Set the content links
|
||
|
$css->set_selector( '.page-header-content-container a:not(.button), .page-header-content-container a:not(.button):visited' );
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'link_color' ] ) );
|
||
|
|
||
|
$css->set_selector( '.page-header-content-container a:not(.button):hover, .page-header-content-container a:not(.button):active' );
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'link_color_hover' ] ) );
|
||
|
|
||
|
// Headings
|
||
|
$css->set_selector( '.page-header-content-container h1, .page-header-content-container h2, .page-header-content-container h3, .page-header-content-container h4, .page-header-content-container h5' );
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'text_color' ] ) );
|
||
|
|
||
|
// Set box-sizing if merged and contained
|
||
|
$css->set_selector( '.generate-merged-header .inside-header' );
|
||
|
if ( '' !== $options[ 'merge' ] && 'fluid' !== $options[ 'container_type' ] ) {
|
||
|
$css->add_property( '-moz-box-sizing', 'border-box' );
|
||
|
$css->add_property( '-webkit-box-sizing', 'border-box' );
|
||
|
$css->add_property( 'box-sizing', 'border-box' );
|
||
|
}
|
||
|
|
||
|
// Remove the header background if we're merged
|
||
|
if ( '' !== $options[ 'merge' ] ) {
|
||
|
$css->set_selector( '.generate-merged-header .site-header' );
|
||
|
$css->add_property( 'background', 'transparent' );
|
||
|
}
|
||
|
|
||
|
if ( '' !== $options[ 'custom_menu_colors' ] ) {
|
||
|
// The menu background color
|
||
|
$css->set_selector( '.generate-merged-header .main-navigation:not(.is_stuck):not(.toggled):not(.mobile-header-navigation)' );
|
||
|
$menu_background_color = ( '' == $options[ 'menu_background_color' ] ) ? 'transparent' : $options[ 'menu_background_color' ];
|
||
|
$css->add_property( 'background', $menu_background_color );
|
||
|
|
||
|
// The menu item text color
|
||
|
$css->set_selector( '.generate-merged-header #site-navigation:not(.toggled) .main-nav > ul > li > a, .generate-merged-header #site-navigation:not(.toggled) .menu-toggle,.generate-merged-header #site-navigation:not(.toggled) .menu-toggle:hover,.generate-merged-header #site-navigation:not(.toggled) .menu-toggle:focus,.generate-merged-header #site-navigation:not(.toggled) .mobile-bar-items a, .generate-merged-header #site-navigation:not(.toggled) .mobile-bar-items a:hover, .generate-merged-header #site-navigation:not(.toggled) .mobile-bar-items a:focus' );
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'menu_text_color' ] ) );
|
||
|
|
||
|
// The menu item hover background/text color
|
||
|
$css->set_selector( '.generate-merged-header #site-navigation:not(.toggled) .main-nav > ul > li:hover > a, .generate-merged-header #site-navigation:not(.toggled) .main-nav > ul > li:focus > a, .generate-merged-header #site-navigation:not(.toggled) .main-nav > ul > li.sfHover > a' );
|
||
|
if ( '' == $options[ 'menu_background_color_hover' ] ) {
|
||
|
$css->add_property( 'background', $menu_background_color );
|
||
|
} else {
|
||
|
$css->add_property( 'background', $options[ 'menu_background_color_hover' ] );
|
||
|
}
|
||
|
|
||
|
if ( '' !== $options[ 'menu_text_color_hover' ] ) {
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'menu_text_color_hover' ] ) );
|
||
|
} else {
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'menu_text_color' ] ) );
|
||
|
}
|
||
|
|
||
|
// The current menu item background/text color
|
||
|
$css->set_selector( '.generate-merged-header #site-navigation:not(.toggled) .main-nav > ul > li[class*="current-menu-"] > a, .generate-merged-header #site-navigation:not(.toggled) .main-nav > ul > li[class*="current-menu-"]:hover > a' );
|
||
|
if ( '' == $options[ 'menu_background_current' ] ) {
|
||
|
$css->add_property( 'background', $menu_background_color );
|
||
|
} else {
|
||
|
$css->add_property( 'background', $options[ 'menu_background_current' ] );
|
||
|
}
|
||
|
|
||
|
if ( '' !== $options[ 'menu_text_current' ] ) {
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'menu_text_current' ] ) );
|
||
|
} else {
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'menu_text_color' ] ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// The site title color
|
||
|
$css->set_selector( '.generate-merged-header .main-title a, .generate-merged-header .main-title a:hover, .generate-merged-header .main-title a:visited' );
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'site_title_color' ] ) );
|
||
|
|
||
|
// The site tagline color
|
||
|
$css->set_selector( '.generate-merged-header .site-description' );
|
||
|
$css->add_property( 'color', esc_attr( $options[ 'site_tagline_color' ] ) );
|
||
|
|
||
|
return $css->css_output();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_enqueue_scripts' ) ) {
|
||
|
add_action( 'wp_enqueue_scripts', 'generate_page_header_enqueue_scripts', 100 );
|
||
|
/**
|
||
|
* Enqueue scripts and styles
|
||
|
*/
|
||
|
function generate_page_header_enqueue_scripts() {
|
||
|
wp_add_inline_style( 'generate-style', generate_page_header_css() );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
add_filter( 'generate_page_header_location','generate_page_header_force_above_content' );
|
||
|
/**
|
||
|
* Forces the page header to be above the content/below the header if it's set
|
||
|
* to merge or full width.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function generate_page_header_force_above_content( $location ) {
|
||
|
$options = generate_page_header_get_options();
|
||
|
|
||
|
if ( '' !== $options[ 'merge' ] && '' !== $options[ 'content' ] ) {
|
||
|
$location = 'above-content';
|
||
|
}
|
||
|
|
||
|
if ( 'fluid' == $options[ 'container_type' ] ) {
|
||
|
$location = 'above-content';
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( get_the_ID(), '_generate_use_sections', true ) ) {
|
||
|
$location = 'above-content';
|
||
|
}
|
||
|
|
||
|
return $location;
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_combined' ) ) {
|
||
|
add_action( 'generate_before_header', 'generate_page_header_combined', 5 );
|
||
|
/**
|
||
|
* Add the start to our page header containers if we're using a merged header
|
||
|
*
|
||
|
* Doing this allows us to actually wrap the header in our page header element
|
||
|
* instead of just making the header position: absolute.
|
||
|
*/
|
||
|
function generate_page_header_combined() {
|
||
|
// Get our options
|
||
|
$options = generate_page_header_get_options();
|
||
|
|
||
|
// Bail if merge isn't activated
|
||
|
if ( '' == $options[ 'merge' ] ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Bail if we're on a single post and it's set to hide
|
||
|
if ( 'hide' == generate_get_page_header_location() ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
generate_page_header_area_start_container( 'page-header-image', 'page-header-content' );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header' ) ) {
|
||
|
/**
|
||
|
* Add page header above content
|
||
|
*
|
||
|
* @since 0.3
|
||
|
*/
|
||
|
function generate_page_header() {
|
||
|
$image_class = 'page-header-image';
|
||
|
$content_class = 'page-header-content';
|
||
|
|
||
|
if ( is_single() ) {
|
||
|
$image_class = 'page-header-image-single';
|
||
|
$content_class = 'page-header-content-single';
|
||
|
|
||
|
if ( 'below-title' == generate_get_page_header_location() ) {
|
||
|
$image_class = 'page-header-image-single page-header-below-title';
|
||
|
$content_class = 'page-header-content-single page-header-below-title';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
generate_page_header_area( $image_class, $content_class );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_get_defaults' ) ) {
|
||
|
/**
|
||
|
* Set default options for the Customizer
|
||
|
*
|
||
|
* These are mainly for the Blog Page Header options.
|
||
|
*/
|
||
|
function generate_page_header_get_defaults() {
|
||
|
$generate_page_header_defaults = array(
|
||
|
'page_header_position' => 'above-content',
|
||
|
'post_header_position' => 'inside-content',
|
||
|
'page_header_image' => '',
|
||
|
'page_header_logo' => '',
|
||
|
'page_header_navigation_logo' => '',
|
||
|
'page_header_url' => '',
|
||
|
'page_header_hard_crop' => 'disable',
|
||
|
'page_header_image_width' => '1200',
|
||
|
'page_header_image_height' => '0',
|
||
|
'page_header_content' => '',
|
||
|
'page_header_add_paragraphs' => '0',
|
||
|
'page_header_add_padding' => '0',
|
||
|
'page_header_image_background' => '0',
|
||
|
'page_header_add_parallax' => '0',
|
||
|
'page_header_full_screen' => '0',
|
||
|
'page_header_vertical_center' => '0',
|
||
|
'page_header_container_type' => '',
|
||
|
'page_header_text_alignment' => 'left',
|
||
|
'page_header_padding' => '',
|
||
|
'page_header_padding_unit' => '',
|
||
|
'page_header_background_color' => '',
|
||
|
'page_header_text_color' => '',
|
||
|
'page_header_link_color' => '',
|
||
|
'page_header_link_color_hover' => '',
|
||
|
'page_header_video' => '',
|
||
|
'page_header_video_ogv' => '',
|
||
|
'page_header_video_webm' => '',
|
||
|
'page_header_video_overlay' => '',
|
||
|
'page_header_combine' => '',
|
||
|
'page_header_absolute_position' => '',
|
||
|
'page_header_site_title' => '',
|
||
|
'page_header_site_tagline' => '',
|
||
|
'page_header_transparent_navigation' => '',
|
||
|
'page_header_navigation_text' => '',
|
||
|
'page_header_navigation_background_hover' => '',
|
||
|
'page_header_navigation_text_hover' => '',
|
||
|
'page_header_navigation_background_current' => '',
|
||
|
'page_header_navigation_text_current' => ''
|
||
|
);
|
||
|
|
||
|
return apply_filters( 'generate_page_header_option_defaults', $generate_page_header_defaults );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_customize_register' ) ) {
|
||
|
add_action( 'customize_register', 'generate_page_header_customize_register', 100 );
|
||
|
/**
|
||
|
* Add our page header layout Customizer settings.
|
||
|
* Would like to revamp these.
|
||
|
*/
|
||
|
function generate_page_header_customize_register( $wp_customize ) {
|
||
|
// Get our defaults
|
||
|
$defaults = generate_page_header_get_defaults();
|
||
|
|
||
|
// Get our Customizer helpers
|
||
|
require_once GP_LIBRARY_DIRECTORY . 'customizer-helpers.php';
|
||
|
|
||
|
// Use the Layout panel in the free theme if it exists
|
||
|
if ( $wp_customize->get_panel( 'generate_layout_panel' ) ) {
|
||
|
$section = 'generate_layout_page_header';
|
||
|
$wp_customize->add_section(
|
||
|
'generate_layout_page_header',
|
||
|
array(
|
||
|
'title' => __( 'Page Header', 'gp-premium' ),
|
||
|
'capability' => 'edit_theme_options',
|
||
|
'priority' => 35,
|
||
|
'panel' => 'generate_layout_panel'
|
||
|
)
|
||
|
);
|
||
|
} else {
|
||
|
$section = 'layout_section';
|
||
|
}
|
||
|
|
||
|
$wp_customize->add_setting(
|
||
|
'generate_page_header_settings[page_header_position]',
|
||
|
array(
|
||
|
'default' => $defaults['page_header_position'],
|
||
|
'type' => 'option',
|
||
|
'sanitize_callback' => 'generate_premium_sanitize_choices'
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// Location
|
||
|
$wp_customize->add_control(
|
||
|
'generate_page_header_settings[page_header_position]',
|
||
|
array(
|
||
|
'type' => 'select',
|
||
|
'label' => __( 'Page Header Location', 'gp-premium' ),
|
||
|
'section' => $section,
|
||
|
'choices' => array(
|
||
|
'above-content' => __( 'Above Content Area', 'gp-premium' ),
|
||
|
'inside-content' => __( 'Inside Content Area', 'gp-premium' )
|
||
|
),
|
||
|
'settings' => 'generate_page_header_settings[page_header_position]',
|
||
|
'priority' => 100
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$wp_customize->add_setting(
|
||
|
'generate_page_header_settings[post_header_position]',
|
||
|
array(
|
||
|
'default' => $defaults['post_header_position'],
|
||
|
'type' => 'option',
|
||
|
'sanitize_callback' => 'generate_premium_sanitize_choices'
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// Single post header location
|
||
|
$wp_customize->add_control(
|
||
|
'generate_page_header_settings[post_header_position]',
|
||
|
array(
|
||
|
'type' => 'select',
|
||
|
'label' => __( 'Single Post Header Location', 'gp-premium' ),
|
||
|
'section' => $section,
|
||
|
'choices' => array(
|
||
|
'above-content' => __( 'Above Content Area', 'gp-premium' ),
|
||
|
'inside-content' => __( 'Inside Content Area', 'gp-premium' ),
|
||
|
'below-title' => __( 'Below Post Title', 'gp-premium' ),
|
||
|
'hide' => __( 'Hide', 'gp-premium' )
|
||
|
),
|
||
|
'settings' => 'generate_page_header_settings[post_header_position]',
|
||
|
'priority' => 101
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_get_attachment_id_by_url' ) ) {
|
||
|
/**
|
||
|
* Return an ID of an attachment by searching the database with the file URL.
|
||
|
*
|
||
|
* First checks to see if the $url is pointing to a file that exists in
|
||
|
* the wp-content directory. If so, then we search the database for a
|
||
|
* partial match consisting of the remaining path AFTER the wp-content
|
||
|
* directory. Finally, if a match is found the attachment ID will be
|
||
|
* returned.
|
||
|
*
|
||
|
* @param string $url The URL of the image (ex: http://mysite.com/wp-content/uploads/2013/05/test-image.jpg)
|
||
|
*
|
||
|
* @return int|null $attachment Returns an attachment ID, or null if no attachment is found
|
||
|
*/
|
||
|
function generate_get_attachment_id_by_url( $attachment_url = '' ) {
|
||
|
global $wpdb;
|
||
|
|
||
|
$attachment_id = false;
|
||
|
|
||
|
// If there is no url, return.
|
||
|
if ( '' == $attachment_url ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Get the upload directory paths
|
||
|
$upload_dir_paths = wp_upload_dir();
|
||
|
|
||
|
// Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image
|
||
|
if ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {
|
||
|
|
||
|
// If this is the URL of an auto-generated thumbnail, get the URL of the original image
|
||
|
$attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );
|
||
|
|
||
|
// Remove the upload path base directory from the attachment URL
|
||
|
$attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );
|
||
|
|
||
|
// Finally, run a custom database query to get the attachment ID from the modified attachment URL
|
||
|
$attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) );
|
||
|
|
||
|
}
|
||
|
|
||
|
return $attachment_id;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_hex2rgba' ) ) {
|
||
|
/**
|
||
|
* Convert hex to RGBA
|
||
|
*/
|
||
|
function generate_page_header_hex2rgba( $color, $opacity = false ) {
|
||
|
$default = 'rgb(0,0,0)';
|
||
|
|
||
|
// Return default if no color provided
|
||
|
if ( empty( $color ) ) {
|
||
|
return $default;
|
||
|
}
|
||
|
|
||
|
// Sanitize $color if "#" is provided
|
||
|
if ( $color[0] == '#' ) {
|
||
|
$color = substr( $color, 1 );
|
||
|
}
|
||
|
|
||
|
// Check if color has 6 or 3 characters and get values
|
||
|
if ( strlen( $color ) == 6 ) {
|
||
|
$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
|
||
|
} elseif ( strlen( $color ) == 3 ) {
|
||
|
$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
|
||
|
} else {
|
||
|
return $default;
|
||
|
}
|
||
|
|
||
|
// Convert hexadec to rgb
|
||
|
$rgb = array_map( 'hexdec', $hex );
|
||
|
|
||
|
// Check if opacity is set(rgba or rgb)
|
||
|
if ( $opacity ) {
|
||
|
if ( abs( $opacity ) > 1 ) {
|
||
|
$opacity = 1.0;
|
||
|
}
|
||
|
$output = 'rgba(' . implode( ",", $rgb ) . ',' . $opacity . ')';
|
||
|
} else {
|
||
|
$output = 'rgb('.implode( ",", $rgb ).')';
|
||
|
}
|
||
|
|
||
|
//Return rgb(a) color string
|
||
|
return $output;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_replace_logo' ) ) {
|
||
|
/**
|
||
|
* Check to see if we should replace our logo
|
||
|
* Utlilised in generate_page_header_setup()
|
||
|
*/
|
||
|
function generate_page_header_replace_logo( $logo ) {
|
||
|
if ( generate_page_header_logo_exists() ) {
|
||
|
$options = generate_page_header_get_options();
|
||
|
return $options[ 'logo_url' ];
|
||
|
}
|
||
|
|
||
|
return $logo;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_replace_navigation_logo' ) ) {
|
||
|
/**
|
||
|
* Check to see if we should replace our navigation logo
|
||
|
* Utlilised in generate_page_header_setup()
|
||
|
*/
|
||
|
function generate_page_header_replace_navigation_logo( $logo ) {
|
||
|
if ( generate_page_header_navigation_logo_exists() ) {
|
||
|
$options = generate_page_header_get_options();
|
||
|
return $options[ 'navigation_logo_url' ];
|
||
|
}
|
||
|
|
||
|
return $logo;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_logo_exists' ) ) {
|
||
|
/**
|
||
|
* This is an active_callback
|
||
|
* Check if our page header logo exists
|
||
|
*/
|
||
|
function generate_page_header_logo_exists() {
|
||
|
if ( function_exists( 'generate_get_defaults' ) ) {
|
||
|
$generate_settings = wp_parse_args(
|
||
|
get_option( 'generate_settings', array() ),
|
||
|
generate_get_defaults()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if ( function_exists( 'generate_construct_logo' ) && ( '' !== $generate_settings[ 'logo' ] || get_theme_mod( 'custom_logo' ) ) ) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! function_exists( 'generate_page_header_navigation_logo_exists' ) ) {
|
||
|
/**
|
||
|
* This is an active_callback
|
||
|
* Check if our page header logo exists
|
||
|
*/
|
||
|
function generate_page_header_navigation_logo_exists() {
|
||
|
if ( function_exists( 'generate_menu_plus_get_defaults' ) ) {
|
||
|
$generate_menu_plus_settings = wp_parse_args(
|
||
|
get_option( 'generate_menu_plus_settings', array() ),
|
||
|
generate_menu_plus_get_defaults()
|
||
|
);
|
||
|
|
||
|
if ( '' !== $generate_menu_plus_settings[ 'sticky_menu_logo' ] ) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets our set page header location and filters it.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function generate_get_page_header_location() {
|
||
|
$generate_page_header_settings = wp_parse_args(
|
||
|
get_option( 'generate_page_header_settings', array() ),
|
||
|
generate_page_header_get_defaults()
|
||
|
);
|
||
|
|
||
|
$location = $generate_page_header_settings['page_header_position'];
|
||
|
|
||
|
if ( is_single() ) {
|
||
|
$location = $generate_page_header_settings['post_header_position'];
|
||
|
}
|
||
|
|
||
|
return apply_filters( 'generate_page_header_location', $location );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Searches for template tags in the content and replaces them with
|
||
|
* their respective functions.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*
|
||
|
* @param $content The content to look through.
|
||
|
* @return string The resulting content.
|
||
|
*/
|
||
|
function generate_page_header_template_tags( $content ) {
|
||
|
$search = array();
|
||
|
$replace = array();
|
||
|
|
||
|
$search[] = '{{post_title}}';
|
||
|
if ( is_singular() ) {
|
||
|
$replace[] = get_the_title();
|
||
|
} elseif ( is_tax() || is_category() || is_tag() ) {
|
||
|
$replace[] = get_queried_object()->name;
|
||
|
}
|
||
|
|
||
|
if ( is_singular() ) {
|
||
|
// Date
|
||
|
$time_string = '<time class="entry-date published" datetime="%1$s" itemprop="datePublished">%2$s</time>';
|
||
|
if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
|
||
|
$time_string .= '<time class="updated" datetime="%3$s" itemprop="dateModified" style="display:none;">%4$s</time>';
|
||
|
}
|
||
|
|
||
|
$time_string = sprintf( $time_string,
|
||
|
esc_attr( get_the_date( 'c' ) ),
|
||
|
esc_html( get_the_date() ),
|
||
|
esc_attr( get_the_modified_date( 'c' ) ),
|
||
|
esc_html( get_the_modified_date() )
|
||
|
);
|
||
|
|
||
|
$date = sprintf( '<a href="%1$s" title="%2$s" rel="bookmark">%3$s</a>',
|
||
|
esc_url( get_permalink() ),
|
||
|
esc_attr( get_the_time() ),
|
||
|
$time_string
|
||
|
);
|
||
|
|
||
|
$search[] = '{{post_date}}';
|
||
|
$replace[] = $date;
|
||
|
|
||
|
// Author
|
||
|
global $post;
|
||
|
$author_id = $post->post_author;
|
||
|
|
||
|
$author = sprintf( '<span class="author vcard" itemtype="http://schema.org/Person" itemscope="itemscope" itemprop="author"><a class="url fn n" href="%1$s" title="%2$s" rel="author" itemprop="url"><span class="author-name" itemprop="name">%3$s</span></a></span>',
|
||
|
esc_url( get_author_posts_url( $author_id ) ),
|
||
|
esc_attr( sprintf( __( 'View all posts by %s', 'gp-premium' ), get_the_author_meta( 'display_name', $author_id ) ) ),
|
||
|
esc_html( get_the_author_meta( 'display_name', $author_id ) )
|
||
|
);
|
||
|
|
||
|
$search[] = '{{post_author}}';
|
||
|
$replace[] = $author;
|
||
|
|
||
|
// Post terms
|
||
|
if ( strpos( $content, '{{post_terms' ) !== false ) {
|
||
|
$data = preg_match_all( '/{{post_terms.([^}]*)}}/', $content, $matches );
|
||
|
foreach ( $matches[1] as $match ) {
|
||
|
$search[] = '{{post_terms.' . $match . '}}';
|
||
|
$replace[] = get_the_term_list( get_the_ID(), $match, apply_filters( 'generate_page_header_terms_before', '' ), apply_filters( 'generate_page_header_terms_separator', ', ' ), apply_filters( 'generate_page_header_terms_after', '' ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Custom field
|
||
|
if ( strpos( $content, '{{custom_field' ) !== false ) {
|
||
|
$data = preg_match_all( '/{{custom_field.([^}]*)}}/', $content, $matches );
|
||
|
foreach ( $matches[1] as $match ) {
|
||
|
if ( null !== get_post_meta( get_the_ID(), $match, true ) && '_thumbnail_id' !== $match ) {
|
||
|
$search[] = '{{custom_field.' . $match . '}}';
|
||
|
$replace[] = get_post_meta( get_the_ID(), $match, true );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$thumbnail_id = get_post_meta( get_the_ID(), '_thumbnail_id', true );
|
||
|
if ( null !== $thumbnail_id ) {
|
||
|
$search[] = '{{custom_field._thumbnail_id}}';
|
||
|
$replace[] = wp_get_attachment_image( $thumbnail_id, apply_filters( 'generate_page_header_thumbnail_id_size', 'medium' ) );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Taxonomy description
|
||
|
if ( is_tax() || is_category() || is_tag() ) {
|
||
|
if ( strpos( $content, '{{custom_field' ) !== false ) {
|
||
|
$search[] = '{{custom_field.description}}';
|
||
|
$replace[] = term_description( get_queried_object()->term_id, get_queried_object()->taxonomy );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return str_replace( $search, $replace, $content );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* When the post title, author or date are in the Page Header, they appear outside of the
|
||
|
* hentry element. This causes errors in Google Search Console.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
*
|
||
|
* @param array $classes
|
||
|
* @return array
|
||
|
*/
|
||
|
function generate_page_header_remove_hentry( $classes ) {
|
||
|
$classes = array_diff( $classes, array( 'hentry' ) );
|
||
|
|
||
|
return $classes;
|
||
|
}
|
||
|
|
||
|
add_action( 'admin_init', 'generate_page_header_transfer_blog_header' );
|
||
|
/**
|
||
|
* Transfers any blog page header settings from the Customizer into a new page header.
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function generate_page_header_transfer_blog_header() {
|
||
|
// Get our migration settings
|
||
|
$migration_settings = get_option( 'generate_migration_settings', array() );
|
||
|
|
||
|
// If we've already ran this function, bail
|
||
|
if ( isset( $migration_settings[ 'blog_page_header' ] ) && 'true' == $migration_settings[ 'blog_page_header' ] ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$settings = wp_parse_args(
|
||
|
get_option( 'generate_page_header_options', array() ),
|
||
|
generate_page_header_get_defaults()
|
||
|
);
|
||
|
|
||
|
$defaults = generate_page_header_get_defaults();
|
||
|
|
||
|
if ( '' !== $settings[ 'page_header_image' ] ) {
|
||
|
if ( function_exists( 'attachment_url_to_postid' ) ) {
|
||
|
$image = attachment_url_to_postid( esc_url( $settings[ 'page_header_image' ] ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! isset( $image ) ) {
|
||
|
$image = $settings[ 'page_header_image' ];
|
||
|
}
|
||
|
|
||
|
$meta = array(
|
||
|
'_thumbnail_id' => is_int( $image ) ? $image : '',
|
||
|
'_meta-generate-page-header-image' => ! is_int( $image ) ? $settings[ 'page_header_image' ] : '',
|
||
|
'_meta-generate-page-header-image-id' => '',
|
||
|
'_meta-generate-page-header-image-link' => $settings[ 'page_header_url' ],
|
||
|
'_meta-generate-page-header-enable-image-crop' => 'disable' == $settings[ 'page_header_hard_crop' ] ? '' : $settings[ 'page_header_hard_crop' ],
|
||
|
'_meta-generate-page-header-image-width' => ! $image || '' == $image ? '' : $settings[ 'page_header_image_width' ],
|
||
|
'_meta-generate-page-header-image-height' => ! $image || '' == $image ? '' : $settings[ 'page_header_image_height' ],
|
||
|
'_meta-generate-page-header-content' => $settings[ 'page_header_content' ],
|
||
|
'_meta-generate-page-header-content-autop' => $settings[ 'page_header_add_paragraphs' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-content-padding' => $settings[ 'page_header_add_padding' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-image-background' => $settings[ 'page_header_image_background' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-image-background-type' => $settings[ 'page_header_container_type' ],
|
||
|
'_meta-generate-page-header-image-background-fixed' => $settings[ 'page_header_add_parallax' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-full-screen' => $settings[ 'page_header_full_screen' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-vertical-center' => $settings[ 'page_header_vertical_center' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-image-background-alignment' => 'left' == $settings[ 'page_header_text_alignment' ] ? '' : $settings[ 'page_header_text_alignment' ],
|
||
|
'_meta-generate-page-header-image-background-spacing' => $settings[ 'page_header_padding' ],
|
||
|
'_meta-generate-page-header-image-background-spacing-unit' => 'percent' == $settings[ 'page_header_padding_unit' ] ? '%' : '',
|
||
|
'_meta-generate-page-header-image-background-text-color' => $settings[ 'page_header_text_color' ],
|
||
|
'_meta-generate-page-header-image-background-color' => $settings[ 'page_header_background_color' ],
|
||
|
'_meta-generate-page-header-image-background-link-color' => $settings[ 'page_header_link_color' ],
|
||
|
'_meta-generate-page-header-image-background-link-color-hover' => $settings[ 'page_header_link_color_hover' ],
|
||
|
'_meta-generate-page-header-combine' => $settings[ 'page_header_combine' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-absolute-position' => $settings[ 'page_header_absolute_position' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-transparent-navigation' => $settings[ 'page_header_transparent_navigation' ] ? 'yes' : '',
|
||
|
'_meta-generate-page-header-navigation-text' => $settings[ 'page_header_navigation_text' ],
|
||
|
'_meta-generate-page-header-site-title' => $settings[ 'page_header_site_title' ],
|
||
|
'_meta-generate-page-header-site-tagline' => $settings[ 'page_header_site_tagline' ],
|
||
|
'_meta-generate-page-header-navigation-background-hover' => $settings[ 'page_header_navigation_background_hover' ],
|
||
|
'_meta-generate-page-header-navigation-text-hover' => $settings[ 'page_header_navigation_text_hover' ],
|
||
|
'_meta-generate-page-header-navigation-background-current' => $settings[ 'page_header_navigation_background_current' ],
|
||
|
'_meta-generate-page-header-navigation-text-current' => $settings[ 'page_header_navigation_text_current' ],
|
||
|
'_meta-generate-page-header-video' => $settings[ 'page_header_video' ],
|
||
|
'_meta-generate-page-header-video-ogv' => $settings[ 'page_header_video_ogv' ],
|
||
|
'_meta-generate-page-header-video-webm' => $settings[ 'page_header_video_webm' ],
|
||
|
'_meta-generate-page-header-video-overlay' => $settings[ 'page_header_video_overlay' ],
|
||
|
'_meta-generate-page-header-logo' => $settings[ 'page_header_logo' ],
|
||
|
'_meta-generate-page-header-logo-id' => '',
|
||
|
'_meta-generate-page-header-navigation-logo' => $settings[ 'page_header_navigation_logo' ],
|
||
|
'_meta-generate-page-header-navigation-logo-id' => '',
|
||
|
);
|
||
|
|
||
|
// Strip empty values (but keep 0s)
|
||
|
$meta = array_filter( $meta, 'strlen' );
|
||
|
|
||
|
if ( empty( $meta ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$blog_page_header = array(
|
||
|
'post_title' => 'Blog Page Header',
|
||
|
'post_type' => 'generate_page_header',
|
||
|
'post_status' => 'publish',
|
||
|
'meta_input' => $meta
|
||
|
);
|
||
|
|
||
|
$page_exists = get_page_by_title( 'Blog Page Header', 'OBJECT', 'generate_page_header' );
|
||
|
|
||
|
if ( null == $page_exists ) {
|
||
|
wp_insert_post( $blog_page_header );
|
||
|
$page_exists = get_page_by_title( 'Blog Page Header', 'OBJECT', 'generate_page_header' );
|
||
|
|
||
|
// If we've created our page header, and content or an image exists
|
||
|
if ( $page_exists ) {
|
||
|
$global_locations = wp_parse_args( get_option( 'generate_page_header_global_locations', array() ), '' );
|
||
|
$new_blog_page_header = array();
|
||
|
$new_blog_page_header[ 'blog' ] = $page_exists->ID;
|
||
|
$new_blog_page_header_settings = wp_parse_args( $new_blog_page_header, $global_locations );
|
||
|
update_option( 'generate_page_header_global_locations', $new_blog_page_header_settings );
|
||
|
//delete_option( 'generate_page_header_options' );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Update our migration option so we don't need to run this again
|
||
|
$updated = array();
|
||
|
$updated[ 'blog_page_header' ] = 'true';
|
||
|
$new_migration_settings = wp_parse_args( $updated, $migration_settings );
|
||
|
update_option( 'generate_migration_settings', $new_migration_settings );
|
||
|
}
|