Intereting Posts
Измените боковую панель слева направо на двадцать четыре темы Интеграция wordpress в индексную страницу Как отобразить более короткую версию wp_editor? Получать все оставшиеся сообщения после определенного идентификатора сообщения Искать один пользовательский тип сообщения ТОЛЬКО, отключить «все сообщения», Объединение SQL-запроса с функцией Ошибка SQL при восстановлении базы данных внедрение ящиков сообщений со ссылкой на все сообщения Возврат пользовательского запроса Переписать пользовательский тип сообщения на основе пользовательской таксономии Как решить проблему «Устранить блокирование визуализации JavaScript и CSS в верхнем слое» для нескольких файлов? Лучшая практика для создания пользовательского шаблона архива для пользовательской таксономии, которая работает по всем темам? WordPress | Дата не всегда отображается Создать страницу с помощью специального скрипта php и извлеченных данных Загружать родительские страницы, если нет дочерних страниц

Удаление термина таксономии

Существует функция WordPress, называемая wp_remove_object_terms, которая, к сожалению, не работает.

Я пытаюсь достичь тех же целей, используя следующие

$post_terms = wp_get_object_terms( $post_id, $taxonomy ); if( $post_terms ){ if(($key = array_search($term_id, $post_terms)) !== false) { unset($post_terms[$key]); } wp_set_object_terms( $post_id, $post_terms, $taxonomy, true ); } 

Это не работает, не знаю, где я ошибаюсь. Вот код в контексте функции, в которой он находится

 add_action('admin_init', 'update_custom_tour_groups'); function update_custom_tour_groups(){ $taxonomy = 'custom'; $terms = get_terms( $taxonomy, array( "hide_empty" => 0 ) ); foreach( $terms as $term ): //Get the term id of the current term $term_id = $term->term_id; //Create the acf string to get the acf field on the current term page eg custom_awesome-tours $acf_value = $taxonomy.'_'.$term_id; //wp_set_post_terms, used later, needs to term id as a number (int) $term_id_int = (int)$term_id; //Loop through all tours in the custom taxonomy and remove the term we are currently looping through $args = array( 'post_type' => 'tours', 'posts_per_page' => -1 ); $the_query = new WP_Query($args); if( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); $post_id = $post->ID; //$post_id_int = (int)$post_id; //Remove the current term from this post. Basically this remove all posts from the current term //wp_remove_object_terms( $post_id_int, $term_id, $taxonomy ); //wp_delete_object_term_relationships( $post_id, $taxonomy ); $post_terms = wp_get_object_terms( $post_id, $taxonomy ); /* echo ' <script> alert("'.$post_terms.'"); </script> '; */ if( $post_terms ){ if(($key = array_search($term_id, $post_terms)) !== false) { unset($post_terms[$key]); } wp_set_object_terms( $post_id, $post_terms, $taxonomy, true ); } endwhile; endif; //Loop through each tour that has been selected on this term page $post_objects = get_field('tours_in_group',$acf_value); if( $post_objects ): foreach( $post_objects as $post): // variable must be called $post (IMPORTANT) $post_id = $post->ID; $term_id_array = array( $term_id_int ); //Specially formatted to work with wp_set_post_terms //Add the current term to the selected post wp_set_post_terms( $post_id, $term_id_array, $taxonomy, true ); endforeach; endif; endforeach; } не add_action('admin_init', 'update_custom_tour_groups'); function update_custom_tour_groups(){ $taxonomy = 'custom'; $terms = get_terms( $taxonomy, array( "hide_empty" => 0 ) ); foreach( $terms as $term ): //Get the term id of the current term $term_id = $term->term_id; //Create the acf string to get the acf field on the current term page eg custom_awesome-tours $acf_value = $taxonomy.'_'.$term_id; //wp_set_post_terms, used later, needs to term id as a number (int) $term_id_int = (int)$term_id; //Loop through all tours in the custom taxonomy and remove the term we are currently looping through $args = array( 'post_type' => 'tours', 'posts_per_page' => -1 ); $the_query = new WP_Query($args); if( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); $post_id = $post->ID; //$post_id_int = (int)$post_id; //Remove the current term from this post. Basically this remove all posts from the current term //wp_remove_object_terms( $post_id_int, $term_id, $taxonomy ); //wp_delete_object_term_relationships( $post_id, $taxonomy ); $post_terms = wp_get_object_terms( $post_id, $taxonomy ); /* echo ' <script> alert("'.$post_terms.'"); </script> '; */ if( $post_terms ){ if(($key = array_search($term_id, $post_terms)) !== false) { unset($post_terms[$key]); } wp_set_object_terms( $post_id, $post_terms, $taxonomy, true ); } endwhile; endif; //Loop through each tour that has been selected on this term page $post_objects = get_field('tours_in_group',$acf_value); if( $post_objects ): foreach( $post_objects as $post): // variable must be called $post (IMPORTANT) $post_id = $post->ID; $term_id_array = array( $term_id_int ); //Specially formatted to work with wp_set_post_terms //Add the current term to the selected post wp_set_post_terms( $post_id, $term_id_array, $taxonomy, true ); endforeach; endif; endforeach; } 

благодаря

Solutions Collecting From Web of "Удаление термина таксономии"

Ваша проблема – последний аргумент в wp_set_object_terms() . Вы устанавливаете $append в true , поэтому он, по сути, проверяет, присутствует ли вход, и ничего не делает.

Вы хотите, чтобы он был установлен на false (который также является по умолчанию), поэтому термины принудительно должны быть такими же, как и вход, и разница (то, что вы удалили) удаляется из сообщения.