public function test_remove_permastruct() { global $wp_rewrite; add_permastruct('foo', 'bar/%foo%'); $this->assertInternalType('array', $wp_rewrite->extra_permastructs['foo']); $this->assertSame('/bar/%foo%', $wp_rewrite->extra_permastructs['foo']['struct']); remove_permastruct('foo'); $this->assertFalse(isset($wp_rewrite->extra_permastructs['foo'])); }
/** * Unregisters a taxonomy. * * Can not be used to unregister built-in taxonomies. * * @since 4.5.0 * * @global WP $wp Current WordPress environment instance. * @global array $wp_taxonomies List of taxonomies. * * @param string $taxonomy Taxonomy name. * @return bool|WP_Error True on success, WP_Error on failure or if the taxonomy doesn't exist. */ function unregister_taxonomy($taxonomy) { if (!taxonomy_exists($taxonomy)) { return new WP_Error('invalid_taxonomy', __('Invalid taxonomy.')); } $taxonomy_args = get_taxonomy($taxonomy); // Do not allow unregistering internal taxonomies. if ($taxonomy_args->_builtin) { return new WP_Error('invalid_taxonomy', __('Unregistering a built-in taxonomy is not allowed')); } global $wp, $wp_taxonomies; // Remove query var. if (false !== $taxonomy_args->query_var) { $wp->remove_query_var($taxonomy_args->query_var); } // Remove rewrite tags and permastructs. if (false !== $taxonomy_args->rewrite) { remove_rewrite_tag("%{$taxonomy}%"); remove_permastruct($taxonomy); } // Unregister callback handling for meta box. remove_filter('wp_ajax_add-' . $taxonomy, '_wp_ajax_add_hierarchical_term'); // 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; }
/** * Unregisters a post type. * * Can not be used to unregister built-in post types. * * @since 4.5.0 * * @global WP_Rewrite $wp_rewrite WordPress rewrite component. * @global WP $wp Current WordPress environment instance. * @global array $_wp_post_type_features Used to remove post type features. * @global array $post_type_meta_caps Used to remove meta capabilities. * @global array $wp_post_types List of post types. * * @param string $post_type Post type to unregister. * @return bool|WP_Error True on success, WP_Error on failure. */ function unregister_post_type($post_type) { if (!post_type_exists($post_type)) { return new WP_Error('invalid_post_type', __('Invalid post type')); } $post_type_args = get_post_type_object($post_type); // Do not allow unregistering internal post types. if ($post_type_args->_builtin) { return new WP_Error('invalid_post_type', __('Unregistering a built-in post type is not allowed')); } global $wp, $wp_rewrite, $_wp_post_type_features, $post_type_meta_caps, $wp_post_types; // Remove query var. if (false !== $post_type_args->query_var) { $wp->remove_query_var($post_type_args->query_var); } // Remove any rewrite rules, permastructs, and rules. if (false !== $post_type_args->rewrite) { remove_rewrite_tag("%{$post_type}%"); remove_permastruct($post_type); foreach ($wp_rewrite->extra_rules_top as $regex => $query) { if (false !== strpos($query, "index.php?post_type={$post_type}")) { unset($wp_rewrite->extra_rules_top[$regex]); } } } // Remove registered custom meta capabilities. foreach ($post_type_args->cap as $cap) { unset($post_type_meta_caps[$cap]); } // Remove all post type support. unset($_wp_post_type_features[$post_type]); // Unregister the post type meta box if a custom callback was specified. if ($post_type_args->register_meta_box_cb) { remove_action('add_meta_boxes_' . $post_type, $post_type_args->register_meta_box_cb); } // Remove the post type from all taxonomies. foreach (get_object_taxonomies($post_type) as $taxonomy) { unregister_taxonomy_for_object_type($taxonomy, $post_type); } // Remove the future post hook action. remove_action('future_' . $post_type, '_future_post_hook', 5); // Remove the post type. unset($wp_post_types[$post_type]); /** * Fires after a post type was unregistered. * * @since 4.5.0 * * @param string $post_type Post type key. */ do_action('unregistered_post_type', $post_type); return true; }
/** * Removes any rewrite rules, permastructs, and rules for the post type. * * @since 4.6.0 * @access public * * @global WP_Rewrite $wp_rewrite WordPress rewrite component. * @global WP $wp Current WordPress environment instance. * @global array $post_type_meta_caps Used to remove meta capabilities. */ public function remove_rewrite_rules() { global $wp, $wp_rewrite, $post_type_meta_caps; // Remove query var. if (false !== $this->query_var) { $wp->remove_query_var($this->query_var); } // Remove any rewrite rules, permastructs, and rules. if (false !== $this->rewrite) { remove_rewrite_tag("%{$this->name}%"); remove_permastruct($this->name); foreach ($wp_rewrite->extra_rules_top as $regex => $query) { if (false !== strpos($query, "index.php?post_type={$this->name}")) { unset($wp_rewrite->extra_rules_top[$regex]); } } } // Remove registered custom meta capabilities. foreach ($this->cap as $cap) { unset($post_type_meta_caps[$cap]); } }
/** * Removes any rewrite rules, permastructs, and rules for the taxonomy. * * @since 4.7.0 * @access public * * @global WP $wp Current WordPress environment instance. */ public function remove_rewrite_rules() { /* @var WP $wp */ global $wp; // Remove query var. if (false !== $this->query_var) { $wp->remove_query_var($this->query_var); } // Remove rewrite tags and permastructs. if (false !== $this->rewrite) { remove_rewrite_tag("%{$this->name}%"); remove_permastruct($this->name); } }