PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.2
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.2
4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 All 200 releases
← All changes | includes/Shortcodes/FaqList.php +38 -4 4.5.04.9.2 View file →
@@ -1,9 +1,14 @@
1 1 <?php
2 +namespace WPDeveloper\BetterDocs\Shortcodes;
2 3
3 -namespace WPDeveloper\BetterDocs\Shortcodes;
4 +if ( ! defined( 'ABSPATH' ) ) {
5 + exit;
6 +}
4 7
8 +
5 9 use WPDeveloper\BetterDocs\Core\Shortcode;
10 +use WPDeveloper\BetterDocs\Utils\Helper;
6 11
7 12 class FaqList extends Shortcode {
8 13 protected $layout = 'modern';
9 14 protected $icon_hook = 'betterdocs_faq_post_after';
@@ -52,12 +57,24 @@
52 57 'faq_per_page' => 9,
53 58 'show_button_icon' => true,
54 59 'button_icon_position' => 'after',
55 60 'button_color' => '#528ffe',
56 - 'is_gutenberg' => false
61 + 'is_gutenberg' => false,
62 + 'faq_taxonomy' => 'betterdocs_faq_category',
63 + // Per-placement order override. Empty = use the global FAQ Builder
64 + // order (`betterdocs_faq_order` option). One of: default,
65 + // most_recent, least_recent, a_to_z, z_to_a, most_questions.
66 + 'order' => ''
57 67 ];
58 68 }
59 69
70 + /**
71 + * Allowed per-placement order keys, mirroring the FAQ Builder header dropdown.
72 + *
73 + * @var string[]
74 + */
75 + protected $allowed_order_keys = [ 'default', 'most_recent', 'least_recent', 'a_to_z', 'z_to_a', 'most_questions' ];
76 +
60 77 public function icons( $faq_toggle ) {
61 78 $faq_markup = '<svg class="betterdocs-faq-iconminus" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"' .($faq_toggle ? " style='display:inline;'" : ""). 'stroke-width="2"><g fill="none" stroke="' . esc_attr( $this->attributes['button_color'] ) . '" stroke-linecap="round" stroke-miterlimit="10" stroke-linejoin="round"><path d="M17 12H7"></path><circle cx="12" cy="12" r="11"></circle></g></svg>';
62 79 $faq_markup .= '<svg class="betterdocs-faq-iconplus" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"'.($faq_toggle ? " style='display:none;'" : "").'><g stroke-width="2" fill="none" stroke="' . esc_attr( $this->attributes['button_color'] ) . '" stroke-linecap="square" stroke-miterlimit="10"><path d="M12 7v10M17 12H7"></path><circle cx="12" cy="12" r="11"></circle></g></svg>';
63 80
@@ -75,15 +92,32 @@
75 92 } else {
76 93 add_action( $this->icon_hook, [ $this, 'icons' ] );
77 94 }
78 95
96 + // When this placement sets a valid `order`, scope it to this render only
97 + // (via the existing `betterdocs_faq_order_key` filter) so it overrides
98 + // the global FAQ Builder order without affecting other placements.
99 + $order_override = is_string( $this->attributes['order'] ) ? trim( $this->attributes['order'] ) : '';
100 + $order_filter = null;
101 + if ( $order_override && in_array( $order_override, $this->allowed_order_keys, true ) ) {
102 + $order_filter = function () use ( $order_override ) {
103 + return $order_override;
104 + };
105 + add_filter( 'betterdocs_faq_order_key', $order_filter, 20 );
106 + }
107 +
79 108 $this->views( 'shortcodes/faq' );
80 109
110 + if ( $order_filter ) {
111 + remove_filter( 'betterdocs_faq_order_key', $order_filter, 20 );
112 + }
113 +
81 114 remove_action( $this->icon_hook, [ $this, 'icons' ] );
82 115 }
83 116
84 117 public function view_params() {
85 - $terms_query = $this->query->faq_terms_query_args( $this->attributes['groups'], $this->attributes['group_exclude'] );
118 + $taxonomy = sanitize_key( $this->attributes['faq_taxonomy'] );
119 + $terms_query = $this->query->faq_terms_query_args( $this->attributes['groups'], $this->attributes['group_exclude'], [], $taxonomy );
86 120
87 121 $wrapper_attr = [
88 122 'class' => [
89 123 'betterdocs-faq-wrapper',
@@ -98,9 +132,9 @@
98 132 'wrapper_attr' => $wrapper_attr,
99 133 'widget' => $this,
100 134 'layout' => 'list',
101 135 'terms_query_args' => $terms_query,
102 - 'faq_schema' => $this->attributes['faq_schema']
136 + 'faq_schema' => $this->attributes['faq_schema'] && ! Helper::seo_plugin_outputs_faq_schema()
103 137 ]
104 138 );
105 139 }
106 140 }