PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / wordpress / actions / find-posts.php
suretriggers / src / Integrations / wordpress / actions Last commit date
add-new-media.php 9 months ago add-new-role.php 9 months ago add-tag-to-post.php 9 months ago add-taxonomy-to-post.php 9 months ago change-role.php 9 months ago create-category.php 9 months ago create-comment.php 9 months ago create-post.php 8 months ago create-role.php 9 months ago create-tag.php 9 months ago create-user-if-not-exists.php 1 year ago delete-user.php 9 months ago find-posts.php 3 months ago find-user-by-email.php 2 years ago find-user-by-id.php 2 years ago find-user-meta-by-key.php 2 years ago find-user-metas.php 2 years ago get-post-by-id.php 9 months ago get-post-metadata.php 9 months ago get-post-taxonomy.php 9 months ago get-post-terms.php 9 months ago get-taxonomy-by-name.php 9 months ago get-user-by-role.php 9 months ago remove-role.php 9 months ago remove-user-meta.php 9 months ago remove-user.php 9 months ago send-mail.php 3 months ago set-post-meta.php 9 months ago set-user-meta.php 9 months ago update-comment-status.php 9 months ago update-post-excerpt.php 9 months ago update-post.php 9 months ago update-user.php 3 months ago
find-posts.php
193 lines
1 <?php
2 /**
3 * FindPosts.
4 * php version 5.6
5 *
6 * @category FindPosts
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\WordPress\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Traits\SingletonLoader;
18 use WP_Query;
19 use Exception;
20
21 /**
22 * FindPosts
23 *
24 * @category FindPosts
25 * @package SureTriggers
26 * @since 1.0.0
27 */
28 class FindPosts extends AutomateAction {
29
30 use SingletonLoader;
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'WordPress';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'find_post_by_criteria';
45
46 /**
47 * Search term for the posts_where filter.
48 *
49 * @var string
50 */
51 private $search_term_for_filter = '';
52
53 /**
54 * Register action.
55 *
56 * @param array $actions Action data.
57 *
58 * @return array
59 */
60 public function register( $actions ) {
61 $actions[ $this->integration ][ $this->action ] = [
62 'label' => __( 'Find Posts', 'suretriggers' ),
63 'action' => $this->action,
64 'function' => [ $this, 'action_listener' ],
65 ];
66
67 return $actions;
68 }
69
70 /**
71 * Action listener.
72 *
73 * @param int $user_id User ID.
74 * @param int $automation_id Automation ID.
75 * @param array $fields Fields data.
76 * @param array $selected_options Selected options.
77 *
78 * @return array
79 * @throws Exception Exception.
80 */
81 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
82 $post_type = isset( $selected_options['post_type'] ) ? sanitize_text_field( $selected_options['post_type'] ) : 'post';
83 $search_term = isset( $selected_options['search_term'] ) ? sanitize_text_field( $selected_options['search_term'] ) : '';
84 $status = isset( $selected_options['status'] ) ? sanitize_text_field( $selected_options['status'] ) : '';
85 $date_range = isset( $selected_options['date_range'] ) ? explode( ' - ', sanitize_text_field( $selected_options['date_range'] ) ) : [];
86
87 $args = [
88 'post_type' => $post_type,
89 'post_status' => $status,
90 'posts_per_page' => 10,
91 ];
92
93 if ( ! empty( $search_term ) ) {
94 $this->search_term_for_filter = $search_term;
95 add_filter( 'posts_where', [ $this, 'add_slug_to_search_where' ], 10, 2 );
96 }
97
98 if ( ! empty( $status ) ) {
99 $args['post_status'] = $status;
100 } else {
101 $args['post_status'] = [ 'publish', 'draft', 'pending' ];
102 }
103
104 if ( count( $date_range ) === 2 ) {
105 $args['date_query'] = [
106 [
107 'after' => $date_range[0],
108 'before' => $date_range[1] . ' 23:59:59',
109 'inclusive' => true,
110 ],
111 ];
112 }
113
114 $query = new WP_Query( $args );
115
116 remove_filter( 'posts_where', [ $this, 'add_slug_to_search_where' ], 10 );
117 $this->search_term_for_filter = '';
118
119 if ( ! $query->have_posts() ) {
120 return [
121 'status' => 'error',
122 'message' => 'No posts found.',
123 ];
124 }
125
126 $posts_data = [];
127
128 while ( $query->have_posts() ) {
129 $query->the_post();
130 $post_id = get_the_ID();
131
132 $post_details = [
133 'ID' => $post_id,
134 'Title' => html_entity_decode( get_the_title(), ENT_QUOTES, 'UTF-8' ),
135 'Slug' => get_post_field( 'post_name', (int) $post_id ),
136 'Content' => html_entity_decode( get_the_content(), ENT_QUOTES, 'UTF-8' ),
137 'Excerpt' => html_entity_decode( get_the_excerpt(), ENT_QUOTES, 'UTF-8' ),
138 'Author' => get_the_author(),
139 'Publication Date' => get_the_date(),
140 'Status' => get_post_status( (int) $post_id ),
141 'Permalink' => get_permalink( (int) $post_id ),
142 ];
143
144 if ( function_exists( 'get_fields' ) ) {
145 $acf_fields = get_fields( $post_id );
146 if ( $acf_fields ) {
147 $post_details['ACF Fields'] = $acf_fields;
148 }
149 }
150
151 $posts_data[] = $post_details;
152 }
153
154 wp_reset_postdata();
155
156 return [
157 'status' => 'success',
158 'posts' => $posts_data,
159 ];
160 }
161
162 /**
163 * Add post_name (slug) matching to the WHERE clause alongside title and content search.
164 *
165 * @param string $where WHERE clause.
166 * @param WP_Query $query WP_Query instance.
167 *
168 * @return string
169 */
170 public function add_slug_to_search_where( $where, $query ) {
171 global $wpdb;
172
173 if ( empty( $this->search_term_for_filter ) ) {
174 return $where;
175 }
176
177 $term = $wpdb->esc_like( $this->search_term_for_filter );
178 $like = '%' . $term . '%';
179
180 $where .= $wpdb->prepare(
181 " AND ({$wpdb->posts}.post_title LIKE %s OR {$wpdb->posts}.post_content LIKE %s OR {$wpdb->posts}.post_excerpt LIKE %s OR {$wpdb->posts}.post_name LIKE %s)",
182 $like,
183 $like,
184 $like,
185 $like
186 );
187
188 return $where;
189 }
190 }
191
192 FindPosts::get_instance();
193