| 162 | |
| 163 | /** |
| 164 | * @ticket 14761 |
| 165 | */ |
| 166 | public function test_unregister_post_type() { |
| 167 | register_post_type( 'foo' ); |
| 168 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 169 | } |
| 170 | |
| 171 | /** |
| 172 | * @ticket 14761 |
| 173 | */ |
| 174 | public function test_unregister_post_type_unknown_post_type() { |
| 175 | $this->assertWPError( unregister_post_type( 'foo' ) ); |
| 176 | } |
| 177 | |
| 178 | /** |
| 179 | * @ticket 14761 |
| 180 | */ |
| 181 | public function test_unregister_post_type_twice() { |
| 182 | register_post_type( 'foo' ); |
| 183 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 184 | $this->assertWPError( unregister_post_type( 'foo' ) ); |
| 185 | } |
| 186 | |
| 187 | /** |
| 188 | * @ticket 14761 |
| 189 | */ |
| 190 | public function test_unregister_post_type_disallow_builtin_post_type() { |
| 191 | $this->assertWPError( unregister_post_type( 'post' ) ); |
| 192 | $this->assertWPError( unregister_post_type( 'page' ) ); |
| 193 | $this->assertWPError( unregister_post_type( 'attachment' ) ); |
| 194 | $this->assertWPError( unregister_post_type( 'revision' ) ); |
| 195 | $this->assertWPError( unregister_post_type( 'nav_menu_item' ) ); |
| 196 | } |
| 197 | |
| 198 | /** |
| 199 | * @ticket 14761 |
| 200 | */ |
| 201 | public function test_unregister_post_type_removes_query_vars() { |
| 202 | global $wp; |
| 203 | |
| 204 | register_post_type( 'foo', array( |
| 205 | 'public' => true, |
| 206 | 'query_var' => 'bar', |
| 207 | ) ); |
| 208 | |
| 209 | $this->assertInternalType( 'int', array_search( 'bar', $wp->public_query_vars ) ); |
| 210 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 211 | $this->assertFalse( array_search( 'bar', $wp->public_query_vars ) ); |
| 212 | } |
| 213 | |
| 214 | /** |
| 215 | * @ticket 14761 |
| 216 | */ |
| 217 | public function test_unregister_post_type_removes_rewrite_tags() { |
| 218 | $this->set_permalink_structure( '/%postname%' ); |
| 219 | |
| 220 | global $wp_rewrite; |
| 221 | |
| 222 | register_post_type( 'foo', array( |
| 223 | 'public' => true, |
| 224 | 'query_var' => 'bar', |
| 225 | ) ); |
| 226 | |
| 227 | $count_before = count( $wp_rewrite->rewritereplace ); |
| 228 | |
| 229 | $this->assertContains( '%foo%', $wp_rewrite->rewritecode ); |
| 230 | $this->assertContains( 'bar=', $wp_rewrite->queryreplace ); |
| 231 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 232 | $this->assertNotContains( '%foo%', $wp_rewrite->rewritecode ); |
| 233 | $this->assertNotContains( 'bar=', $wp_rewrite->queryreplace ); |
| 234 | $this->assertSame( -- $count_before, count( $wp_rewrite->rewritereplace ) ); // Array was reduced by one value. |
| 235 | } |
| 236 | |
| 237 | /** |
| 238 | * @ticket 14761 |
| 239 | */ |
| 240 | public function test_unregister_post_type_removes_rewrite_rules() { |
| 241 | $this->set_permalink_structure( '/%postname%' ); |
| 242 | |
| 243 | global $wp_rewrite; |
| 244 | |
| 245 | register_post_type( 'foo', array( |
| 246 | 'public' => true, |
| 247 | 'has_archive' => true, |
| 248 | ) ); |
| 249 | |
| 250 | $this->assertContains( 'index.php?post_type=foo', $wp_rewrite->extra_rules_top ); |
| 251 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 252 | $this->assertNotContains( 'index.php?post_type=foo', $wp_rewrite->extra_rules_top ); |
| 253 | } |
| 254 | |
| 255 | /** |
| 256 | * @ticket 14761 |
| 257 | */ |
| 258 | public function test_unregister_post_type_removes_custom_meta_capabilities() { |
| 259 | global $post_type_meta_caps; |
| 260 | |
| 261 | register_post_type( 'foo', array( |
| 262 | 'public' => true, |
| 263 | 'capability_type' => 'bar', |
| 264 | 'map_meta_cap' => true, |
| 265 | ) ); |
| 266 | |
| 267 | $this->assertSame( 'read_post', $post_type_meta_caps['read_bar'] ); |
| 268 | $this->assertSame( 'delete_post', $post_type_meta_caps['delete_bar'] ); |
| 269 | $this->assertSame( 'edit_post', $post_type_meta_caps['edit_bar'] ); |
| 270 | |
| 271 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 272 | |
| 273 | $this->assertFalse( isset( $post_type_meta_caps['read_bar'] ) ); |
| 274 | $this->assertFalse( isset( $post_type_meta_caps['delete_bar'] ) ); |
| 275 | $this->assertFalse( isset( $post_type_meta_caps['edit_bar'] ) ); |
| 276 | } |
| 277 | |
| 278 | /** |
| 279 | * @ticket 14761 |
| 280 | */ |
| 281 | public function test_unregister_post_type_removes_post_type_supports() { |
| 282 | global $_wp_post_type_features; |
| 283 | |
| 284 | register_post_type( 'foo', array( |
| 285 | 'public' => true, |
| 286 | 'supports' => array( 'editor', 'author', 'title' ), |
| 287 | ) ); |
| 288 | |
| 289 | $this->assertEqualSetsWithIndex( |
| 290 | array( |
| 291 | 'editor' => true, |
| 292 | 'author' => true, |
| 293 | 'title' => true, |
| 294 | ), |
| 295 | $_wp_post_type_features['foo'] |
| 296 | ); |
| 297 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 298 | $this->assertFalse( isset( $_wp_post_type_features['foo'] ) ); |
| 299 | } |
| 300 | |
| 301 | /** |
| 302 | * @ticket 14761 |
| 303 | */ |
| 304 | public function test_unregister_post_type_removes_post_type_from_taxonomies() { |
| 305 | global $wp_taxonomies; |
| 306 | |
| 307 | register_post_type( 'foo', array( |
| 308 | 'public' => true, |
| 309 | 'taxonomies' => array( 'category', 'post_tag' ), |
| 310 | ) ); |
| 311 | |
| 312 | $this->assertInternalType( 'int', array_search( 'foo', $wp_taxonomies['category']->object_type, true ) ); |
| 313 | $this->assertInternalType( 'int', array_search( 'foo', $wp_taxonomies['post_tag']->object_type, true ) ); |
| 314 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 315 | $this->assertFalse( array_search( 'foo', $wp_taxonomies['category']->object_type, true ) ); |
| 316 | $this->assertFalse( array_search( 'foo', $wp_taxonomies['post_tag']->object_type, true ) ); |
| 317 | $this->assertEmpty( get_object_taxonomies( 'foo' ) ); |
| 318 | } |
| 319 | |
| 320 | /** |
| 321 | * @ticket 14761 |
| 322 | */ |
| 323 | public function test_unregister_post_type_removes_the_future_post_hooks() { |
| 324 | global $wp_filter; |
| 325 | |
| 326 | register_post_type( 'foo', array( |
| 327 | 'public' => true, |
| 328 | ) ); |
| 329 | |
| 330 | $this->assertSame( 1, count( $wp_filter['future_foo'] ) ); |
| 331 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 332 | $this->assertSame( array(), $wp_filter['future_foo'] ); |
| 333 | } |
| 334 | |
| 335 | /** |
| 336 | * @ticket 14761 |
| 337 | */ |
| 338 | public function test_unregister_post_type_removes_meta_box_callback() { |
| 339 | global $wp_filter; |
| 340 | |
| 341 | register_post_type( 'foo', array( |
| 342 | 'public' => true, |
| 343 | 'register_meta_box_cb' => '__return_empty_string', |
| 344 | ) ); |
| 345 | |
| 346 | $this->assertSame( 1, count( $wp_filter['add_meta_boxes_foo'] ) ); |
| 347 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 348 | $this->assertSame( array(), $wp_filter['add_meta_boxes_foo'] ); |
| 349 | } |
| 350 | |
| 351 | /** |
| 352 | * @ticket 14761 |
| 353 | */ |
| 354 | public function test_unregister_post_type_removes_post_type_from_global() { |
| 355 | global $wp_post_types; |
| 356 | |
| 357 | register_post_type( 'foo', array( |
| 358 | 'public' => true, |
| 359 | ) ); |
| 360 | |
| 361 | $this->assertInternalType( 'object', $wp_post_types['foo'] ); |
| 362 | $this->assertInternalType( 'object', get_post_type_object( 'foo' ) ); |
| 363 | |
| 364 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 365 | |
| 366 | $this->assertFalse( isset( $wp_post_types['foo'] ) ); |
| 367 | $this->assertNull( get_post_type_object( 'foo' ) ); |
| 368 | } |
| 369 | |
| 370 | /** |
| 371 | * @ticket 14761 |
| 372 | */ |
| 373 | public function test_post_type_does_not_exist_after_unregister_post_type() { |
| 374 | register_post_type( 'foo', array( |
| 375 | 'public' => true, |
| 376 | ) ); |
| 377 | |
| 378 | $this->assertTrue( unregister_post_type( 'foo' ) ); |
| 379 | |
| 380 | $this->assertFalse( post_type_exists( 'foo' ) ); |
| 381 | } |