PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.33
OttoKit: All-in-One Automation Platform v1.1.33
1.1.33 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 / add-taxonomy-to-post.php
suretriggers / src / Integrations / wordpress / actions Last commit date
add-new-media.php 10 months ago add-new-role.php 10 months ago add-tag-to-post.php 9 months ago add-taxonomy-to-post.php 10 months ago change-role.php 10 months ago create-category.php 10 months ago create-comment.php 10 months ago create-post.php 8 months ago create-role.php 10 months ago create-tag.php 10 months ago create-user-if-not-exists.php 1 year ago delete-user.php 10 months ago find-posts.php 4 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 10 months ago get-post-metadata.php 10 months ago get-post-taxonomy.php 10 months ago get-post-terms.php 10 months ago get-taxonomy-by-name.php 10 months ago get-user-by-role.php 10 months ago remove-role.php 10 months ago remove-user-meta.php 10 months ago remove-user.php 10 months ago send-mail.php 4 months ago set-post-meta.php 10 months ago set-user-meta.php 10 months ago update-comment-status.php 10 months ago update-post-excerpt.php 10 months ago update-post.php 10 months ago update-user.php 4 months ago
add-taxonomy-to-post.php
215 lines
1 <?php
2 /**
3 * AddTaxonomyToPost.
4 * php version 5.6
5 *
6 * @category AddTaxonomyToPost
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_User;
19 use Exception;
20
21 /**
22 * AddTaxonomyToPost
23 *
24 * @category AddTaxonomyToPost
25 * @package SureTriggers
26 * @author BSF <username@example.com>
27 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
28 * @link https://www.brainstormforce.com/
29 * @since 1.0.0
30 */
31 class AddTaxonomyToPost extends AutomateAction {
32
33 /**
34 * Integration type.
35 *
36 * @var string
37 */
38 public $integration = 'WordPress';
39
40 /**
41 * Action name.
42 *
43 * @var string
44 */
45 public $action = 'add_taxonomy_to_post';
46
47 use SingletonLoader;
48
49 /**
50 * Register action.
51 *
52 * @param array $actions action data.
53 * @return array
54 */
55 public function register( $actions ) {
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Add Taxonomy', 'suretriggers' ),
58 'action' => 'add_taxonomy_to_post',
59 'function' => [ $this, 'action_listener' ],
60 ];
61
62 return $actions;
63 }
64
65 /**
66 * Action listener.
67 *
68 * @param int $user_id user_id.
69 * @param int $automation_id automation_id.
70 * @param array $fields fields.
71 * @param array $selected_options selectedOptions.
72 * @return array|string
73 * @throws Exception Exception.
74 */
75 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
76 $post_id = $selected_options['post_id'];
77 $last_response = get_post( $post_id );
78 if ( ! $last_response ) {
79 return [
80 'status' => 'error',
81 'message' => 'Invalid post ID or post not found.',
82 ];
83 }
84 $post_type = get_post_type( $post_id );
85 if ( ! $post_type ) {
86 return [
87 'status' => 'error',
88 'message' => 'Invalid post ID or post type not found.',
89 ];
90 }
91
92 $taxonomy_terms = [];
93
94 if ( ! empty( $selected_options['taxonomy'] ) && ! empty( $selected_options['taxonomy_term'] ) ) {
95 $this->assign_terms_to_post( $post_id, $selected_options );
96 }
97
98 $taxonomy_terms = $this->get_post_taxonomy_terms( $post_id );
99
100 return [
101 'last_response' => $last_response,
102 'taxonomy_terms' => $taxonomy_terms,
103 ];
104 }
105
106 /**
107 * Assign terms to post.
108 *
109 * @param int $post_id post_id.
110 * @param array $selected_options selected_options.
111 * @return void
112 */
113 private function assign_terms_to_post( $post_id, $selected_options ) {
114 if ( is_array( $selected_options['taxonomy'] ) && is_array( $selected_options['taxonomy_term'] ) ) {
115 foreach ( $selected_options['taxonomy_term'] as $term ) {
116 $this->set_object_terms_by_id( $post_id, $term['value'] );
117 }
118 } elseif ( is_array( $selected_options['taxonomy'] ) && ! is_array( $selected_options['taxonomy_term'] ) ) {
119 $this->set_object_terms_by_name( $post_id, $selected_options['taxonomy'], $selected_options['taxonomy_term'] );
120 } elseif ( ! is_array( $selected_options['taxonomy'] ) && is_array( $selected_options['taxonomy_term'] ) ) {
121 foreach ( $selected_options['taxonomy_term'] as $term ) {
122 $this->set_object_terms_by_id( $post_id, $term['value'] );
123 }
124 } else {
125 $this->set_object_terms_by_name(
126 $post_id,
127 explode( ',', $selected_options['taxonomy'] ),
128 $selected_options['taxonomy_term']
129 );
130 }
131 }
132
133 /**
134 * Set object terms by id.
135 *
136 * @param int $post_id post_id.
137 * @param string $term_value term_value.
138 * @return void
139 */
140 private function set_object_terms_by_id( $post_id, $term_value ) {
141 $term_parts = explode( '%-%', $term_value );
142 if ( count( $term_parts ) === 2 ) {
143 list($term_id, $taxonomy) = $term_parts;
144 wp_set_object_terms( $post_id, [ (int) $term_id ], $taxonomy, true );
145 }
146 }
147
148 /**
149 * Set object terms by name.
150 *
151 * @param int $post_id post_id.
152 * @param array $taxonomies taxonomies.
153 * @param string $taxonomy_term taxonomy_term.
154 * @return void
155 */
156 private function set_object_terms_by_name( $post_id, $taxonomies, $taxonomy_term ) {
157 $taxonomy_terms_map = [];
158 $taxonomies = array_map( 'trim', (array) $taxonomies );
159 $terms_input = array_map( 'trim', explode( ',', $taxonomy_term ) );
160
161 $available_terms = [];
162 foreach ( $taxonomies as $taxonomy ) {
163 $available_terms[ $taxonomy ] = get_terms(
164 [
165 'taxonomy' => $taxonomy,
166 'hide_empty' => false,
167 ]
168 );
169 }
170
171 foreach ( $terms_input as $input_term ) {
172 if ( is_array( $available_terms ) ) {
173 foreach ( $available_terms as $taxonomy => $terms ) {
174 if ( is_array( $terms ) ) {
175 foreach ( $terms as $term ) {
176 if ( (int) $term->term_id === (int) $input_term || strtolower( $term->slug ) === $input_term ) {
177 $taxonomy_terms_map[ $taxonomy ][] = (int) $term->term_id;
178 break 2;
179 }
180 }
181 }
182 }
183 }
184 }
185 foreach ( $taxonomy_terms_map as $taxonomy => $term_ids ) {
186 wp_set_object_terms( $post_id, $term_ids, $taxonomy, true );
187 }
188 }
189
190 /**
191 * Get post taxonomy terms.
192 *
193 * @param int $post_id post_id.
194 * @return array
195 */
196 private function get_post_taxonomy_terms( $post_id ) {
197 $taxonomy_terms = [];
198 $post_type = get_post_type( $post_id );
199 $response_taxonomies = $post_type ? get_object_taxonomies( $post_type ) : [];
200
201
202 foreach ( $response_taxonomies as $taxonomy_name ) {
203 $terms = wp_get_post_terms( $post_id, $taxonomy_name );
204 if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
205 $taxonomy_terms = array_merge( $taxonomy_terms, $terms );
206 }
207 }
208
209 return $taxonomy_terms;
210 }
211
212 }
213
214 AddTaxonomyToPost::get_instance();
215