@@ -91,7 +91,7 @@ public function list_subscribe($list_id, $email_address, array $args = [], $upda
9191 $ data ->was_already_on_list = $ existing_member_data ->status === 'subscribed ' ;
9292
9393 if (isset ($ args ['tags ' ]) && is_array ($ args ['tags ' ])) {
94- $ this ->list_add_tags_to_subscriber ($ list_id , $ data , $ args ['tags ' ]);
94+ $ this ->list_tags_to_subscriber ($ list_id , $ data , $ args ['tags ' ]);
9595 }
9696 } else {
9797 $ data = $ api ->add_new_list_member ($ list_id , $ args );
@@ -110,54 +110,53 @@ public function list_subscribe($list_id, $email_address, array $args = [], $upda
110110 * Format tags to send to Mailchimp.
111111 *
112112 * @param $mailchimp_tags array existent user tags
113- * @param $new_tags array new tags to add
113+ * @param $tags array new tags to add
114114 *
115115 * @return array
116116 * @since 4.7.9
117117 */
118- private function merge_and_format_member_tags ($ mailchimp_tags , $ new_tags )
118+ private function merge_and_format_member_tags ($ mailchimp_tags , $ tags )
119119 {
120- $ mailchimp_tags = array_map (
121- function ($ tag ) {
122- return $ tag ->name ;
123- },
124- $ mailchimp_tags
125- );
126-
127- $ tags = array_unique (array_merge ($ mailchimp_tags , $ new_tags ), SORT_REGULAR );
128-
129- return array_map (
130- function ($ tag ) {
131- return [
132- 'name ' => $ tag ,
133- 'status ' => 'active ' ,
120+ $ formatted_tags = [];
121+ foreach ($ tags as $ tag ) {
122+ if (is_string ($ tag )) {
123+ $ formatted_tags [] = [
124+ 'name ' => $ tag ,
125+ 'status ' => 'active '
134126 ];
135- },
136- $ tags
137- );
127+ } elseif (is_array ($ tag ) && isset ($ tag ['name ' ])) {
128+ $ formatted_tags [] = [
129+ 'name ' => $ tag ['name ' ],
130+ 'status ' => isset ($ tag ['status ' ]) ? $ tag ['status ' ] : 'active '
131+ ];
132+ }
133+ }
134+
135+ return $ formatted_tags ;
138136 }
139137
140138 /**
141- * Post the tags on a list member.
139+ * Post the tags on a list member.
142140 *
143141 * @param $mailchimp_list_id string The list id to subscribe to
144142 * @param $mailchimp_member stdClass mailchimp user informations
145- * @param $new_tags array tags to add to the user
143+ * @param $tags array tags to set for the user (can include 'status' key)
146144 *
147145 * @return bool
148146 * @throws Exception
149- * @since 4.7.9
147+ * @since 4.10.10
150148 */
151- private function list_add_tags_to_subscriber ($ mailchimp_list_id , $ mailchimp_member , array $ new_tags )
149+ private function list_tags_to_subscriber ($ mailchimp_list_id , $ mailchimp_member , array $ tags )
152150 {
153151 // do nothing if no tags given
154- if (count ($ new_tags ) === 0 ) {
152+ if (count ($ tags ) === 0 ) {
155153 return true ;
156154 }
157155
158- $ api = $ this ->get_api ();
156+ $ api = $ this ->get_api ();
157+
159158 $ data = [
160- 'tags ' => $ this ->merge_and_format_member_tags ($ mailchimp_member ->tags , $ new_tags ),
159+ 'tags ' => $ this ->merge_and_format_member_tags ($ mailchimp_member ->tags , $ tags ),
161160 ];
162161
163162 try {
0 commit comments