Server IP : 170.150.155.74 / Your IP : 18.119.163.106 Web Server : Apache/2.4.53 (Debian) System : Linux b22bf132354b 5.4.0-162-generic #179-Ubuntu SMP Mon Aug 14 08:51:31 UTC 2023 x86_64 User : www-data ( 33) PHP Version : 7.4.29 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/html/wp-content/themes/neve/inc/customizer/options/ |
Upload File : |
<?php /** * Single post layout section. * * Author: Andrei Baicus <andrei@themeisle.com> * Created on: 20/08/2018 * * @package Neve\Customizer\Options */ namespace Neve\Customizer\Options; use HFG\Traits\Core; use Neve\Customizer\Types\Control; /** * Class Layout_Single_Post * * @package Neve\Customizer\Options */ class Layout_Single_Post extends Base_Layout_Single { use Core; /** * Returns the post type. * * @return string */ public function get_post_type() { return 'post'; } /** * @return string */ public function get_cover_selector() { return '.single-post .nv-post-cover'; } /** * Function that should be extended to add customizer controls. * * @return void */ public function add_controls() { parent::add_controls(); $this->control_content_order(); if ( neve_is_new_skin() ) { $this->add_subsections(); $this->header_layout(); $this->post_meta(); $this->comments(); add_action( 'customize_register', [ $this, 'adjust_headings' ], PHP_INT_MAX ); } } /** * Add sections headings. */ private function add_subsections() { $headings = [ 'page_elements' => [ 'title' => esc_html__( 'Page Elements', 'neve' ), 'priority' => 95, 'controls_to_wrap' => 2, 'expanded' => false, ], 'meta' => [ 'title' => esc_html__( 'Post Meta', 'neve' ), 'priority' => 110, 'controls_to_wrap' => 5, 'expanded' => false, ], 'comments_section' => [ 'title' => esc_html__( 'Comments Section', 'neve' ), 'priority' => 150, 'expanded' => true, 'accordion' => false, 'active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, ], 'comments_form' => [ 'title' => esc_html__( 'Submit Form Section', 'neve' ), 'priority' => 175, 'expanded' => true, 'accordion' => false, 'active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, ], ]; foreach ( $headings as $heading_id => $heading_data ) { $this->add_control( new Control( 'neve_post_' . $heading_id . '_heading', [ 'sanitize_callback' => 'sanitize_text_field', ], [ 'label' => $heading_data['title'], 'section' => $this->section, 'priority' => $heading_data['priority'], 'class' => $heading_id . '-accordion', 'expanded' => $heading_data['expanded'], 'accordion' => array_key_exists( 'accordion', $heading_data ) ? $heading_data['accordion'] : true, 'controls_to_wrap' => array_key_exists( 'controls_to_wrap', $heading_data ) ? $heading_data['controls_to_wrap'] : 0, 'active_callback' => array_key_exists( 'active_callback', $heading_data ) ? $heading_data['active_callback'] : '__return_true', ], 'Neve\Customizer\Controls\Heading' ) ); } } /** * Add header layout controls. */ private function header_layout() { $this->add_control( new Control( 'neve_post_cover_meta_before_title', [ 'sanitize_callback' => 'neve_sanitize_checkbox', 'default' => false, ], [ 'label' => esc_html__( 'Display meta before title', 'neve' ), 'section' => $this->section, 'type' => 'neve_toggle_control', 'priority' => 40, 'active_callback' => [ $this, 'is_cover_layout' ], ], 'Neve\Customizer\Controls\Checkbox' ) ); } /** * Add content order control. */ private function control_content_order() { $all_components = [ 'title-meta' => __( 'Title & Meta', 'neve' ), 'thumbnail' => __( 'Thumbnail', 'neve' ), 'content' => __( 'Content', 'neve' ), 'tags' => __( 'Tags', 'neve' ), 'post-navigation' => __( 'Post navigation', 'neve' ), 'comments' => __( 'Comments', 'neve' ), ]; if ( self::is_cover_layout() ) { $all_components = [ 'content' => __( 'Content', 'neve' ), 'tags' => __( 'Tags', 'neve' ), 'post-navigation' => __( 'Post navigation', 'neve' ), 'comments' => __( 'Comments', 'neve' ), ]; } $order_default_components = $this->post_ordering(); /** * Filters the elements on the single post page. * * @param array $all_components Single post page components. * * @since 2.11.4 */ $components = apply_filters( 'neve_single_post_elements', $all_components ); $this->add_control( new Control( 'neve_layout_single_post_elements_order', [ 'sanitize_callback' => [ $this, 'sanitize_post_elements_ordering' ], 'default' => wp_json_encode( $order_default_components ), ], [ 'label' => esc_html__( 'Elements Order', 'neve' ), 'section' => 'neve_single_post_layout', 'components' => $components, 'priority' => 100, ], 'Neve\Customizer\Controls\React\Ordering' ) ); if ( neve_is_new_skin() ) { $this->add_control( new Control( 'neve_single_post_elements_spacing', [ 'sanitize_callback' => 'neve_sanitize_range_value', 'transport' => $this->selective_refresh, 'default' => '{"desktop":60,"tablet":60,"mobile":60}', ], [ 'label' => esc_html__( 'Spacing between elements', 'neve' ), 'section' => $this->section, 'type' => 'neve_responsive_range_control', 'input_attrs' => [ 'max' => 500, 'units' => [ 'px' ], 'defaultVal' => [ 'mobile' => 60, 'tablet' => 60, 'desktop' => 60, 'suffix' => [ 'mobile' => 'px', 'tablet' => 'px', 'desktop' => 'px', ], ], ], 'priority' => 105, 'live_refresh_selector' => true, 'live_refresh_css_prop' => [ 'cssVar' => [ 'responsive' => true, 'vars' => '--spacing', 'selector' => '.nv-single-post-wrap', 'suffix' => 'px', ], ], ], '\Neve\Customizer\Controls\React\Responsive_Range' ) ); } } /** * Add post meta controls. */ private function post_meta() { $order_default_components = get_theme_mod( 'neve_post_meta_ordering', wp_json_encode( [ 'author', 'date', 'comments' ] ) ); /** * Filters the elements that appears in meta. * * @param array $elements Array of meta elements. * * @since 2.11.4 */ $components = apply_filters( 'neve_meta_filter', [ 'author' => __( 'Author', 'neve' ), 'category' => __( 'Category', 'neve' ), 'date' => __( 'Date', 'neve' ), 'comments' => __( 'Comments', 'neve' ), ] ); $this->add_control( new Control( 'neve_single_post_meta_ordering', [ 'sanitize_callback' => 'neve_sanitize_meta_ordering', 'default' => $order_default_components, ], [ 'label' => esc_html__( 'Meta Order', 'neve' ), 'section' => $this->section, 'components' => $components, 'priority' => 115, ], 'Neve\Customizer\Controls\React\Ordering' ) ); $default_separator = get_theme_mod( 'neve_metadata_separator', esc_html( '/' ) ); $this->add_control( new Control( 'neve_single_post_metadata_separator', [ 'sanitize_callback' => 'sanitize_text_field', 'default' => $default_separator, ], [ 'priority' => 120, 'section' => $this->section, 'label' => esc_html__( 'Separator', 'neve' ), 'description' => esc_html__( 'For special characters make sure to use Unicode. For example > can be displayed using \003E.', 'neve' ), 'type' => 'text', ] ) ); $author_avatar_default = get_theme_mod( 'neve_author_avatar', false ); $this->add_control( new Control( 'neve_single_post_author_avatar', [ 'sanitize_callback' => 'neve_sanitize_checkbox', 'default' => $author_avatar_default, ], [ 'label' => esc_html__( 'Show Author Avatar', 'neve' ), 'section' => $this->section, 'type' => 'neve_toggle_control', 'priority' => 125, ] ) ); $avatar_size_default = get_theme_mod( 'neve_author_avatar_size', '{ "mobile": 20, "tablet": 20, "desktop": 20 }' ); $this->add_control( new Control( 'neve_single_post_avatar_size', [ 'sanitize_callback' => 'neve_sanitize_range_value', 'default' => $avatar_size_default, ], [ 'label' => esc_html__( 'Avatar Size', 'neve' ), 'section' => $this->section, 'units' => [ 'px' ], 'input_attr' => [ 'mobile' => [ 'min' => 20, 'max' => 50, 'default' => 20, 'default_unit' => 'px', ], 'tablet' => [ 'min' => 20, 'max' => 50, 'default' => 20, 'default_unit' => 'px', ], 'desktop' => [ 'min' => 20, 'max' => 50, 'default' => 20, 'default_unit' => 'px', ], ], 'input_attrs' => [ 'step' => 1, 'min' => 20, 'max' => 50, 'defaultVal' => [ 'mobile' => 20, 'tablet' => 20, 'desktop' => 20, ], 'units' => [ 'px' ], ], 'priority' => 130, 'active_callback' => function () { return get_theme_mod( 'neve_single_post_author_avatar', false ); }, 'responsive' => true, ], 'Neve\Customizer\Controls\React\Responsive_Range' ) ); $this->add_control( new Control( 'neve_single_post_show_last_updated_date', [ 'sanitize_callback' => 'neve_sanitize_checkbox', 'default' => get_theme_mod( 'neve_show_last_updated_date', false ), ], [ 'label' => esc_html__( 'Use last updated date instead of the published one', 'neve' ), 'section' => $this->section, 'type' => 'neve_toggle_control', 'priority' => 135, ] ) ); } /** * Add comments controls. */ private function comments() { $this->add_control( new Control( 'neve_post_comment_section_title', [ 'sanitize_callback' => 'sanitize_text_field', ], [ 'label' => esc_html__( 'Section title', 'neve' ), 'description' => esc_html__( 'The following magic tags are available for this field: {title} and {comments_number}. Leave this field empty for default behavior.', 'neve' ), 'priority' => 155, 'section' => $this->section, 'type' => 'text', 'active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, ] ) ); $this->add_boxed_layout_controls( 'comments', [ 'priority' => 160, 'section' => $this->section, 'padding_default' => $this->padding_default(), 'background_default' => 'var(--nv-light-bg)', 'color_default' => 'var(--nv-text-color)', 'boxed_selector' => '.nv-is-boxed.nv-comments-wrap', 'text_color_css_selector' => '.nv-comments-wrap.nv-is-boxed, .nv-comments-wrap.nv-is-boxed a', 'border_color_css_selector' => '.nv-comments-wrap.nv-is-boxed .nv-comment-article', 'toggle_active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, 'active_callback' => function() { return $this->element_is_enabled( 'comments' ) && get_theme_mod( 'neve_comments_boxed_layout', false ); }, ] ); $this->add_control( new Control( 'neve_post_comment_form_title', [ 'sanitize_callback' => 'sanitize_text_field', ], [ 'label' => esc_html__( 'Section title', 'neve' ), 'priority' => 180, 'section' => $this->section, 'type' => 'text', 'active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, ] ) ); $this->add_control( new Control( 'neve_post_comment_form_button_style', [ 'default' => 'primary', 'sanitize_callback' => 'neve_sanitize_button_type', ], [ 'label' => esc_html__( 'Button style', 'neve' ), 'section' => $this->section, 'priority' => 185, 'type' => 'select', 'choices' => [ 'primary' => esc_html__( 'Primary', 'neve' ), 'secondary' => esc_html__( 'Secondary', 'neve' ), ], 'active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, ] ) ); $this->add_control( new Control( 'neve_post_comment_form_button_text', [ 'sanitize_callback' => 'sanitize_text_field', ], [ 'label' => esc_html__( 'Button text', 'neve' ), 'priority' => 190, 'section' => $this->section, 'type' => 'text', 'active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, ] ) ); $this->add_boxed_layout_controls( 'comments_form', [ 'priority' => 195, 'section' => $this->section, 'padding_default' => $this->padding_default(), 'is_boxed_default' => true, 'background_default' => 'var(--nv-light-bg)', 'color_default' => 'var(--nv-text-color)', 'boxed_selector' => '.nv-is-boxed.comment-respond', 'text_color_css_selector' => '.comment-respond.nv-is-boxed, .comment-respond.nv-is-boxed a', 'toggle_active_callback' => function() { return $this->element_is_enabled( 'comments' ); }, 'active_callback' => function() { return $this->element_is_enabled( 'comments' ) && get_theme_mod( 'neve_comments_form_boxed_layout', neve_is_new_skin() ); }, ] ); } /** * Change heading controls properties. */ public function adjust_headings() { $this->change_customizer_object( 'control', 'neve_comments_heading', 'controls_to_wrap', 15 ); } /** * Active callback for sharing controls. * * @param string $element Post page element. * * @return bool */ public function element_is_enabled( $element ) { $default_order = apply_filters( 'neve_single_post_elements_default_order', array( 'title-meta', 'thumbnail', 'content', 'tags', 'comments', ) ); $content_order = get_theme_mod( 'neve_layout_single_post_elements_order', wp_json_encode( $default_order ) ); $content_order = json_decode( $content_order, true ); if ( ! in_array( $element, $content_order, true ) ) { return false; } return true; } /** * Sanitize content order control. */ public function sanitize_post_elements_ordering( $value ) { $allowed = [ 'thumbnail', 'title-meta', 'content', 'tags', 'post-navigation', 'comments', 'author-biography', 'related-posts', 'sharing-icons', ]; if ( empty( $value ) ) { return wp_json_encode( $allowed ); } $decoded = json_decode( $value, true ); foreach ( $decoded as $val ) { if ( ! in_array( $val, $allowed, true ) ) { return wp_json_encode( $allowed ); } } return $value; } /** * Fuction used for active_callback control property. * * @return bool */ public static function is_cover_layout() { return get_theme_mod( 'neve_post_header_layout' ) === 'cover' && neve_is_new_skin(); } /** * Fuction used for active_callback control property for boxed title. * * @return bool */ public function is_boxed_title() { if ( ! self::is_cover_layout() ) { return false; } return get_theme_mod( 'neve_post_cover_title_boxed_layout', false ); } }