1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace GeminiLabs\Castor; |
4
|
|
|
|
5
|
|
|
use GeminiLabs\Castor\Facades\Development; |
6
|
|
|
use GeminiLabs\Castor\Facades\Template; |
7
|
|
|
use GeminiLabs\Castor\Facades\Theme; |
8
|
|
|
use GeminiLabs\Castor\Facades\Utility; |
9
|
|
|
use WP_Customize_Manager; |
10
|
|
|
|
11
|
|
|
class Controller |
12
|
|
|
{ |
13
|
|
|
/** |
14
|
|
|
* @return void |
15
|
|
|
* @action after_setup_theme |
16
|
|
|
*/ |
17
|
|
|
public function afterSetupTheme() |
18
|
|
|
{ |
19
|
|
|
add_editor_style( Theme::assetUri( 'css/editor.css' )); |
20
|
|
|
add_theme_support( 'customize-selective-refresh-widgets' ); |
21
|
|
|
add_theme_support( 'html5', ['caption', 'comment-form', 'comment-list', 'gallery', 'search-form'] ); |
22
|
|
|
add_theme_support( 'post-thumbnails' ); |
23
|
|
|
add_theme_support( 'soil-clean-up' ); |
24
|
|
|
add_theme_support( 'soil-jquery-cdn' ); |
25
|
|
|
add_theme_support( 'soil-nav-walker' ); |
26
|
|
|
add_theme_support( 'soil-nice-search' ); |
27
|
|
|
add_theme_support( 'soil-relative-urls' ); |
28
|
|
|
add_theme_support( 'title-tag' ); |
29
|
|
|
load_theme_textdomain( 'castor', Theme::paths( 'dir.template' ) . '/languages' ); |
30
|
|
|
|
31
|
|
|
$menus = apply_filters( 'castor/register/nav_menus', [ |
32
|
|
|
'main_menu' => __( 'Main Menu', 'castor' ), |
33
|
|
|
]); |
34
|
|
|
|
35
|
|
|
foreach( $menus as $location => $description ) { |
36
|
|
|
register_nav_menu( $location, $description ); |
37
|
|
|
} |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
/** |
41
|
|
|
* @return array |
42
|
|
|
* @filter body_class |
43
|
|
|
*/ |
44
|
|
|
public function filterBodyClasses( array $classes ) |
45
|
|
|
{ |
46
|
|
|
if( Theme::displaySidebar() ) { |
47
|
|
|
$classes[] = 'has-sidebar'; |
48
|
|
|
} |
49
|
|
|
return array_keys( array_flip( $classes )); |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
/** |
53
|
|
|
* @return string |
54
|
|
|
* @filter login_headertitle |
55
|
|
|
*/ |
56
|
|
|
public function filterLoginTitle() |
57
|
|
|
{ |
58
|
|
|
return get_bloginfo( 'name' ); |
59
|
|
|
} |
60
|
|
|
|
61
|
|
|
/** |
62
|
|
|
* @return string |
63
|
|
|
* @filter login_headerurl |
64
|
|
|
*/ |
65
|
|
|
public function filterLoginUrl() |
66
|
|
|
{ |
67
|
|
|
return get_bloginfo( 'url' ); |
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
/** |
71
|
|
|
* @return string |
72
|
|
|
* @filter template_include |
73
|
|
|
*/ |
74
|
|
|
public function filterTemplate( $template ) |
75
|
|
|
{ |
76
|
|
|
if( is_string( $template )) { |
77
|
|
|
$template = Template::setLayout( $template ); |
78
|
|
|
Development::storeTemplatePath( $template ); |
79
|
|
|
} |
80
|
|
|
return $template; |
81
|
|
|
} |
82
|
|
|
|
83
|
|
|
/** |
84
|
|
|
* @return array |
85
|
|
|
* @filter {$type}_template_hierarchy |
86
|
|
|
*/ |
87
|
|
|
public function filterTemplateHierarchy( array $templates ) |
88
|
|
|
{ |
89
|
|
|
return array_map( function( $template ) { |
90
|
|
|
return Utility::startWith( 'templates/', $template ); |
91
|
|
|
}, $templates ); |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
/** |
95
|
|
|
* @return void |
96
|
|
|
* @action admin_head |
97
|
|
|
* @action login_head |
98
|
|
|
*/ |
99
|
|
|
public function loadAdminFavicon() |
100
|
|
|
{ |
101
|
|
|
if( file_exists( Theme::assetPath( 'favicon/favicon-admin.ico' ))) { |
102
|
|
|
printf( '<link rel="shortcut icon" href="%s">', Theme::assetUri( 'favicon/favicon-admin.ico' )); |
103
|
|
|
} |
104
|
|
|
} |
105
|
|
|
|
106
|
|
|
/** |
107
|
|
|
* @return void |
108
|
|
|
* @action login_head |
109
|
|
|
*/ |
110
|
|
|
public function login() |
111
|
|
|
{ |
112
|
|
|
if( file_exists( Theme::assetPath( 'css/login.css' ))) { |
113
|
|
|
printf( '<link rel="stylesheet" href="%s">', Theme::assetUri( 'css/login.css' )); |
114
|
|
|
} |
115
|
|
|
} |
116
|
|
|
|
117
|
|
|
/** |
118
|
|
|
* @return void |
119
|
|
|
* @action admin_enqueue_scripts |
120
|
|
|
*/ |
121
|
|
|
public function registerAdminAssets() |
122
|
|
|
{ |
123
|
|
View Code Duplication |
if( file_exists( Theme::assetPath( 'css/admin.css' ))) { |
|
|
|
|
124
|
|
|
wp_enqueue_style( 'castor/admin.css', |
125
|
|
|
Theme::assetUri( 'css/admin.css' ), |
126
|
|
|
apply_filters( 'castor/enqueue/admin/css/deps', [] ), |
127
|
|
|
null |
128
|
|
|
); |
129
|
|
|
} |
130
|
|
View Code Duplication |
if( file_exists( Theme::assetPath( 'css/admin.js' ))) { |
|
|
|
|
131
|
|
|
wp_enqueue_script( 'castor/admin.js', |
132
|
|
|
Theme::assetUri( 'js/admin.js' ), |
133
|
|
|
apply_filters( 'castor/enqueue/admin/js/deps', [] ), |
134
|
|
|
null, |
135
|
|
|
true |
136
|
|
|
); |
137
|
|
|
} |
138
|
|
|
} |
139
|
|
|
|
140
|
|
|
/** |
141
|
|
|
* @return void |
142
|
|
|
* @action wp_enqueue_scripts |
143
|
|
|
*/ |
144
|
|
|
public function registerAssets() |
145
|
|
|
{ |
146
|
|
|
wp_enqueue_style( 'castor/main.css', |
147
|
|
|
Theme::assetUri( 'css/main.css' ), |
148
|
|
|
apply_filters( 'castor/enqueue/css/deps', [] ), |
149
|
|
|
null |
150
|
|
|
); |
151
|
|
|
wp_enqueue_script( 'castor/main.js', |
152
|
|
|
Theme::assetUri( 'js/main.js' ), |
153
|
|
|
apply_filters( 'castor/enqueue/js/deps', [] ), |
154
|
|
|
null, |
155
|
|
|
true |
156
|
|
|
); |
157
|
|
|
wp_localize_script( 'castor/main.js', apply_filters( 'castor/enqueue/js/localize/variable', 'globals' ), |
158
|
|
|
apply_filters( 'castor/enqueue/js/localize/variables', [ |
159
|
|
|
'ajax' => admin_url( 'admin-ajax.php' ), |
160
|
|
|
]) |
161
|
|
|
); |
162
|
|
|
} |
163
|
|
|
|
164
|
|
|
/** |
165
|
|
|
* @return void |
166
|
|
|
* @action customize_register |
167
|
|
|
*/ |
168
|
|
|
public function registerCustomizer( WP_Customize_Manager $manager ) |
169
|
|
|
{ |
170
|
|
|
$manager->get_setting( 'blogname' )->transport = 'postMessage'; |
171
|
|
|
$manager->selective_refresh->add_partial( 'blogname', [ |
172
|
|
|
'selector' => '.brand', |
173
|
|
|
'render_callback' => function() { |
174
|
|
|
bloginfo( 'name' ); |
175
|
|
|
}, |
176
|
|
|
]); |
177
|
|
|
} |
178
|
|
|
|
179
|
|
|
/** |
180
|
|
|
* @return void |
181
|
|
|
* @action customize_preview_init |
182
|
|
|
*/ |
183
|
|
|
public function registerCustomizerAssets() |
184
|
|
|
{ |
185
|
|
|
wp_enqueue_script( 'castor/customizer.js', Theme::assetUri( 'js/customizer.js' ), ['customize-preview'], null, true ); |
186
|
|
|
} |
187
|
|
|
|
188
|
|
|
/** |
189
|
|
|
* @return void |
190
|
|
|
* @action widgets_init |
191
|
|
|
*/ |
192
|
|
|
public function registerSidebars() |
193
|
|
|
{ |
194
|
|
|
$defaults = apply_filters( 'castor/register/sidebars/defaults', [ |
195
|
|
|
'before_widget' => '<div class="widget %1$s %2$s">', |
196
|
|
|
'after_widget' => '</div>', |
197
|
|
|
'before_title' => '<h4>', |
198
|
|
|
'after_title' => '</h4>', |
199
|
|
|
]); |
200
|
|
|
|
201
|
|
|
$sidebars = apply_filters( 'castor/register/sidebars', [ |
202
|
|
|
'sidebar-primary' => __( 'Primary Sidebar', 'castor' ), |
203
|
|
|
'sidebar-footer' => __( 'Footer Widgets', 'castor' ), |
204
|
|
|
]); |
205
|
|
|
|
206
|
|
|
foreach( $sidebars as $id => $name ) { |
207
|
|
|
register_sidebar([ |
208
|
|
|
'id' => $id, |
209
|
|
|
'name' => $name, |
210
|
|
|
] + $defaults ); |
211
|
|
|
} |
212
|
|
|
} |
213
|
|
|
} |
214
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.