WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

unregister_taxonomy() WP 4.5.0

Отменяет регистрацию указанной таксономии (удаляет таксономию).

Кроме удаления таксономии из общего массива таксономий, также удаляются: правила перезаписи ЧПУ, параметры запроса и связанные с таксономией фильтры.

Не работает со встроенными таксономиями меток и рубрик: post_tag и category. Не работает с теми таксономиями, у которых свойство _builtin = true.

✈ 1 раз = 0.000039с = очень быстро | 50000 раз = 0.89с = очень быстро | PHP 7.0.5, WP 4.5
Хуки из функции
Возвращает

True/WP_Error. True при удалении. WP_Error при ошибке или когда таксономии не существует.

Использование

unregister_taxonomy( $taxonomy );
$taxonomy(строка) (обязательный)
Название таксономии, которую нужно удалить (отменить).

Примеры

#1 Удалим таксономию

Допустим во время события init мы зарегистрировали таксономию genre. И затем позднее нам нужно её отменить.

// регистрация таксономии
add_action( 'init', 'create_genre_taxonomy' );
function create_genre_taxonomy(){
  // Добавляем древовидную таксономию 'genre' (как категории)
  register_taxonomy('genre', array('book'), array(
	'hierarchical' => true,
	'labels' => $labels,
	'show_ui' => true,
	'query_var' => true,
	'rewrite' => array( 'slug' => 'genre' ),
  ));
}

// удаление таксономии
add_action( 'wp', 'unregister_genre_taxonomy' );
function unregister_genre_taxonomy(){
	// отменяем таксу только на отдельных страницах
	if( ! is_singular() ) return;

	unregister_taxonomy('genre');
}

Код unregister taxonomy: wp-includes/taxonomy.php WP 5.2.1

<?php
function unregister_taxonomy( $taxonomy ) {
	if ( ! taxonomy_exists( $taxonomy ) ) {
		return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
	}

	$taxonomy_object = get_taxonomy( $taxonomy );

	// Do not allow unregistering internal taxonomies.
	if ( $taxonomy_object->_builtin ) {
		return new WP_Error( 'invalid_taxonomy', __( 'Unregistering a built-in taxonomy is not allowed.' ) );
	}

	global $wp_taxonomies;

	$taxonomy_object->remove_rewrite_rules();
	$taxonomy_object->remove_hooks();

	// Remove the taxonomy.
	unset( $wp_taxonomies[ $taxonomy ] );

	/**
	 * Fires after a taxonomy is unregistered.
	 *
	 * @since 4.5.0
	 *
	 * @param string $taxonomy Taxonomy name.
	 */
	do_action( 'unregistered_taxonomy', $taxonomy );

	return true;
}

Cвязанные функции

Из раздела: Любые таксономии

2 коммента
  • Дмитрий

    А как все таки удалить метки?

    1
    Ответить2.6 года назад #
    • Kama7451

      Метки удалить нельзя этой функцией, потому это метки это встроенная таксономия.

      Можно попробовать жестко удалить запись из глобальной переменной:

      add_action( 'init', 'action_function_name_11', 99 );
      function action_function_name_11() {
      
      	global $wp_taxonomies;
      
      	$taxonomy = 'post_tag';
      
      	$taxonomy_object = get_taxonomy( $taxonomy );
      
      	$taxonomy_object->remove_rewrite_rules();
      	$taxonomy_object->remove_hooks();
      
      	// Remove the taxonomy.
      	unset( $wp_taxonomies[ $taxonomy ] );
      
      }
      
      Ответить2 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться