Intereting Posts
Можно ли определить, является ли действие POST для «Сохранить сообщение» перед действием save_post? Сохранение метаданных WordPress: отображение слова Array при выборе Как установить «admin_email»? Как я могу объединить эту функцию (ы), которая вставляет термины в пользовательскую таксономию с помощью этого другого, который добавляет пользовательский фильтр таксономии? QA / Представление для сайтов wordpress Несколько новых сообщений с использованием XML-RPC? Автоматическое изменение размера при записи с помощью редактора пользовательских сообщений WP ОШИБКА: файлы cookie заблокированы или не поддерживаются вашим браузером. Один сайт. Одна тема. Несколько таблиц стилей без плагинов? Использование preg_replace () с фильтром the_content get_query_var () и permalinks Предыдущий / Следующий пост в категории? Не удалось получить доступ к wordpress login.php конфликт jquery с страницей виджета последние сообщения-виджет отображает все сообщения на странице архива, но отлично работает в другом месте

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

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