*/ public function get_style_depends(): array { return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-tb-post-comments-style']; } /** * Script dependencies. * * @return array */ public function get_script_depends(): array { return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-tb-post-comments-script']; } /** * Categories. * * @return array */ public function get_categories(): array { return ['king-addons-theme-builder']; } /** * Keywords. * * @return array */ public function get_keywords(): array { return ['comments', 'discussion', 'form', 'theme builder', 'king-addons']; } public function get_custom_help_url() { return 'mailto:bug@kingaddons.com?subject=Bug Report - King Addons&body=Please describe the issue'; } /** * Register controls. * * @return void */ public function register_controls(): void { $this->register_content_controls(false); $this->register_style_controls(false); $this->register_pro_notice_controls(); } /** * Render output. * * @return void */ public function render(): void { $settings = $this->get_settings_for_display(); $this->render_output($settings, false); } /** * Content controls. * * @param bool $is_pro Whether Pro controls are enabled. * * @return void */ protected function register_content_controls(bool $is_pro): void { $this->start_controls_section( 'kng_content_section', [ 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Content', 'king-addons'), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'kng_show', [ 'label' => esc_html__('Show', 'king-addons'), 'type' => Controls_Manager::SELECT, 'default' => 'both', 'options' => [ 'list' => esc_html__('Comments List', 'king-addons'), 'form' => esc_html__('Comment Form', 'king-addons'), 'both' => esc_html__('Both', 'king-addons'), ], ] ); $this->add_control( 'kng_hide_when_closed', [ 'label' => esc_html__('Hide When Closed', 'king-addons'), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'kng_no_comments_text', [ 'label' => $is_pro ? esc_html__('No Comments Text', 'king-addons') : sprintf(__('No Comments Text %s', 'king-addons'), ''), 'type' => Controls_Manager::TEXT, 'dynamic' => ['active' => true], 'default' => esc_html__('No comments yet.', 'king-addons'), 'classes' => $is_pro ? '' : 'king-addons-pro-control', ] ); $this->add_control( 'kng_order', [ 'label' => $is_pro ? esc_html__('Order', 'king-addons') : sprintf(__('Order %s', 'king-addons'), ''), 'type' => Controls_Manager::SELECT, 'default' => 'ASC', 'options' => [ 'ASC' => esc_html__('Oldest First', 'king-addons'), 'DESC' => esc_html__('Newest First', 'king-addons'), ], 'classes' => $is_pro ? '' : 'king-addons-pro-control', ] ); $this->end_controls_section(); } /** * Style controls. * * @param bool $is_pro Whether Pro controls are enabled. * * @return void */ protected function register_style_controls(bool $is_pro): void { $this->start_controls_section( 'kng_style_section', [ 'label' => esc_html__('Style', 'king-addons'), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_heading_typography', 'label' => esc_html__('Heading Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-tb-post-comments__heading', ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'kng_body_typography', 'label' => esc_html__('Text Typography', 'king-addons'), 'selector' => '{{WRAPPER}} .king-addons-tb-post-comments, {{WRAPPER}} .king-addons-tb-post-comments a', ] ); $this->add_control( 'kng_text_color', [ 'label' => esc_html__('Text Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-tb-post-comments' => 'color: {{VALUE}};', '{{WRAPPER}} .king-addons-tb-post-comments a' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'kng_link_hover_color', [ 'label' => esc_html__('Link Hover Color', 'king-addons'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .king-addons-tb-post-comments a:hover' => 'color: {{VALUE}};', ], ] ); $this->end_controls_section(); } /** * Pro upsell. * * @return void */ protected function register_pro_notice_controls(): void { if (king_addons_freemius()->can_use_premium_code__premium_only()) { return; } Core::renderProFeaturesSection( $this, '', Controls_Manager::RAW_HTML, 'tb-post-comments', [ 'Custom empty text and ordering', 'Extended styling for lists and form', ] ); } /** * Render output helper. * * @param array $settings Settings. * @param bool $is_pro Whether Pro features are enabled. * * @return void */ protected function render_output(array $settings, bool $is_pro): void { $post = get_post(); if (!$post instanceof \WP_Post) { return; } if (!comments_open($post) && ('yes' === ($settings['kng_hide_when_closed'] ?? ''))) { return; } $show = $settings['kng_show'] ?? 'both'; $show_list = in_array($show, ['list', 'both'], true); $show_form = in_array($show, ['form', 'both'], true); echo '
'; if ($show_list) { $comments = get_comments( [ 'post_id' => $post->ID, 'status' => 'approve', 'order' => $is_pro ? ($settings['kng_order'] ?? 'ASC') : 'ASC', ] ); if (!empty($comments)) { echo '
' . esc_html__('Comments', 'king-addons') . '
'; echo '
    '; foreach ($comments as $comment) { echo '
  1. '; echo '
    ' . esc_html(get_comment_author($comment)) . ' ยท ' . esc_html(get_comment_date('', $comment)) . '
    '; echo '
    ' . wp_kses_post(get_comment_text($comment)) . '
    '; echo '
  2. '; } echo '
'; } else { $empty_text = $is_pro ? ($settings['kng_no_comments_text'] ?? '') : ''; if ($empty_text) { echo '
' . esc_html($empty_text) . '
'; } } } if ($show_form && comments_open($post)) { echo '
'; comment_form( [ 'title_reply' => esc_html__('Leave a comment', 'king-addons'), 'label_submit' => esc_html__('Post Comment', 'king-addons'), 'comment_notes_after' => '', ], $post->ID ); echo '
'; } echo '
'; } }