PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.8.2
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.8.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 3.5.2 All 199 releases
betterdocs / includes / REST / Customize.php

Customize.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.8.2, at includes/REST/Customize.php

66 lines 1.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPDeveloper\BetterDocs\REST;
4
5 use WP_REST_Request;
6 use WPDeveloper\BetterDocs\Core\BaseAPI;
7
8 /**
9 * REST surface for the Quick Setup "Customize" step.
10 *
11 * Layouts are stored as WordPress theme_mods (not betterdocs_settings), so the
12 * wizard's settings save can't touch them — this endpoint persists a single
13 * layout choice immediately via set_theme_mod, validated against an allowlist.
14 *
15 * @since 4.5.3
16 */
17 class Customize extends BaseAPI {
18 /**
19 * theme_mod key => allowed layout values (the free layouts offered in the wizard).
20 *
21 * @var array
22 */
23 const ALLOWED = [
24 'betterdocs_docs_layout_select' => [ 'layout-7', 'layout-1', 'layout-8', 'layout-5' ],
25 'betterdocs_archive_layout_select' => [ 'layout-7', 'layout-1', 'layout-8', 'layout-4' ],
26 'betterdocs_single_layout_select' => [ 'layout-8', 'layout-9', 'layout-10', 'layout-1' ],
27 'betterdocs_search_layout_select' => [ 'layout-2', 'layout-1' ],
28 ];
29
30 public function permission_check(): bool {
31 return current_user_can( 'edit_theme_options' );
32 }
33
34 public function register() {
35 $this->post( 'customize/layouts', [ $this, 'save_layouts' ] );
36 }
37
38 /**
39 * Persist the chosen layouts as theme_mods (called once, on wizard Finish).
40 * Each { key => value } pair is validated against the allowlist; unknown
41 * keys/values are skipped.
42 */
43 public function save_layouts( WP_REST_Request $request ) {
44 $layouts = (array) $request->get_param( 'layouts' );
45 $saved = [];
46
47 foreach ( $layouts as $key => $value ) {
48 $value = (string) $value;
49 if ( isset( self::ALLOWED[ $key ] ) && in_array( $value, self::ALLOWED[ $key ], true ) ) {
50 set_theme_mod( $key, $value );
51 $saved[ $key ] = $value;
52
53 /**
54 * Fires after a layout is saved from the Quick Setup customize step.
55 *
56 * @param string $key
57 * @param string $value
58 */
59 do_action( 'betterdocs_customize_layout_saved', $key, $value );
60 }
61 }
62
63 return $this->success( [ 'saved' => $saved ] );
64 }
65 }
66