Skip to content

Commit cd2fda9

Browse files
committed
Added fix for saving posts in editor when REST API shortcode in place, code cleanup.
1 parent 4320fae commit cd2fda9

File tree

3 files changed

+62
-222
lines changed

3 files changed

+62
-222
lines changed

README.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Donate link: https://connekthq.com/donate/
77
Tags: ajax load more, rest api, api, rest, ajax, infinite scroll, javascript, query, endpoints, endpoint, lazy load
88
Requires at least: 4.0
99
Tested up to: 6.1
10-
Stable tag: 1.2.1
10+
Stable tag: 1.2.2
1111
License: GPLv2 or later
1212
License URI: http://www.gnu.org/licenses/gpl-2.0.html
1313

@@ -74,6 +74,11 @@ Yes! As long as you are using the default /wp-json/ajaxloadmore/posts endpoint a
7474

7575
== Changelog ==
7676

77+
= 1.2.2 - December 30, 2022 =
78+
* FIX: Added fix for saving posts in editor when REST API shortcode in place.
79+
* UPDATE: Updated custo endpoint to rely on core ALM query params.
80+
* UPDATE: Code cleanup.
81+
7782
= 1.2.1 - January 20, 2021 =
7883
* UPDATE - Updated REST API endpoint to include `permissions_callback` which is now required to remove PHP notices/warnings.
7984

ajax-load-more-rest-api.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Author: Darren Cooney
88
* Twitter: @KaptonKaos
99
* Author URI: https://connekthq.com
10-
* Version: 1.2.1
10+
* Version: 1.2.2
1111
* License: GPL
1212
* Copyright: Darren Cooney & Connekt Media
1313
*
@@ -18,6 +18,14 @@
1818
exit; // Bail if accessed directly.
1919
}
2020

21+
/**
22+
* Define plugin constants.
23+
*/
24+
define( 'ALM_RESTAPI_PATH', plugin_dir_path( __FILE__ ) );
25+
define( 'ALM_RESTAPI_URL', plugins_url( '', __FILE__ ) );
26+
define( 'ALM_RESTAPI_VERSION', '1.2.2' );
27+
define( 'ALM_RESTAPI_RELEASE', 'December 30, 2022' );
28+
2129
/**
2230
* Activation hook
2331
*
@@ -55,14 +63,6 @@ function alm_restapi_admin_notice() {
5563
}
5664
add_action( 'admin_notices', 'alm_restapi_admin_notice' );
5765

58-
/**
59-
* Define plugin constants.
60-
*/
61-
define( 'ALM_RESTAPI_PATH', plugin_dir_path( __FILE__ ) );
62-
define( 'ALM_RESTAPI_URL', plugins_url( '', __FILE__ ) );
63-
define( 'ALM_RESTAPI_VERSION', '1.2.1' );
64-
define( 'ALM_RESTAPI_RELEASE', 'January 20, 2021' );
65-
6666
if ( ! class_exists( 'ALMRESTAPI' ) ) :
6767

6868
/**
@@ -100,6 +100,14 @@ public function alm_rest_api_enqueue_scripts() {
100100
* @since 1.0
101101
*/
102102
public function alm_get_rest_api_template( $repeater, $type ) {
103+
if ( is_admin() || defined( 'REST_REQUEST' ) && REST_REQUEST ) {
104+
/**
105+
* Bail if in WP admin.
106+
*
107+
* @see https://wordpress.stackexchange.com/a/367515/12868
108+
*/
109+
return;
110+
}
103111
$template = alm_get_current_repeater( $repeater, $type );
104112
require $template;
105113
}

endpoints.php

