Intereting Posts
Можно ли удалить редактор полей Rich Text для определенного сообщения? Как получить все уникальные категории для сообщений в цикле? Анонимные сообщения спама, когда только зарегистрированные пользователи могут комментировать Добавить пользовательскую ссылку «на лету» в меню навигации Не удается заставить url_to_postid работать Изменить WP 4.7 in_category? Типы сообщений типа Tumblr для WordPress Как показать пользовательский шаблон сообщения с одной страницы? Изменить выход цикла для определенного списка категорий Где я могу найти хорошую обзорную коллекцию из 20 десяти детских тем? проблема с разбивкой по страницам WordPress с шаблонами страниц Отобразить изображение таксономии на single.php Невозможно использовать старый slug – это всего 301 место на главной странице сайта Максимальное количество сообщений на странице, прежде чем повлиять на производительность? Удалить постоянную ссылку Meta Box не работает?

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

Существует функция 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 (который также является по умолчанию), поэтому термины принудительно должны быть такими же, как и вход, и разница (то, что вы удалили) удаляется из сообщения.