330 lines
12 KiB
PHP
330 lines
12 KiB
PHP
<?php
|
|
// No direct access, please
|
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
|
|
|
include_once( 'metaboxes/metabox-functions.php' );
|
|
|
|
if ( ! function_exists( 'generate_sections_page_template' ) ) {
|
|
add_filter( 'template_include', 'generate_sections_page_template' );
|
|
/**
|
|
* Use our custom template if sections are enabled
|
|
*/
|
|
function generate_sections_page_template( $template ) {
|
|
|
|
global $post;
|
|
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
|
|
|
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
|
return $template;
|
|
}
|
|
|
|
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
|
|
|
$new_template = dirname( __FILE__ ) . '/templates/template.php';
|
|
|
|
if ( '' != $new_template ) {
|
|
return $new_template;
|
|
}
|
|
}
|
|
return $template;
|
|
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_show_excerpt' ) ) {
|
|
add_filter( 'generate_show_excerpt', 'generate_sections_show_excerpt' );
|
|
/**
|
|
* If Sections is enabled on a post, make sure we use the excerpt field on the blog page
|
|
*/
|
|
function generate_sections_show_excerpt( $show_excerpt ) {
|
|
global $post;
|
|
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
|
|
|
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
|
return true;
|
|
}
|
|
|
|
return $show_excerpt;
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_styles' ) ) {
|
|
add_action( 'wp_enqueue_scripts', 'generate_sections_styles' );
|
|
/**
|
|
* Enqueue necessary scripts if sections are enabled
|
|
*/
|
|
function generate_sections_styles() {
|
|
|
|
global $post;
|
|
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
|
|
|
// Bail if we're on a posts page
|
|
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
|
return;
|
|
}
|
|
|
|
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
|
wp_enqueue_style( 'generate-sections-styles', plugin_dir_url( __FILE__ ) . 'css/style.min.css' );
|
|
wp_enqueue_script( 'generate-sections-parallax', plugin_dir_url( __FILE__ ) . 'js/parallax.min.js', array(), GENERATE_SECTIONS_VERSION, true );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_body_classes' ) ) {
|
|
add_filter( 'body_class', 'generate_sections_body_classes' );
|
|
/**
|
|
* Add classes to our <body> element when sections are enabled
|
|
*/
|
|
function generate_sections_body_classes( $classes ) {
|
|
global $post;
|
|
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
|
$sidebars = apply_filters( 'generate_sections_sidebars', false );
|
|
|
|
// Bail if we're on a posts page
|
|
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
|
return $classes;
|
|
}
|
|
|
|
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
|
|
$classes[] = 'generate-sections-enabled';
|
|
}
|
|
|
|
if ( ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) && ! $sidebars ) {
|
|
$classes[] = 'sections-no-sidebars';
|
|
}
|
|
|
|
if ( ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) && $sidebars ) {
|
|
$classes[] = 'sections-sidebars';
|
|
}
|
|
|
|
return $classes;
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_add_css' ) ) {
|
|
add_action( 'wp_enqueue_scripts', 'generate_sections_add_css', 500 );
|
|
/**
|
|
* Create the CSS for our sections
|
|
*/
|
|
function generate_sections_add_css() {
|
|
global $post;
|
|
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
|
|
|
|
if ( ! isset( $use_sections['use_sections'] ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( 'true' !== $use_sections['use_sections'] ) {
|
|
return;
|
|
}
|
|
|
|
if ( is_home() || is_archive() || is_search() || is_attachment() || is_tax() ) {
|
|
return;
|
|
}
|
|
|
|
if ( function_exists( 'generate_spacing_get_defaults' ) ) {
|
|
$spacing_settings = wp_parse_args(
|
|
get_option( 'generate_spacing_settings', array() ),
|
|
generate_spacing_get_defaults()
|
|
);
|
|
|
|
$left_padding = $spacing_settings['content_left'];
|
|
$right_padding = $spacing_settings['content_right'];
|
|
$mobile_padding_left = ( isset( $spacing_settings[ 'mobile_content_left' ] ) ) ? $spacing_settings[ 'mobile_content_left' ] : 30;
|
|
$mobile_padding_right = ( isset( $spacing_settings[ 'mobile_content_right' ] ) ) ? $spacing_settings[ 'mobile_content_right' ] : 30;
|
|
} else {
|
|
$right_padding = 40;
|
|
$left_padding = 40;
|
|
$mobile_padding = 30;
|
|
}
|
|
|
|
$sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_sections', TRUE) : '';
|
|
|
|
// check if the repeater field has rows of data
|
|
if ( $sections && '' !== $sections ) {
|
|
|
|
$css = '.generate-sections-inside-container {padding-left:' . $left_padding . 'px;padding-right:' . $right_padding . 'px;}';
|
|
// loop through the rows of data
|
|
$i = 0;
|
|
foreach ( $sections['sections'] as $section ) :
|
|
$i++;
|
|
|
|
// Get image details
|
|
$image_id = ( isset( $section['background_image'] ) && '' !== $section['background_image'] ) ? intval( $section['background_image'] ) : '';
|
|
$image_url = ( '' !== $image_id ) ? wp_get_attachment_image_src( $image_id, 'full' ) : '';
|
|
|
|
// Get the padding type
|
|
$padding_type = apply_filters( 'generate_sections_padding_type','px' );
|
|
|
|
// If someone has changed the padding type using a filter, use their value
|
|
if ( 'px' !== $padding_type ) {
|
|
$top_padding_type = $padding_type;
|
|
$bottom_padding_type = $padding_type;
|
|
} else {
|
|
$top_padding_type = ( isset( $section['top_padding_unit'] ) && '' !== $section['top_padding_unit'] ) ? $section['top_padding_unit'] : $padding_type;
|
|
$bottom_padding_type = ( isset( $section['bottom_padding_unit'] ) && '' !== $section['bottom_padding_unit'] ) ? $section['bottom_padding_unit'] : $padding_type;
|
|
}
|
|
|
|
// Default padding top
|
|
$padding_top = apply_filters( 'generate_sections_default_padding_top','40' );
|
|
|
|
// Default padding bottom
|
|
$padding_bottom = apply_filters( 'generate_sections_default_padding_bottom','40' );
|
|
|
|
$custom_id = ( isset( $section['custom_id'] ) ) ? $section['custom_id'] : '';
|
|
$custom_id = ( '' == $custom_id ) ? "generate-section-$i" : $custom_id;
|
|
|
|
// Get the values
|
|
$background_color = ( isset( $section['background_color'] ) && '' !== $section['background_color'] ) ? 'background-color:' . esc_attr( $section['background_color'] ) . ';' : '';
|
|
$background_image = ( ! empty( $image_url[0] ) ) ? 'background-image:url(' . esc_url( $image_url[0] ) . ');' : '';
|
|
|
|
if ( isset( $section['background_color_overlay'] ) && '' !== $section['background_color_overlay'] ) {
|
|
if ( '' !== $background_image && '' !== $background_color ) {
|
|
$background_image = 'background-image:linear-gradient(0deg, ' . $section['background_color'] . ',' . $section['background_color'] . '), url(' . esc_url( $image_url[0] ) . ');';
|
|
$background_color = '';
|
|
}
|
|
}
|
|
|
|
$text_color = ( isset( $section['text_color'] ) && '' !== $section['text_color'] ) ? 'color:' . esc_attr( $section['text_color'] ) . ';' : '';
|
|
$link_color = ( isset( $section['link_color'] ) && '' !== $section['link_color'] ) ? 'color:' . esc_attr( $section['link_color'] ) . ';' : '';
|
|
$link_color_hover = ( isset( $section['link_color_hover'] ) && '' !== $section['link_color_hover'] ) ? 'color:' . esc_attr( $section['link_color_hover'] ) . ';' : '';
|
|
$top_padding = ( isset( $section['top_padding'] ) && '' !== $section['top_padding'] ) ? 'padding-top:' . absint( $section['top_padding'] ) . $top_padding_type . ';' : 'padding-top:' . $padding_top . 'px;';
|
|
$bottom_padding = ( isset( $section['bottom_padding'] ) && '' !== $section['bottom_padding'] ) ? 'padding-bottom:' . absint( $section['bottom_padding'] ) . $bottom_padding_type . ';' : 'padding-bottom:' . $padding_bottom . 'px;';
|
|
|
|
// Outer container
|
|
if ( '' !== $background_color || '' !== $background_image ) {
|
|
$css .= '#' . $custom_id . '.generate-sections-container{' . $background_color . $background_image . '}';
|
|
}
|
|
|
|
// Inner container
|
|
if ( '' !== $top_padding || '' !== $bottom_padding || '' !== $text_color ) {
|
|
$css .= '#' . $custom_id . ' .generate-sections-inside-container{' . $top_padding . $bottom_padding . $text_color . '}';
|
|
}
|
|
|
|
// Link color
|
|
if ( '' !== $link_color ) {
|
|
$css .= '#' . $custom_id . ' a,#generate-section-' . $i . ' a:visited{' . $link_color . '}';
|
|
}
|
|
|
|
// Link color hover
|
|
if ( '' !== $link_color_hover ) {
|
|
$css .= '#' . $custom_id . ' a:hover{' . $link_color_hover . '}';
|
|
}
|
|
|
|
$mobile = generate_premium_get_media_query( 'mobile' );
|
|
$css .= '@media ' . esc_attr( $mobile ) . ' {.generate-sections-inside-container {padding-left: ' . $mobile_padding_left . 'px;padding-right: ' . $mobile_padding_right . 'px;}}';
|
|
endforeach;
|
|
|
|
// Build CSS
|
|
wp_add_inline_style( 'generate-style', $css );
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_filter_admin_init' ) ) {
|
|
add_action( 'admin_init', 'generate_sections_filter_admin_init' );
|
|
/*
|
|
* Recreate the default filters on the_content
|
|
* this will make it much easier to output the meta content with proper/expected formatting
|
|
*/
|
|
function generate_sections_filter_admin_init() {
|
|
if ( user_can_richedit() ) {
|
|
add_filter( 'generate_section_content', 'convert_smilies' );
|
|
add_filter( 'generate_section_content', 'convert_chars' );
|
|
add_filter( 'generate_section_content', 'wpautop' );
|
|
add_filter( 'generate_section_content', 'shortcode_unautop' );
|
|
add_filter( 'generate_section_content', 'prepend_attachment' );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_filter' ) ) {
|
|
add_action( 'init', 'generate_sections_filter' );
|
|
/*
|
|
* Recreate the default filters on the_content
|
|
* this will make it much easier to output the meta content with proper/expected formatting
|
|
*/
|
|
function generate_sections_filter() {
|
|
if ( is_admin() ) {
|
|
return;
|
|
}
|
|
|
|
add_filter( 'generate_section_content', 'convert_smilies' );
|
|
add_filter( 'generate_section_content', 'convert_chars' );
|
|
add_filter( 'generate_section_content', 'wpautop' );
|
|
add_filter( 'generate_section_content', 'shortcode_unautop' );
|
|
add_filter( 'generate_section_content', 'prepend_attachment' );
|
|
add_filter( 'generate_section_content', 'do_shortcode');
|
|
|
|
add_filter( 'generate_the_section_content', array($GLOBALS['wp_embed'], 'autoembed'), 9 );
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'generate_sections_save_content' ) ) {
|
|
add_action( 'save_post', 'generate_sections_save_content', 99, 4 );
|
|
/*
|
|
* When we save our post, grab all of the section content and save it as regular content.
|
|
*
|
|
* This will prevent content loss/theme lock.
|
|
*/
|
|
function generate_sections_save_content( $post_id, $post ) {
|
|
|
|
if ( ! isset( $_POST['_generate_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_nonce'], 'generate_sections_nonce' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! current_user_can('edit_post', $post_id ) ) {
|
|
return;
|
|
}
|
|
|
|
// See if we're using sections
|
|
$use_sections = get_post_meta( $post_id, '_generate_use_sections', true);
|
|
|
|
// Make sure use sections exists and that we're not saving a revision
|
|
if ( ! isset( $use_sections['use_sections'] ) || wp_is_post_revision( $post_id ) ) {
|
|
return;
|
|
}
|
|
|
|
// Return if sections are set to false
|
|
if ( 'true' !== $use_sections['use_sections'] ) {
|
|
return;
|
|
}
|
|
|
|
// Get our sections
|
|
$sections = get_post_meta( $post_id, '_generate_sections', true );
|
|
|
|
// Return if there's nothing in our sections
|
|
if ( ! isset( $sections ) || '' == $sections ) {
|
|
return;
|
|
}
|
|
|
|
// Prevent infinite loop
|
|
remove_action( 'save_post', 'generate_sections_save_content', 99, 4 );
|
|
|
|
// Let's do some stuff if sections aren't empty
|
|
if ( '' !== $sections ) {
|
|
// Set up our content variable
|
|
$content = '';
|
|
|
|
// Loop through each section and add our content to the content variable
|
|
foreach ( $sections['sections'] as $section ) {
|
|
$content .= ( isset( $section['content'] ) && '' !== $section['content'] ) ? $section['content'] . "\n\n" : '';
|
|
}
|
|
|
|
// Now update our post if we have section content
|
|
if ( '' !== $content ) {
|
|
$post->post_content = $content;
|
|
wp_update_post( $post, true );
|
|
}
|
|
}
|
|
|
|
// Re-hook the save_post action
|
|
add_action('save_post', 'generate_sections_save_content', 99, 4);
|
|
}
|
|
}
|