Lines changed: 39 additions & 212 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ function () {
2424
register_rest_route(
2525
$my_namespace,
2626
$my_endpoint,
27-
array(
27+
[
2828
'methods' => 'GET',
2929
'callback' => 'alm_get_posts',
3030
'permission_callback' => '__return_true',
31-
)
31+
]
3232
);
3333
}
3434
);
@@ -43,218 +43,42 @@ function () {
4343
* @since 1.0
4444
*/
4545
function alm_get_posts( $data ) {
46+
$response = [];
4647

47-
$response = array();
4848
// Set Defaults.
49+
$args = [];
50+
$page = $data['page'];
4951

50-
$page = $data['page']; // the current page from ALM
51-
$posts_per_page = ! empty( $data['posts_per_page'] ) ? $data['posts_per_page'] : 5;
52-
$post_status = ! empty( $data['post_status'] ) ? $data['post_status'] : 'publish';
53-
54-
/*
55-
Set Query Arguments
56-
*/
57-
58-
$args = array(
59-
'post_type' => $data['post_type'],
60-
'posts_per_page' => $posts_per_page,
61-
'offset' => $data['offset'] + $page * $posts_per_page,
62-
'order' => $data['order'],
63-
'orderby' => $data['orderby'],
64-
'post_status' => $post_status,
65-
'ignore_sticky_posts' => false,
66-
);
67-
68-
// Post Format - we can combine these queries
69-
if ( ! empty( $data['post_format'] ) || ! empty( $data['taxonomy'] ) ) {
70-
$tax_query_total = count( explode( ':', $data['taxonomy'] ) ); // Total $taxonomy objects
71-
$taxonomy = explode( ':', $data['taxonomy'] ); // convert to array
72-
$taxonomy_terms = explode( ':', $data['taxonomy_terms'] ); // convert to array
73-
$taxonomy_operator = explode( ':', $data['taxonomy_operator'] ); // convert to array
74-
$taxonomy_relation = ! empty( $data['taxonomy_relation'] ) ? $data['taxonomy_relation'] : 'AND';
75-
$post_format = ! empty( $data['post_format'] ) ? $data['post_format'] : '';
76-
if ( empty( $taxonomy ) ) { // Post Format only
77-
$args['tax_query'] = array(
78-
alm_get_post_format( $post_format ),
79-
);
80-
} else { // Taxonomy and possibly Post Formats
81-
if ( $tax_query_total === 1 ) {
82-
$args['tax_query'] = array(
83-
'relation' => $taxonomy_relation,
84-
alm_get_post_format( $post_format ),
85-
alm_get_taxonomy_query( $taxonomy[0], $taxonomy_terms[0], $taxonomy_operator[0] ),
86-
);
87-
}
88-
if ( $tax_query_total === 2 ) {
89-
$args['tax_query'] = array(
90-
'relation' => $taxonomy_relation,
91-
alm_get_post_format( $post_format ),
92-
alm_get_taxonomy_query( $taxonomy[0], $taxonomy_terms[0], $taxonomy_operator[0] ),
93-
alm_get_taxonomy_query( $taxonomy[1], $taxonomy_terms[1], $taxonomy_operator[1] ),
94-
);
95-
}
96-
if ( $tax_query_total === 3 ) {
97-
$args['tax_query'] = array(
98-
'relation' => $taxonomy_relation,
99-
alm_get_post_format( $post_format ),
100-
alm_get_taxonomy_query( $taxonomy[0], $taxonomy_terms[0], $taxonomy_operator[0] ),
101-
alm_get_taxonomy_query( $taxonomy[1], $taxonomy_terms[1], $taxonomy_operator[1] ),
102-
alm_get_taxonomy_query( $taxonomy[2], $taxonomy_terms[2], $taxonomy_operator[2] ),
103-
);
104-
}
105-
}
106-
}
107-
108-
// Category
109-
if ( ! empty( $data['category'] ) ) {
110-
$args['category_name'] = $data['category'];
111-
}
112-
113-
// Category Not In
114-
if ( ! empty( $data['category__not_in'] ) ) {
115-
$exclude_cats = explode( ',', $data['category__not_in'] );
116-
$args['category__not_in'] = $exclude_cats;
117-
}
118-
119-
// Tag
120-
if ( ! empty( $data['tag'] ) ) {
121-
$args['tag'] = $data['tag'];
122-
}
123-
124-
// Tag Not In
125-
if ( ! empty( $data['tag__not_in'] ) ) {
126-
$exclude_tags = explode( ',', $data['tag__not_in'] );
127-
$args['tag__not_in'] = $exclude_tags;
128-
}
129-
130-
// Date Query
131-
if ( ! empty( $data['year'] ) ) {
132-
$args['year'] = $data['year'];
133-
}
134-
if ( ! empty( $data['month'] ) ) {
135-
$args['monthnum'] = $data['month'];
136-
}
137-
if ( ! empty( $data['day'] ) ) {
138-
$args['day'] = $data['day'];
139-
}
140-
141-
// Meta Query
142-
$meta_key = ( isset( $data['meta_key'] ) ) ? $data['meta_key'] : '';
143-
$meta_value = ( isset( $data['meta_value'] ) ) ? $data['meta_value'] : '';
144-
$meta_compare = ! empty( $data['meta_compare'] ) ? $data['meta_compare'] : 'IN';
145-
if ( $meta_compare === 'lessthan' ) {
146-
$meta_compare = '<'; // do_shortcode fix (shortcode was rendering as HTML)
147-
}
148-
if ( $meta_compare === 'lessthanequalto' ) {
149-
$meta_compare = '<='; // do_shortcode fix (shortcode was rendering as HTML)
150-
}
151-
$meta_relation = ! empty( $data['meta_relation'] ) ? $data['meta_relation'] : 'AND';
152-
$meta_type = ! empty( $data['meta_type'] ) ? $data['meta_type'] : 'CHAR';
153-
154-
if ( ! empty( $meta_key ) && ! empty( $meta_value ) || ! empty( $meta_key ) && $meta_compare !== 'IN' ) {
155-
$meta_query_total = count( explode( ':', $meta_key ) ); // Total meta_query objects
156-
$meta_keys = explode( ':', $meta_key ); // convert to array
157-
$meta_value = explode( ':', $meta_value ); // convert to array
158-
$meta_compare = explode( ':', $meta_compare ); // convert to array
159-
$meta_type = explode( ':', $meta_type ); // convert to array
160-
if ( $meta_query_total == 1 ) {
161-
$args['meta_query'] = array(
162-
alm_get_meta_query( $meta_keys[0], $meta_value[0], $meta_compare[0], $meta_type[0] ),
163-
);
164-
}
165-
if ( $meta_query_total == 2 ) {
166-
$args['meta_query'] = array(
167-
'relation' => $meta_relation,
168-
alm_get_meta_query( $meta_keys[0], $meta_value[0], $meta_compare[0], $meta_type[0] ),
169-
alm_get_meta_query( $meta_keys[1], $meta_value[1], $meta_compare[1], $meta_type[1] ),
170-
);
171-
}
172-
if ( $meta_query_total == 3 ) {
173-
$args['meta_query'] = array(
174-
'relation' => $meta_relation,
175-
alm_get_meta_query( $meta_keys[0], $meta_value[0], $meta_compare[0], $meta_type[0] ),
176-
alm_get_meta_query( $meta_keys[1], $meta_value[1], $meta_compare[1], $meta_type[1] ),
177-
alm_get_meta_query( $meta_keys[2], $meta_value[2], $meta_compare[2], $meta_type[2] ),
178-
);
179-
}
180-
if ( $meta_query_total == 4 ) {
181-
$args['meta_query'] = array(
182-
'relation' => $meta_relation,
183-
alm_get_meta_query( $meta_keys[0], $meta_value[0], $meta_compare[0], $meta_type[0] ),
184-
alm_get_meta_query( $meta_keys[1], $meta_value[1], $meta_compare[1], $meta_type[1] ),
185-
alm_get_meta_query( $meta_keys[2], $meta_value[2], $meta_compare[2], $meta_type[2] ),
186-
alm_get_meta_query( $meta_keys[3], $meta_value[3], $meta_compare[3], $meta_type[3] ),
187-
);
188-
}
189-
}
190-
191-
// Meta_key [ordering by meta value]
192-
if ( ! empty( $meta_key ) ) {
193-
if ( strpos( $data['orderby'], 'meta_value' ) !== false ) {
194-
// Order by meta_key, if $data['orderby'] is set to meta_value{_num}
195-
$meta_key_single = explode( ':', $meta_key );
196-
$args['meta_key'] = $meta_key_single[0];
197-
}
198-
}
199-
200-
// Author
201-
if ( ! empty( $data['author'] ) ) {
202-
$args['author'] = $data['author'];
203-
}
204-
205-
// Include posts
206-
if ( ! empty( $data['post__in'] ) ) {
207-
$post__in = explode( ',', $data['post__in'] );
208-
$args['post__in'] = $post__in;
52+
if ( method_exists( 'ALM_QUERY_ARGS', 'alm_build_queryargs' ) ) {
53+
/**
54+
* Pluck query args from core ALM class.
55+
*
56+
* @see ajax-load-more/core/classes/class-queryargs.php
57+
*/
58+
$args = ALM_QUERY_ARGS::alm_build_queryargs( $data );
59+
$args['offset'] = $args['offset'] + $page * $args['posts_per_page'];
20960
}
21061

211-
// Exclude posts
212-
if ( ! empty( $data['post__not_in'] ) ) {
213-
$post__not_in = explode( ',', $data['post__not_in'] );
214-
$args['post__not_in'] = $post__not_in;
215-
}
216-
217-
// Custom Args
218-
if ( ! empty( $data['custom_args'] ) ) {
219-
$custom_args_array = explode( ';', $data['custom_args'] ); // Split the $custom_args at ','
220-
foreach ( $custom_args_array as $argument ) { // Loop each $argument
221-
$argument = preg_replace( '/\s+/', '', $argument ); // Remove all whitespace
222-
$argument = explode( ':', $argument ); // Split the $argument at ':'
223-
$argument_arr = explode( ',', $argument[1] ); // explode $argument[1] at ','
224-
if ( sizeof( $argument_arr ) > 1 ) {
225-
$args[ $argument[0] ] = $argument_arr;
226-
} else {
227-
$args[ $argument[0] ] = $argument[1];
228-
}
229-
}
230-
}
231-
232-
// Search Term
233-
if ( ! empty( $data['search'] ) ) {
234-
$args['s'] = $data['search'];
235-
}
236-
237-
// Language
238-
if ( ! empty( $data['lang'] ) ) {
239-
$args['lang'] = $data['lang'];
240-
}
241-
242-
// Run Query
62+
// Run Query.
24363
$posts = new WP_Query( $args );
24464

245-
// ALM Template vars [https://connekthq.com/plugins/ajax-load-more/docs/variables/]
246-
$alm_item = $page * $posts_per_page;
65+
/**
66+
* ALM Template vars.
67+
*
68+
* @see https://connekthq.com/plugins/ajax-load-more/docs/variables/
69+
*/
70+
$alm_item = $args['page'] * $posts_per_page;
24771
$alm_found_posts = $posts->found_posts;
24872
$alm_post_count = $posts->post_count;
24973
$alm_current = 0;
250-
$data = array();
25174

75+
$data = [];
25276
while ( $posts->have_posts() ) :
25377
$posts->the_post();
25478

25579
$alm_current++;
25680

257-
// Get post thumbnail
81+
// Get post thumbnail.
25882
$thumbnail_id = get_post_thumbnail_id();
25983
$thumbnail = '';
26084
$alt = '';
@@ -264,9 +88,9 @@ function alm_get_posts( $data ) {
26488
$alt = get_post_meta( $thumbnail_id, '_wp_attachment_image_alt', true );
26589
}
26690

267-
// Build $data JSON object
268-
$data[] = array(
269-
'alm_page' => $page + 1,
91+
// Build $data JSON object.
92+
$data[] = [
93+
'alm_page' => $args['page'] + 1,
27094
'alm_item' => ( $alm_item++ ) + 1,
27195
'alm_current' => $alm_current,
27296
'alm_found_posts' => $alm_found_posts,
@@ -276,28 +100,31 @@ function alm_get_posts( $data ) {
276100
'post_excerpt' => get_the_excerpt(),
277101
'thumbnail' => $thumbnail,
278102
'thumbnail_alt' => $alt,
279-
);
103+
];
280104

281-
// Content [Apply shortcode filter for loaded shortcodes]
282-
// $content = get_the_content();
283-
// $data['post_content'] = apply_filters('the_content', $content);
105+
/**
106+
* Content [Apply shortcode filter for loaded shortcodes].
107+
* $content = get_the_content();.
108+
* $data['post_content'] = apply_filters('the_content', $content);.
109+
*/
284110

285-
endwhile;
286-
wp_reset_query();
111+
endwhile;
112+
wp_reset_query(); // phpcs:ignore
287113

288-
if ( empty( $data ) ) { // Empty results
114+
if ( empty( $data ) ) {
115+
// Empty results.
289116
$data = null;
290117
$alm_post_count = null;
291118
$alm_found_posts = null;
292119
}
293120

294-
$return = array(
121+
$return = [
295122
'html' => $data,
296-
'meta' => array(
123+
'meta' => [
297124
'postcount' => $alm_post_count,
298125
'totalposts' => $alm_found_posts,
299-
),
300-
);
126+
],
127+
];
301128

302129
wp_send_json( $return );
303130
}

0 commit comments

Comments
 (0)