1 | <?php |
||||||
2 | /** |
||||||
3 | * LSX Projects Frontend Class |
||||||
4 | * |
||||||
5 | * @package LSX Projects |
||||||
6 | * @author LightSpeed |
||||||
7 | * @license GPL3 |
||||||
8 | * @link |
||||||
9 | * @copyright 2017 LightSpeed |
||||||
10 | */ |
||||||
11 | class LSX_Projects_Frontend { |
||||||
12 | |||||||
13 | public function __construct() { |
||||||
14 | $this->options = projects_get_options(); |
||||||
15 | |||||||
16 | add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5 ); |
||||||
17 | add_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ), 10, 2 ); |
||||||
18 | add_filter( 'template_include', array( $this, 'single_template_include' ), 99 ); |
||||||
19 | add_filter( 'template_include', array( $this, 'archive_template_include' ), 99 ); |
||||||
20 | |||||||
21 | if ( ! empty( $this->options['display']['projects_disable_single'] ) ) { |
||||||
22 | add_action( 'template_redirect', array( $this, 'disable_single' ) ); |
||||||
23 | } |
||||||
24 | |||||||
25 | if ( is_admin() ) { |
||||||
26 | add_filter( 'lsx_customizer_colour_selectors_body', array( $this, 'customizer_body_colours_handler' ), 15, 2 ); |
||||||
27 | } |
||||||
28 | |||||||
29 | add_filter( 'lsx_banner_title', array( $this, 'lsx_banner_archive_title' ), 15 ); |
||||||
30 | |||||||
31 | add_filter( 'excerpt_more_p', array( $this, 'change_excerpt_more' ) ); |
||||||
32 | add_filter( 'excerpt_length', array( $this, 'change_excerpt_length' ) ); |
||||||
33 | add_filter( 'excerpt_strip_tags', array( $this, 'change_excerpt_strip_tags' ) ); |
||||||
34 | |||||||
35 | add_filter( 'pre_get_posts', array( $this, 'posts_per_page' ) ); |
||||||
36 | add_action( 'wp_footer', array( $this, 'add_form_modal' ) ); |
||||||
37 | } |
||||||
38 | |||||||
39 | public function enqueue_scripts() { |
||||||
40 | $has_slick = wp_script_is( 'slick', 'queue' ); |
||||||
41 | |||||||
42 | if ( ! $has_slick ) { |
||||||
43 | wp_enqueue_style( 'slick', LSX_PROJECTS_URL . 'assets/css/vendor/slick.css', array(), LSX_PROJECTS_VER, null ); |
||||||
44 | wp_enqueue_script( 'slick', LSX_PROJECTS_URL . 'assets/js/vendor/slick.min.js', array( 'jquery' ), null, LSX_PROJECTS_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. ![]() |
|||||||
45 | } |
||||||
46 | |||||||
47 | $has_scrolltofixed = wp_script_is( 'scrolltofixed', 'queue' ); |
||||||
48 | |||||||
49 | if ( ! $has_scrolltofixed ) { |
||||||
50 | wp_enqueue_script( 'scrolltofixed', LSX_PROJECTS_URL . 'assets/js/vendor/jquery-scrolltofixed-min.js', array( 'jquery' ), null, LSX_PROJECTS_VER, true ); |
||||||
51 | } |
||||||
52 | |||||||
53 | $has_isotope = wp_script_is( 'isotope', 'queue' ); |
||||||
54 | |||||||
55 | if ( ! $has_isotope ) { |
||||||
56 | wp_enqueue_script( 'isotope', LSX_PROJECTS_URL . 'assets/js/vendor/isotope.pkgd.min.js', array( 'jquery' ), null, LSX_PROJECTS_VER, true ); |
||||||
57 | } |
||||||
58 | |||||||
59 | wp_enqueue_script( 'lsx-projects', LSX_PROJECTS_URL . 'assets/js/lsx-projects.min.js', array( 'jquery', 'slick', 'scrolltofixed', 'isotope' ), LSX_PROJECTS_VER, true ); |
||||||
60 | |||||||
61 | $params = apply_filters( 'lsx_projects_js_params', array( |
||||||
62 | 'ajax_url' => admin_url( 'admin-ajax.php' ), |
||||||
63 | )); |
||||||
64 | |||||||
65 | wp_localize_script( 'lsx-projects', 'lsx_customizer_params', $params ); |
||||||
66 | |||||||
67 | wp_enqueue_style( 'lsx-projects', LSX_PROJECTS_URL . 'assets/css/lsx-projects.css', array(), LSX_PROJECTS_VER ); |
||||||
68 | wp_style_add_data( 'lsx-projects', 'rtl', 'replace' ); |
||||||
69 | } |
||||||
70 | |||||||
71 | /** |
||||||
72 | * Allow data params for Slick slider addon. |
||||||
73 | */ |
||||||
74 | public function wp_kses_allowed_html( $allowedtags, $context ) { |
||||||
75 | $allowedtags['div']['data-slick'] = true; |
||||||
76 | return $allowedtags; |
||||||
77 | } |
||||||
78 | |||||||
79 | /** |
||||||
80 | * Single template. |
||||||
81 | */ |
||||||
82 | public function single_template_include( $template ) { |
||||||
83 | if ( is_main_query() && is_singular( 'project' ) ) { |
||||||
84 | if ( empty( locate_template( array( 'single-projects.php' ) ) ) && file_exists( LSX_PROJECTS_PATH . 'templates/single-projects.php' ) ) { |
||||||
85 | $template = LSX_PROJECTS_PATH . 'templates/single-projects.php'; |
||||||
86 | } |
||||||
87 | } |
||||||
88 | |||||||
89 | return $template; |
||||||
90 | } |
||||||
91 | |||||||
92 | /** |
||||||
93 | * Archive template. |
||||||
94 | */ |
||||||
95 | public function archive_template_include( $template ) { |
||||||
96 | if ( is_main_query() && ( is_post_type_archive( 'project' ) || is_tax( 'project-group' ) ) ) { |
||||||
97 | if ( empty( locate_template( array( 'archive-projects.php' ) ) ) && file_exists( LSX_PROJECTS_PATH . 'templates/archive-projects.php' ) ) { |
||||||
98 | $template = LSX_PROJECTS_PATH . 'templates/archive-projects.php'; |
||||||
99 | } |
||||||
100 | } |
||||||
101 | |||||||
102 | return $template; |
||||||
103 | } |
||||||
104 | |||||||
105 | /** |
||||||
106 | * Removes access to single project member posts. |
||||||
107 | */ |
||||||
108 | public function disable_single() { |
||||||
109 | $queried_post_type = get_query_var( 'post_type' ); |
||||||
110 | |||||||
111 | if ( is_single() && 'project' === $queried_post_type ) { |
||||||
112 | wp_redirect( home_url(), 301 ); |
||||||
113 | exit; |
||||||
114 | } |
||||||
115 | } |
||||||
116 | |||||||
117 | /** |
||||||
118 | * Handle body colours that might be change by LSX Customiser |
||||||
119 | */ |
||||||
120 | public function customizer_body_colours_handler( $css, $colors ) { |
||||||
121 | $css .= ' |
||||||
122 | @import "' . LSX_PROJECTS_PATH . '/assets/css/scss/customizer-projects-body-colours"; |
||||||
123 | |||||||
124 | /** |
||||||
125 | * LSX Customizer - Body (LSX Projects) |
||||||
126 | */ |
||||||
127 | @include customizer-projects-body-colours ( |
||||||
128 | $bg: ' . $colors['background_color'] . ', |
||||||
129 | $breaker: ' . $colors['body_line_color'] . ', |
||||||
130 | $color: ' . $colors['body_text_color'] . ', |
||||||
131 | $link: ' . $colors['body_link_color'] . ', |
||||||
132 | $hover: ' . $colors['body_link_hover_color'] . ', |
||||||
133 | $small: ' . $colors['body_text_small_color'] . ' |
||||||
134 | ); |
||||||
135 | '; |
||||||
136 | |||||||
137 | return $css; |
||||||
138 | } |
||||||
139 | |||||||
140 | /** |
||||||
141 | * Change the LSX Banners title for project archive. |
||||||
142 | */ |
||||||
143 | public function lsx_banner_archive_title( $title ) { |
||||||
144 | if ( is_main_query() && is_post_type_archive( 'project' ) ) { |
||||||
145 | $title = '<h1 class="page-title">' . esc_html__( 'Portfolio', 'lsx-projects' ) . '</h1>'; |
||||||
146 | } |
||||||
147 | |||||||
148 | if ( is_main_query() && is_tax( 'project-group' ) ) { |
||||||
149 | $tax = get_queried_object(); |
||||||
150 | $title = '<h1 class="page-title">' . esc_html__( 'Project Type', 'lsx-projects' ) . ': ' . apply_filters( 'the_title', $tax->name ) . '</h1>'; |
||||||
151 | } |
||||||
152 | |||||||
153 | return $title; |
||||||
154 | } |
||||||
155 | |||||||
156 | /** |
||||||
157 | * Remove the "continue reading" when the single is disabled. |
||||||
158 | */ |
||||||
159 | public function change_excerpt_more( $excerpt_more ) { |
||||||
160 | global $post; |
||||||
161 | |||||||
162 | if ( 'project' === $post->post_type ) { |
||||||
163 | if ( ! empty( $this->options['display']['projects_disable_single'] ) ) { |
||||||
164 | $excerpt_more = ''; |
||||||
165 | } |
||||||
166 | } |
||||||
167 | |||||||
168 | return $excerpt_more; |
||||||
169 | } |
||||||
170 | |||||||
171 | /** |
||||||
172 | * Change the word count when crop the content to excerpt (homepage widget). |
||||||
173 | */ |
||||||
174 | public function change_excerpt_length( $excerpt_word_count ) { |
||||||
175 | global $post; |
||||||
176 | |||||||
177 | if ( is_front_page() && 'project' === $post->post_type ) { |
||||||
178 | $excerpt_word_count = 20; |
||||||
179 | } |
||||||
180 | |||||||
181 | if ( is_singular( 'project' ) && ( 'team' === $post->post_type || 'testimonial' === $post->post_type ) ) { |
||||||
182 | $excerpt_word_count = 20; |
||||||
183 | } |
||||||
184 | |||||||
185 | return $excerpt_word_count; |
||||||
186 | } |
||||||
187 | |||||||
188 | /** |
||||||
189 | * Change the allowed tags crop the content to excerpt (homepage widget). |
||||||
190 | */ |
||||||
191 | public function change_excerpt_strip_tags( $allowed_tags ) { |
||||||
192 | global $post; |
||||||
193 | |||||||
194 | if ( is_front_page() && 'project' === $post->post_type ) { |
||||||
195 | $allowed_tags = '<p>,<br>,<b>,<strong>,<i>,<u>,<ul>,<ol>,<li>,<span>'; |
||||||
196 | } |
||||||
197 | |||||||
198 | if ( is_singular( 'project' ) && ( 'team' === $post->post_type || 'testimonial' === $post->post_type ) ) { |
||||||
199 | $allowed_tags = '<p>,<br>,<b>,<strong>,<i>,<u>,<ul>,<ol>,<li>,<span>'; |
||||||
200 | } |
||||||
201 | |||||||
202 | return $allowed_tags; |
||||||
203 | } |
||||||
204 | |||||||
205 | /** |
||||||
206 | * Change posts per page counter for archive. |
||||||
207 | */ |
||||||
208 | public function posts_per_page( $query ) { |
||||||
209 | if ( ! is_admin() && $query->is_main_query() ) { |
||||||
210 | if ( $query->is_post_type_archive( 'project' ) || $query->is_tax( 'project-group' ) ) { |
||||||
211 | if ( ! function_exists( 'lsx_search' ) ) { |
||||||
212 | $query->set( 'posts_per_page', -1 ); |
||||||
213 | } else { |
||||||
214 | $query->set( 'posts_per_page', '12' ); |
||||||
215 | } |
||||||
216 | } |
||||||
217 | } |
||||||
218 | |||||||
219 | return $query; |
||||||
220 | } |
||||||
221 | |||||||
222 | /** |
||||||
223 | * Add form modal |
||||||
224 | */ |
||||||
225 | public function add_form_modal() { |
||||||
226 | |||||||
227 | if ( empty( $this->options['display']['projects_modal_enable'] ) ) { |
||||||
228 | return ''; |
||||||
229 | } |
||||||
230 | |||||||
231 | if ( empty( $this->options['display']['projects_modal_cta_label'] ) || empty( $this->options['display']['projects_modal_form_id'] ) || empty( $this->options['display']['projects_wpform_modal_form_id'] ) ) { |
||||||
232 | return ''; |
||||||
233 | } |
||||||
234 | |||||||
235 | if ( ! is_singular( 'project' ) ) { |
||||||
236 | return ''; |
||||||
237 | } |
||||||
238 | ?> |
||||||
239 | <div class="lsx-modal modal fade" id="lsx-project-contact" role="dialog"> |
||||||
240 | <div class="modal-dialog"> |
||||||
241 | <div class="modal-content"> |
||||||
242 | <button type="button" class="close" data-dismiss="modal">×</button> |
||||||
243 | |||||||
244 | <div class="modal-header"> |
||||||
245 | <h4 class="modal-title"><?php echo esc_html( $this->options['display']['projects_modal_cta_label'] ); ?></h4> |
||||||
246 | </div> |
||||||
247 | |||||||
248 | <div class="modal-body"> |
||||||
249 | <?php |
||||||
250 | if ( ! empty( $this->options['display']['projects_modal_form_id'] ) ) { |
||||||
251 | echo do_shortcode( '[caldera_form id="' . $this->options['display']['projects_modal_form_id'] . '"]' ); |
||||||
252 | } elseif ( ! empty( $this->options['display']['projects_wpform_modal_form_id'] ) ) { |
||||||
253 | echo do_shortcode( '[wpforms id="' . $this->options['display']['projects_wpform_modal_form_id'] . '"]' ); |
||||||
254 | } ?> |
||||||
255 | </div> |
||||||
256 | </div> |
||||||
257 | </div> |
||||||
258 | </div> |
||||||
259 | <?php |
||||||
260 | } |
||||||
261 | |||||||
262 | } |
||||||
263 | |||||||
264 | global $lsx_projects_frontend; |
||||||
265 | $lsx_projects_frontend = new LSX_Projects_Frontend(); |
||||||
266 |