-
Notifications
You must be signed in to change notification settings - Fork 1
/
Settings.php
152 lines (133 loc) · 4.51 KB
/
Settings.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
namespace PLUGIN_NAMESPACE;
if ( ! defined( 'ABSPATH' ) ) { exit; }
class Settings extends SettingsPageBuilder
{
protected $settings = array();
public function __construct(){
parent::__construct();
$this->set_options(
[
'slug' => 'custom-plugin-settings-slug',
'title' => 'SETTINGS PAGE TITLE',
'menu' => 'PLUGIN SETTINGS MENU NAME',
'description' => '<p>PLUGIN DESCRIPTION</p>'
]);
// Get and set the settings
$this->get_settings();
}
/**
* @return array of fieldnames matching the option keys
*/
private function get_option_keys(){
return [
'token' => 'PREFIX_api_token',
'username' => 'PREFIX_username',
'password' => 'PREFIX_password',
'post_type' => 'PREFIX_posttype',
'taxonomy' => 'PREFIX_taxonomy',
'fields' => 'PREFIX_fields',
];
}
/**
* Main function to setup settings page
* fields are grouped in sections by the parent item
* @return array (multidimensional)
*/
public function get_settings_fields(){
return array(
[
'id' => 'settings',
'label' => 'BuilderCMS Settings',
'fields'=> array(
[
'id' => 'PREFIX_token',
'label' => 'API Token',
'type' => 'text',
'size' => '5',
'placeholder' => '99999',
//'below' => 'Enter External API TOKEN',
],
[
'id' => 'PREFIX_username',
'label' => 'Username',
'type' => 'text',
'size' => '50',
'autocomplete'=>'off',
'placeholder' => 'username',
//'below' => '',
],
[
'id' => 'PREFIX_password',
'label' => 'Password',
'type' => 'password',
'size' => '50',
'autocomplete'=>'new-password',
'placeholder' => 'password',
//'below' => '',
],
)
],
[
'id' => 'post_settings',
'label' => 'Post Settings',
'fields'=> array(
[
'id' => 'PREFIX_posttype',
'label' => 'Post Type',
'type' => 'select',
'options' => $this->get_post_types_list(),
'below' => 'The post-type to sync',
],
[
'id' => 'PREFIX_taxonomy',
'label' => 'Status Taxonomy',
'type' => 'select',
'options' => $this->get_taxonomies_list(),
'below' => 'The category type used to set the status of posts',
]
)
],
[
'id' => 'fields',
'label' => 'Field Mapping',
'fields'=> array(
[
'id' => 'PREFIX_fields',
'label' => 'Map local fields to external fields. Separate field names with a colon, one per line. Example: local_field:external_field',
'type' => 'textarea',
'size' => '10',
'placeholder' => '',
],
)
],
);
}
/**
* @return array of plugin settings
*/
public function get_settings(){
if (!empty($this->settings) ) {
return $this->settings;
}
$keys = $this->get_option_keys();
foreach ($keys as $key => $option) {
$this->settings[$key] = get_option( $option );
}
return $this->settings;
}
public function get_terms_list()
{
$terms = get_terms([
'taxonomy' => $this->settings['taxonomy'],
'hide_empty' => true
]);
$terms_list = [];
if (!empty($terms)) {
foreach ($terms as $term) {
$terms_list[$term->slug] = $term->name;
}
}
return $terms_list;
}
} // End of class