* Created on: 20/08/2018 * * @package Neve\Customizer\Options */ namespace Neve\Customizer\Options; use Neve\Customizer\Base_Customizer; use Neve\Customizer\Types\Control; use Neve\Customizer\Types\Section; /** * Class Layout_Blog * * @package Neve\Customizer\Options */ class Layout_Blog extends Base_Customizer { /** * Function that should be extended to add customizer controls. * * @return void */ public function add_controls() { $this->section_blog(); $this->control_blog_layout(); $this->control_excerpt(); $this->control_pagination_type(); $this->control_content_order(); $this->control_meta_order(); } /** * Add customize section */ private function section_blog() { $this->add_section( new Section( 'neve_blog_archive_layout', array( 'priority' => 35, 'title' => esc_html__( 'Blog / Archive', 'neve' ), 'panel' => 'neve_layout', ) ) ); } /** * Add blog layout controls */ private function control_blog_layout() { $this->add_control( new Control( 'neve_blog_archive_layout', array( 'default' => 'grid', 'sanitize_callback' => array( $this, 'sanitize_blog_layout' ), ), array( 'label' => esc_html__( 'Blog', 'neve' ) . ' ' . esc_html__( 'Layout', 'neve' ), 'section' => 'neve_blog_archive_layout', 'priority' => 25, 'choices' => array( 'default' => array( 'url' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAABqAgMAAAAjP0ATAAAACVBMVEX///8+yP/V1dXG9YqxAAAAPklEQVR42mNgGAXDE4RCQMDAKONahQ5WUKBs1AujXqDEC6NgtOAazTKjXhgtuEbBaME1mutHvTBacI0C4gEAenW95O4Ccg4AAAAASUVORK5CYII=', ), 'alternative' => array( 'url' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAABqAgMAAAAjP0ATAAAACVBMVEX///8+yP/V1dXG9YqxAAAAS0lEQVRYw2NgGAXDE4RCQMDAKONahQ5WUKBs1AujXqDEC6NgiANRSDyH0EwZRvJZ1UCBslEvjHqBZl4YBYMUjNb1o14Y9cIoGH4AALJWvPSk+QsLAAAAAElFTkSuQmCC', ), 'grid' => array( 'url' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAABqCAMAAABpj1iyAAAACVBMVEUAyv/V1dX////o4eoDAAAAfUlEQVR42u3ZoQ0AMAgAQej+Q3cDCI6QQyNOvKGNt3KwsLCwsLB2sKKc4V6/iIWFhYWFhYWFhXWN5cQ4xcpyhos9K8tZytKW5CWvLclLXltYWFhYWFj+Ez0kYWFhYWFhYWFhYTkxrrGyHC/N2pK85LUleclrCwsLCwvrMOsDUDxdDThzw38AAAAASUVORK5CYII=', ), ), ), 'Neve\Customizer\Controls\Radio_Image' ) ); $this->add_control( new Control( 'neve_grid_layout', array( 'sanitize_callback' => 'absint', 'default' => '1', ), array( 'priority' => 30, 'section' => 'neve_blog_archive_layout', 'label' => esc_html__( 'Grid Layout', 'neve' ), 'choices' => array( '1' => esc_html__( '1 Column', 'neve' ), '2' => esc_html__( '2 Columns', 'neve' ), '3' => esc_html__( '3 Columns', 'neve' ), '4' => esc_html__( '4 Columns', 'neve' ), ), 'type' => 'select', 'active_callback' => array( $this, 'should_show_grid_cols' ), ) ) ); $this->add_control( new Control( 'neve_enable_masonry', array( 'sanitize_callback' => 'neve_sanitize_checkbox', 'default' => false, ), array( 'type' => 'checkbox', 'priority' => 35, 'section' => 'neve_blog_archive_layout', 'label' => esc_html__( 'Enable Masonry', 'neve' ), 'active_callback' => array( $this, 'should_show_masonry' ), ), 'Neve\Customizer\Controls\Checkbox' ) ); } /** * Add excerpt control */ private function control_excerpt() { $this->add_control( new Control( 'neve_post_excerpt_length', array( 'sanitize_callback' => 'neve_sanitize_range_value', 'default' => 25, ), array( 'label' => esc_html__( 'Excerpt Length', 'neve' ), 'section' => 'neve_blog_archive_layout', 'type' => 'range-value', 'step' => 5, 'input_attr' => array( 'min' => 5, 'max' => 300, 'default' => 40, ), 'priority' => 35, ), 'Neve\Customizer\Controls\Range' ) ); } /** * Add infinite scroll control */ private function control_pagination_type() { $this->add_control( new Control( 'neve_pagination_type', array( 'default' => 'number', 'sanitize_callback' => array( $this, 'sanitize_pagination_type' ), ), array( 'label' => esc_html__( 'Post Pagination', 'neve' ), 'section' => 'neve_blog_archive_layout', 'priority' => 40, 'type' => 'select', 'choices' => array( 'number' => esc_html__( 'Number', 'neve' ), 'infinite' => esc_html__( 'Infinite Scroll', 'neve' ), ), ) ) ); } /** * Sanitize the container layout value * * @param string $value value from the control. * * @return bool */ public function sanitize_blog_layout( $value ) { $allowed_values = array( 'default', 'alternative', 'grid' ); if ( ! in_array( $value, $allowed_values ) ) { return 'default'; } return esc_html( $value ); } /** * Sanitize the pagination type * * @param string $value value from the control. * * @return bool */ public function sanitize_pagination_type( $value ) { $allowed_values = array( 'number', 'infinite' ); if ( ! in_array( $value, $allowed_values ) ) { return 'number'; } return esc_html( $value ); } /** * Add content order control. */ private function control_content_order() { $order_default_components = array( 'thumbnail', 'title-meta', 'excerpt', ); $components = array( 'thumbnail' => __( 'Thumbnail', 'neve' ), 'title-meta' => __( 'Title & Meta', 'neve' ), 'excerpt' => __( 'Excerpt', 'neve' ), ); $this->add_control( new Control( 'neve_post_content_ordering', array( 'sanitize_callback' => array( $this, 'sanitize_post_content_ordering' ), 'default' => json_encode( $order_default_components ), ), array( 'label' => esc_html__( 'Post Content Order', 'neve' ), 'section' => 'neve_blog_archive_layout', 'type' => 'ordering', 'components' => $components, 'priority' => 45, 'active_callback' => array( $this, 'should_show_content_ordering' ), ), 'Neve\Customizer\Controls\Ordering' ) ); } /** * Add meta order control. */ private function control_meta_order() { $order_default_components = array( 'author', 'date', 'comments', ); $components = apply_filters( 'neve_meta_filter', array( 'author' => __( 'Author', 'neve' ), 'category' => __( 'Category', 'neve' ), 'date' => __( 'Date', 'neve' ), 'comments' => __( 'Comments', 'neve' ), ) ); $this->add_control( new Control( 'neve_post_meta_ordering', array( 'sanitize_callback' => array( $this, 'sanitize_meta_ordering' ), 'default' => json_encode( $order_default_components ), ), array( 'label' => esc_html__( 'Meta Order', 'neve' ), 'section' => 'neve_blog_archive_layout', 'type' => 'ordering', 'components' => $components, 'priority' => 60, 'active_callback' => array( $this, 'should_show_meta_order' ), ), 'Neve\Customizer\Controls\Ordering' ) ); } /** * Sanitize meta order control. */ public function sanitize_meta_ordering( $value ) { $allowed = array( 'author', 'category', 'date', 'comments', 'reading', ); if ( empty( $value ) ) { return $allowed; } $decoded = json_decode( $value, true ); foreach ( $decoded as $val ) { if ( ! in_array( $val, $allowed ) ) { return $allowed; } } return $value; } /** * Sanitize content order control. */ public function sanitize_post_content_ordering( $value ) { $allowed = array( 'thumbnail', 'title-meta', 'excerpt', ); if ( empty( $value ) ) { return $allowed; } $decoded = json_decode( $value, true ); foreach ( $decoded as $val ) { if ( ! in_array( $val, $allowed ) ) { return $allowed; } } return $value; } /** * Callback to show the meta order control. * * @return bool */ public function should_show_meta_order() { $layout = get_theme_mod( 'neve_blog_archive_layout', 'grid' ); if ( $layout !== 'grid' ) { return true; } $default = array( 'thumbnail', 'title-meta', 'excerpt', ); $content_order = get_theme_mod( 'neve_post_content_ordering', json_encode( $default ) ); $content_order = json_decode( $content_order, true ); if ( ! in_array( 'title-meta', $content_order ) ) { return false; } return true; } /** * Callback for post content ordering control. * * @return bool */ public function should_show_content_ordering() { $layout = get_theme_mod( 'neve_blog_archive_layout', 'grid' ); if ( $layout !== 'grid' ) { return false; } return true; } /** * Callback to show grid columns control. * * @return bool */ public function should_show_grid_cols() { $blog_layout = get_theme_mod( 'neve_blog_archive_layout', 'grid' ); if ( $blog_layout !== 'grid' ) { return false; } return true; } /** * Callback to show masonry control. * * @return bool */ public function should_show_masonry() { $blog_layout = get_theme_mod( 'neve_blog_archive_layout', 'grid' ); $columns = get_theme_mod( 'neve_grid_layout', 1 ); if ( $blog_layout !== 'grid' ) { return false; } if ( $columns == 1 ) { return false; } return true; } }