container = $container; $this->database = $database; $this->settings = $settings; $this->assets = $this->container->get( Enqueue::class ); add_action( 'init', [$this, 'init'] ); add_action( 'wp_enqueue_scripts', [$this, 'enqueue_scripts'] ); add_action( 'template_redirect', [$this, 'template_redirect'] ); add_filter( 'betterdocs_layout_filename', [$this, 'layout_filename'], 10, 2 ); add_action( 'betterdocs_docs_before_social', [$this, 'article_reactions'] ); add_action('betterdocs_before_render', [ $this, 'before_render' ], 11, 2 ); add_action('betterdocs_after_render', [ $this, 'after_render' ], 11, 2 ); } public function before_render( $widget, $widget_type ) { $this->widget_attributes = isset( $widget->attributes ) ? $widget->attributes : []; $this->widget_type = $widget_type; /** * This line of code will run for reactions shortcode, elementor widget and blocks */ if( strpos( $widget->get_name(), 'reactions' ) !== false ) { $this->localize_reactions_data(); } /** * This line of code will run for Feedback form Shortcode, Elementor widget and blocks */ if( strpos( $widget->get_name(), 'feedback_form' ) ){ $this->localize_feedback_form_data(); } add_filter('betterdocs_nested_terms_args', [$this, 'terms_args'], 11, 1); add_filter('betterdocs_nested_docs_args', [$this, 'docs_args'], 11, 1); } public function after_render( $widget, $widget_type ){ remove_filter('betterdocs_nested_terms_args', [$this, 'terms_args'], 11); remove_filter('betterdocs_nested_docs_args', [$this, 'docs_args'], 11); $this->widget_attributes = []; $this->widget_type = ''; } public function terms_args( $args ){ switch( $this->widget_type ) { case 'shortcode': if( isset( $this->widget_attributes['terms_orderby'] ) ) { $args['orderby'] = $this->widget_attributes['terms_orderby']; } if( isset( $this->widget_attributes['terms_order'] ) ) { $args['order'] = $this->widget_attributes['terms_order']; } break; case 'blocks': $args['orderby'] = $this->widget_attributes['orderBy']; $args['order'] = $this->widget_attributes['order']; break; case 'elementor': $args['orderby'] = $this->widget_attributes['orderby']; $args['order'] = $this->widget_attributes['order']; break; } return $args; } public function docs_args( $args ){ switch( $this->widget_type ) { case 'shortcode': if( isset( $this->widget_attributes['orderby'] ) ) { $args['orderby'] = $this->widget_attributes['orderby']; } if( isset( $this->widget_attributes['order'] ) ) { $args['order'] = $this->widget_attributes['order']; } break; case 'blocks': $args['orderby'] = $this->widget_attributes['postsOrderBy']; $args['order'] = $this->widget_attributes['postsOrder']; break; case 'elementor': $args['orderby'] = $this->widget_attributes['post_orderby']; $args['order'] = $this->widget_attributes['post_order']; break; } return $args; } public function article_reactions() { if ( $this->database->get_theme_mod( 'betterdocs_post_reactions', true ) ) { echo do_shortcode( '[betterdocs_article_reactions]' ); } } public function enqueue_scripts() { if( is_singular( 'docs' ) ) { wp_enqueue_style( 'betterdocs-single' ); wp_enqueue_script( 'clipboard' ); } if( is_post_type_archive( 'docs' ) ) { wp_enqueue_style( 'betterdocs-docs' ); } if( is_tax( 'doc_category' ) || is_tax( 'doc_tag') ) { wp_enqueue_style( 'betterdocs-doc_category' ); } if( is_tax( 'doc_category' ) || is_tax( 'doc_tag') || is_singular( 'docs' ) ) { wp_enqueue_style( 'simplebar' ); wp_enqueue_script( 'simplebar' ); wp_enqueue_script( 'betterdocs-category-grid' ); } if( is_post_type_archive('docs') || is_singular( 'docs' ) || is_tax( 'doc_category') || is_tax( 'doc_tag') || is_tax( 'knowledge_base') ) { wp_enqueue_script( 'betterdocs' ); } } public function layout_filename( $filename, $origin_layout ) { $filename = ( $origin_layout === 'layout-2' ) ? 'default' : $filename; return $filename; } public function init() { $this->container->get( TemplateLoader::class )->init(); // add_filter( 'single_template', [$this, 'single_template'], 99 ); add_filter( 'betterdocs_articles_args', [$this, 'article_args'], 11, 3 ); } public function template_redirect() { // global $wp_query; // dump( get_queried_object() ); // die; } public function single_template( $template ) { if ( ! is_singular( 'docs' ) ) { return $template; } $layout = $this->database->get_theme_mod( 'betterdocs_single_layout_select', 'layout-1' ); $layout = 'templates/single/' . $layout; $eligible_template = $this->container->get( Views::class )->path( $layout, 'templates/single/layout-1' ); if ( file_exists( $eligible_template ) ) { $template = &$eligible_template; } return apply_filters( 'betterdocs_single_template', $template ); } public function article_args( $args, $term_id, $_origin_args ) { if ( null == $term_id || isset( $args['orderby'] ) ) { return $args; } $post__in = betterdocs()->query->get_docs_order_by_terms( $term_id ); if( ! empty( $post__in ) ) { $args['orderby'] = 'post__in'; $args['post__in'] = $post__in; } return $args; } public function localize_reactions_data(){ $this->assets->localize( 'betterdocs-reactions', 'betterdocsReactionsConfig', [ 'post_id' => get_the_ID(), 'FEEDBACK' => array( 'DISPLAY' => true, 'TEXT' => esc_html__('How did you feel?', 'betterdocs'), 'SUCCESS' => esc_html__('Thanks for your feedback', 'betterdocs'), 'URL' => get_rest_url(null, '/betterdocs/v1/feedback'), ), ] ); } public function localize_feedback_form_data() { $this->assets->localize( 'betterdocs', 'betterdocsSubmitFormConfig', [ 'ajax_url' => admin_url( 'admin-ajax.php' ), 'post_id' => get_the_ID(), 'nonce' => wp_create_nonce( 'betterdocs_submit_data' ) ] ); } }