1 | <?php |
||||||
2 | /** |
||||||
3 | * LSX Team Frontend Class |
||||||
4 | * |
||||||
5 | * @package LSX Team |
||||||
6 | * @author LightSpeed |
||||||
7 | * @license GPL3 |
||||||
8 | * @link |
||||||
9 | * @copyright 2018 LightSpeed |
||||||
10 | */ |
||||||
11 | |||||||
12 | namespace lsx_team\classes; |
||||||
13 | |||||||
14 | class LSX_Team_Frontend { |
||||||
15 | |||||||
16 | /** |
||||||
17 | * Holds the previous role, so we know when to output a new title. |
||||||
18 | */ |
||||||
19 | var $previous_role = ''; |
||||||
20 | |||||||
21 | |||||||
22 | public function __construct() { |
||||||
23 | |||||||
24 | $this->options = team_get_options(); |
||||||
25 | |||||||
26 | add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5 ); |
||||||
27 | add_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ), 10, 2 ); |
||||||
28 | add_filter( 'template_include', array( $this, 'single_template_include' ), 99 ); |
||||||
29 | add_filter( 'template_include', array( $this, 'archive_template_include' ), 99 ); |
||||||
30 | |||||||
31 | if ( ! empty( $this->options['display']['team_disable_single'] ) ) { |
||||||
32 | add_action( 'template_redirect', array( $this, 'disable_single' ) ); |
||||||
33 | } |
||||||
34 | |||||||
35 | if ( ! empty( $this->options['display']['group_by_role'] ) ) { |
||||||
36 | add_action( 'pre_get_posts', array( $this, 'pre_get_posts_order_by_role' ) ); |
||||||
37 | add_action( 'lsx_entry_before', array( $this, 'entry_before' ) ); |
||||||
38 | } |
||||||
39 | |||||||
40 | add_action( 'pre_get_posts', array( $this, 'disable_pagination_on_archive' ) ); |
||||||
41 | |||||||
42 | if ( is_admin() ) { |
||||||
43 | add_filter( 'lsx_customizer_colour_selectors_body', array( $this, 'customizer_body_colours_handler' ), 15, 2 ); |
||||||
44 | } |
||||||
45 | |||||||
46 | add_filter( 'lsx_fonts_css', array( $this, 'customizer_fonts_handler' ), 15 ); |
||||||
47 | add_filter( 'lsx_banner_title', array( $this, 'lsx_banner_archive_title' ), 15 ); |
||||||
48 | add_filter( 'lsx_banner_title', array( $this, 'lsx_banner_single_title' ), 15 ); |
||||||
49 | add_filter( 'get_the_archive_title', array( $this, 'get_the_archive_title' ), 100 ); |
||||||
50 | |||||||
51 | add_filter( 'excerpt_more_p', array( $this, 'change_excerpt_more' ) ); |
||||||
52 | add_filter( 'excerpt_length', array( $this, 'change_excerpt_length' ) ); |
||||||
53 | add_filter( 'excerpt_strip_tags', array( $this, 'change_excerpt_strip_tags' ) ); |
||||||
54 | |||||||
55 | add_filter( 'wpseo_schema_graph_pieces', array( $this, 'add_graph_pieces' ), 11, 2 ); |
||||||
56 | } |
||||||
57 | |||||||
58 | /** |
||||||
59 | * Return an instance of this class. |
||||||
60 | * |
||||||
61 | * @since 1.0.0 |
||||||
62 | * |
||||||
63 | * @return object lsx_team\classes A single instance of this class. |
||||||
64 | */ |
||||||
65 | public static function get_instance() { |
||||||
66 | // If the single instance hasn't been set, set it now. |
||||||
67 | if ( null === self::$instance ) { |
||||||
68 | self::$instance = new self(); |
||||||
69 | } |
||||||
70 | return self::$instance; |
||||||
71 | } |
||||||
72 | |||||||
73 | public function enqueue_scripts( $plugins ) { |
||||||
74 | $has_slick = wp_script_is( 'slick', 'queue' ); |
||||||
75 | |||||||
76 | if ( ! $has_slick ) { |
||||||
77 | wp_enqueue_style( 'slick', LSX_TEAM_URL . 'assets/css/vendor/slick.css', array(), LSX_TEAM_VER, null ); |
||||||
78 | wp_enqueue_script( 'slick', LSX_TEAM_URL . 'assets/js/vendor/slick.min.js', array( 'jquery' ), null, LSX_TEAM_VER, true ); |
||||||
0 ignored issues
–
show
Bug
introduced
by
![]() The call to
wp_enqueue_script() has too many arguments starting with true .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above. ![]() |
|||||||
79 | } |
||||||
80 | |||||||
81 | wp_enqueue_script( 'lsx-team', LSX_TEAM_URL . 'assets/js/lsx-team.min.js', array( 'jquery', 'slick' ), LSX_TEAM_VER, true ); |
||||||
82 | |||||||
83 | $params = apply_filters( 'lsx_team_js_params', array( |
||||||
84 | 'ajax_url' => admin_url( 'admin-ajax.php' ), |
||||||
85 | )); |
||||||
86 | |||||||
87 | wp_localize_script( 'lsx-team', 'lsx_team_params', $params ); |
||||||
88 | |||||||
89 | wp_enqueue_style( 'lsx-team', LSX_TEAM_URL . 'assets/css/lsx-team.css', array(), LSX_TEAM_VER ); |
||||||
90 | wp_style_add_data( 'lsx-team', 'rtl', 'replace' ); |
||||||
91 | } |
||||||
92 | |||||||
93 | /** |
||||||
94 | * Allow data params for Slick slider addon. |
||||||
95 | */ |
||||||
96 | public function wp_kses_allowed_html( $allowedtags, $context ) { |
||||||
97 | $allowedtags['div']['data-slick'] = true; |
||||||
98 | return $allowedtags; |
||||||
99 | } |
||||||
100 | |||||||
101 | /** |
||||||
102 | * Single template. |
||||||
103 | */ |
||||||
104 | public function single_template_include( $template ) { |
||||||
105 | if ( is_main_query() && is_singular( 'team' ) ) { |
||||||
106 | if ( empty( locate_template( array( 'single-team.php' ) ) ) && file_exists( LSX_TEAM_PATH . 'templates/single-team.php' ) ) { |
||||||
107 | $template = LSX_TEAM_PATH . 'templates/single-team.php'; |
||||||
108 | } |
||||||
109 | } |
||||||
110 | |||||||
111 | return $template; |
||||||
112 | } |
||||||
113 | |||||||
114 | /** |
||||||
115 | * Archive template. |
||||||
116 | */ |
||||||
117 | public function archive_template_include( $template ) { |
||||||
118 | if ( is_main_query() && is_post_type_archive( 'team' ) ) { |
||||||
119 | if ( empty( locate_template( array( 'archive-team.php' ) ) ) && file_exists( LSX_TEAM_PATH . 'templates/archive-team.php' ) ) { |
||||||
120 | $template = LSX_TEAM_PATH . 'templates/archive-team.php'; |
||||||
121 | } |
||||||
122 | } |
||||||
123 | |||||||
124 | if ( is_tax( 'team_role' ) ) { |
||||||
125 | if ( empty( locate_template( array( 'taxonomy-team_role.php' ) ) ) && file_exists( LSX_TEAM_PATH . 'templates/taxonomy-team_role.php' ) ) { |
||||||
126 | $template = LSX_TEAM_PATH . 'templates/taxonomy-team_role.php'; |
||||||
127 | } |
||||||
128 | } |
||||||
129 | |||||||
130 | return $template; |
||||||
131 | } |
||||||
132 | |||||||
133 | /** |
||||||
134 | * Removes access to single team member posts. |
||||||
135 | */ |
||||||
136 | public function disable_single() { |
||||||
137 | $queried_post_type = get_query_var( 'post_type' ); |
||||||
138 | |||||||
139 | if ( is_single() && 'team' === $queried_post_type ) { |
||||||
140 | wp_redirect( home_url(), 301 ); |
||||||
141 | exit; |
||||||
142 | } |
||||||
143 | } |
||||||
144 | |||||||
145 | /** |
||||||
146 | * Disable pagination. |
||||||
147 | */ |
||||||
148 | public function disable_pagination_on_archive( $query ) { |
||||||
149 | if ( $query->is_main_query() && $query->is_post_type_archive( 'team' ) ) { |
||||||
150 | $query->set( 'posts_per_page', -1 ); |
||||||
151 | $query->set( 'no_found_rows', true ); |
||||||
152 | } |
||||||
153 | } |
||||||
154 | |||||||
155 | /** |
||||||
156 | * Handle fonts that might be change by LSX Customiser. |
||||||
157 | */ |
||||||
158 | public function customizer_fonts_handler( $css_fonts ) { |
||||||
159 | global $wp_filesystem; |
||||||
160 | |||||||
161 | $css_fonts_file = LSX_TEAM_PATH . '/assets/css/lsx-team-fonts.css'; |
||||||
162 | |||||||
163 | if ( file_exists( $css_fonts_file ) ) { |
||||||
164 | if ( empty( $wp_filesystem ) ) { |
||||||
165 | require_once( ABSPATH . 'wp-admin/includes/file.php' ); |
||||||
166 | WP_Filesystem(); |
||||||
167 | } |
||||||
168 | |||||||
169 | if ( $wp_filesystem ) { |
||||||
170 | $css_fonts .= $wp_filesystem->get_contents( $css_fonts_file ); |
||||||
171 | } |
||||||
172 | } |
||||||
173 | |||||||
174 | return $css_fonts; |
||||||
175 | } |
||||||
176 | |||||||
177 | /** |
||||||
178 | * Handle body colours that might be change by LSX Customiser. |
||||||
179 | */ |
||||||
180 | public function customizer_body_colours_handler( $css, $colors ) { |
||||||
181 | $css .= ' |
||||||
182 | @import "' . LSX_TEAM_PATH . '/assets/css/scss/customizer-team-body-colours"; |
||||||
183 | |||||||
184 | /** |
||||||
185 | * LSX Customizer - Body (LSX Team) |
||||||
186 | */ |
||||||
187 | @include customizer-team-body-colours ( |
||||||
188 | $bg: ' . $colors['background_color'] . ', |
||||||
189 | $breaker: ' . $colors['body_line_color'] . ', |
||||||
190 | $color: ' . $colors['body_text_color'] . ', |
||||||
191 | $link: ' . $colors['body_link_color'] . ', |
||||||
192 | $hover: ' . $colors['body_link_hover_color'] . ', |
||||||
193 | $small: ' . $colors['body_text_small_color'] . ' |
||||||
194 | ); |
||||||
195 | '; |
||||||
196 | |||||||
197 | return $css; |
||||||
198 | } |
||||||
199 | |||||||
200 | /** |
||||||
201 | * Change the LSX Banners title for team archive. |
||||||
202 | */ |
||||||
203 | public function lsx_banner_archive_title( $title ) { |
||||||
204 | if ( is_main_query() && is_post_type_archive( 'team' ) ) { |
||||||
205 | $title = '<h1 class="page-title">' . esc_html__( 'Team', 'lsx-team' ) . '</h1>'; |
||||||
206 | } |
||||||
207 | |||||||
208 | return $title; |
||||||
209 | } |
||||||
210 | |||||||
211 | /** |
||||||
212 | * Change the LSX Banners title for team single. |
||||||
213 | */ |
||||||
214 | public function lsx_banner_single_title( $title ) { |
||||||
215 | if ( is_main_query() && is_singular( 'team' ) ) { |
||||||
216 | $title = '<h1 class="page-title">' . esc_html__( 'Team', 'lsx-team' ) . '</h1>'; |
||||||
217 | } |
||||||
218 | |||||||
219 | return $title; |
||||||
220 | } |
||||||
221 | |||||||
222 | /** |
||||||
223 | * Remove the "Archives:" from the post type recipes. |
||||||
224 | * |
||||||
225 | * @param string $title the term title. |
||||||
226 | * @return string |
||||||
227 | */ |
||||||
228 | public function get_the_archive_title( $title ) { |
||||||
229 | if ( is_post_type_archive( 'team' ) ) { |
||||||
230 | $title = __( 'Team', 'lsx-health-plan' ); |
||||||
231 | } |
||||||
232 | return $title; |
||||||
233 | } |
||||||
234 | |||||||
235 | /** |
||||||
236 | * Remove the "continue reading" when the single is disabled. |
||||||
237 | */ |
||||||
238 | public function change_excerpt_more( $excerpt_more ) { |
||||||
239 | global $post; |
||||||
240 | |||||||
241 | if ( 'team' === $post->post_type ) { |
||||||
242 | if ( ! empty( team_get_option( 'team_disable_single' ) ) ) { |
||||||
243 | $excerpt_more = ''; |
||||||
244 | } |
||||||
245 | } |
||||||
246 | |||||||
247 | return $excerpt_more; |
||||||
248 | } |
||||||
249 | |||||||
250 | /** |
||||||
251 | * Change the word count when crop the content to excerpt (single team relations). |
||||||
252 | */ |
||||||
253 | public function change_excerpt_length( $excerpt_word_count ) { |
||||||
254 | global $post; |
||||||
255 | |||||||
256 | if ( is_singular( 'team' ) && ( 'project' === $post->post_type || 'testimonial' === $post->post_type ) ) { |
||||||
257 | $excerpt_word_count = 20; |
||||||
258 | } |
||||||
259 | |||||||
260 | return $excerpt_word_count; |
||||||
261 | } |
||||||
262 | |||||||
263 | /** |
||||||
264 | * Change the allowed tags crop the content to excerpt (single team relations). |
||||||
265 | */ |
||||||
266 | public function change_excerpt_strip_tags( $allowed_tags ) { |
||||||
267 | global $post; |
||||||
268 | |||||||
269 | if ( is_singular( 'team' ) && ( 'project' === $post->post_type || 'testimonial' === $post->post_type ) ) { |
||||||
270 | $allowed_tags = '<p>,<br>,<b>,<strong>,<i>,<u>,<ul>,<ol>,<li>,<span>'; |
||||||
271 | } |
||||||
272 | |||||||
273 | return $allowed_tags; |
||||||
274 | } |
||||||
275 | |||||||
276 | /** |
||||||
277 | * @param $query \WP_Query() |
||||||
278 | * |
||||||
279 | * @return mixed |
||||||
280 | */ |
||||||
281 | public function pre_get_posts_order_by_role( $query ) { |
||||||
282 | if ( ! is_admin() && $query->is_main_query() && $query->is_post_type_archive( 'team' ) ) { |
||||||
283 | $post_ids = $this->order_by_role_query(); |
||||||
284 | if ( ! empty( $post_ids ) ) { |
||||||
285 | $query->set( 'post__in', $post_ids ); |
||||||
286 | $query->set( 'orderby', 'post__in' ); |
||||||
287 | } |
||||||
288 | } |
||||||
289 | return $query; |
||||||
290 | } |
||||||
291 | |||||||
292 | /** |
||||||
293 | * Grabs the team members ordered by the Roles Slug and the title alphabetical |
||||||
294 | */ |
||||||
295 | public function order_by_role_query() { |
||||||
296 | global $wpdb; |
||||||
297 | $post_ids = array(); |
||||||
298 | |||||||
299 | $results = $wpdb->get_results( $wpdb->prepare(" |
||||||
300 | SELECT posts.ID, posts.post_title, terms.slug |
||||||
301 | FROM {$wpdb->posts} AS posts |
||||||
302 | INNER JOIN {$wpdb->term_relationships} as rels |
||||||
303 | INNER JOIN {$wpdb->term_taxonomy} as tax |
||||||
304 | INNER JOIN {$wpdb->terms} as terms |
||||||
305 | WHERE posts.post_type = '%s' |
||||||
306 | AND posts.post_status = '%s' |
||||||
307 | AND posts.ID = rels.object_id |
||||||
308 | AND rels.term_taxonomy_id = tax.term_taxonomy_id |
||||||
309 | AND tax.taxonomy = '%s' |
||||||
310 | AND tax.term_id = terms.term_id |
||||||
311 | ORDER BY terms.lsx_team_term_order, posts.post_name |
||||||
312 | ", 'team', 'publish', 'team_role' ) ); |
||||||
313 | |||||||
314 | if ( ! empty( $results ) ) { |
||||||
315 | $post_ids = wp_list_pluck( $results, 'ID' ); |
||||||
316 | } |
||||||
317 | return $post_ids; |
||||||
318 | } |
||||||
319 | |||||||
320 | |||||||
321 | /** |
||||||
322 | * Outputs the Role Title if its found |
||||||
323 | */ |
||||||
324 | public function entry_before() { |
||||||
325 | if ( is_post_type_archive( 'team' ) ) { |
||||||
326 | $all_roles = wc_get_object_terms( get_the_ID(), 'team_role' ); |
||||||
327 | $this_role = ''; |
||||||
328 | $this_role_id = ''; |
||||||
329 | if ( ! empty( $all_roles ) ) { |
||||||
330 | $this_role = $all_roles[0]; |
||||||
331 | $this_role_id = $this_role->term_id; |
||||||
332 | } |
||||||
333 | |||||||
334 | if ( '' === $this->previous_role || $this->previous_role !== $this_role_id ) { |
||||||
335 | echo '<h2 class="role-title text-center col-xs-12 col-sm-12 col-md-12">' . wp_kses_post( $this_role->name ) . '</h2>'; |
||||||
336 | $this->previous_role = $this_role_id; |
||||||
337 | } |
||||||
338 | } |
||||||
339 | } |
||||||
340 | /** |
||||||
341 | * Adds Pieces |
||||||
342 | */ |
||||||
343 | public function add_graph_pieces( $pieces, $context ) { |
||||||
344 | // Scheme Class. |
||||||
345 | if ( class_exists( 'LSX_Schema_Graph_Piece' ) ) { |
||||||
346 | require_once LSX_TEAM_PATH . '/classes/class-lsx-team-schema.php'; |
||||||
347 | $pieces[] = new \LSX_Team_Schema( $context ); |
||||||
348 | } |
||||||
349 | return $pieces; |
||||||
350 | } |
||||||
351 | } |
||||||
352 | |||||||
353 | $lsx_team_frontend = new LSX_Team_Frontend(); |
||||||
354 |