@@ -401,4 +401,153 @@ public function test_term_exists_unknown() {
401401 $ this ->assertNull ( term_exists ( '' ) );
402402 $ this ->assertNull ( term_exists ( null ) );
403403 }
404+
405+ /**
406+ * @ticket 55358
407+ * @covers ::term_exists()
408+ */
409+ public function test_term_exists_with_numeric_parent_term () {
410+ register_taxonomy (
411+ 'foo ' ,
412+ 'post ' ,
413+ array (
414+ 'hierarchical ' => true ,
415+ )
416+ );
417+
418+ $ parent_term = self ::factory ()->term ->create (
419+ array (
420+ 'taxonomy ' => 'foo ' ,
421+ )
422+ );
423+
424+ $ child_term = self ::factory ()->term ->create (
425+ array (
426+ 'taxonomy ' => 'foo ' ,
427+ 'parent ' => $ parent_term ,
428+ 'slug ' => 'child-term ' ,
429+ )
430+ );
431+
432+ // Test with numeric parent_term as integer
433+ $ found = term_exists ( 'child-term ' , 'foo ' , $ parent_term );
434+ $ this ->assertIsArray ( $ found );
435+ $ this ->assertEquals ( $ child_term , $ found ['term_id ' ] );
436+
437+ // Test with numeric parent_term as string
438+ $ found = term_exists ( 'child-term ' , 'foo ' , (string ) $ parent_term );
439+ $ this ->assertIsArray ( $ found );
440+ $ this ->assertEquals ( $ child_term , $ found ['term_id ' ] );
441+
442+ _unregister_taxonomy ( 'foo ' );
443+ }
444+
445+ /**
446+ * @ticket 55358
447+ * @covers ::term_exists()
448+ */
449+ public function test_term_exists_with_non_numeric_parent_term () {
450+ register_taxonomy (
451+ 'foo ' ,
452+ 'post ' ,
453+ array (
454+ 'hierarchical ' => true ,
455+ )
456+ );
457+
458+ $ parent_term = self ::factory ()->term ->create (
459+ array (
460+ 'taxonomy ' => 'foo ' ,
461+ )
462+ );
463+
464+ $ child_term = self ::factory ()->term ->create (
465+ array (
466+ 'taxonomy ' => 'foo ' ,
467+ 'parent ' => $ parent_term ,
468+ 'slug ' => 'child-term ' ,
469+ )
470+ );
471+
472+ // Test with non-numeric parent_term (should not set parent filter)
473+ $ found = term_exists ( 'child-term ' , 'foo ' , 'not-numeric ' );
474+ $ this ->assertIsArray ( $ found );
475+ $ this ->assertEquals ( $ child_term , $ found ['term_id ' ] );
476+
477+ // Test with null parent_term (should not set parent filter)
478+ $ found = term_exists ( 'child-term ' , 'foo ' , null );
479+ $ this ->assertIsArray ( $ found );
480+ $ this ->assertEquals ( $ child_term , $ found ['term_id ' ] );
481+
482+ _unregister_taxonomy ( 'foo ' );
483+ }
484+
485+ /**
486+ * @ticket 55358
487+ * @covers ::term_exists()
488+ */
489+ public function test_term_exists_with_empty_taxonomy_and_numeric_parent () {
490+ register_taxonomy (
491+ 'foo ' ,
492+ 'post ' ,
493+ array (
494+ 'hierarchical ' => true ,
495+ )
496+ );
497+
498+ $ parent_term = self ::factory ()->term ->create (
499+ array (
500+ 'taxonomy ' => 'foo ' ,
501+ )
502+ );
503+
504+ $ child_term = self ::factory ()->term ->create (
505+ array (
506+ 'taxonomy ' => 'foo ' ,
507+ 'parent ' => $ parent_term ,
508+ 'slug ' => 'child-term ' ,
509+ )
510+ );
511+
512+ // Test with empty taxonomy and numeric parent_term (should not set parent filter)
513+ $ found = term_exists ( 'child-term ' , '' , $ parent_term );
514+ $ this ->assertIsString ( $ found );
515+ $ this ->assertEquals ( $ child_term , $ found );
516+
517+ _unregister_taxonomy ( 'foo ' );
518+ }
519+
520+ /**
521+ * @ticket 55358
522+ * @covers ::term_exists()
523+ */
524+ public function test_term_exists_with_wordpress_categories () {
525+ // Create a parent category
526+ $ parent_cat = self ::factory ()->term ->create (
527+ array (
528+ 'taxonomy ' => 'category ' ,
529+ 'name ' => 'Parent Category ' ,
530+ 'slug ' => 'parent-category ' ,
531+ )
532+ );
533+
534+ // Create a child category
535+ $ child_cat = self ::factory ()->term ->create (
536+ array (
537+ 'taxonomy ' => 'category ' ,
538+ 'name ' => 'Child Category ' ,
539+ 'slug ' => 'child-category ' ,
540+ 'parent ' => $ parent_cat ,
541+ )
542+ );
543+
544+ // Test finding child category with numeric parent
545+ $ found = term_exists ( 'child-category ' , 'category ' , $ parent_cat );
546+ $ this ->assertIsArray ( $ found );
547+ $ this ->assertEquals ( $ child_cat , $ found ['term_id ' ] );
548+
549+ // Test finding child category with wrong parent
550+ $ found = term_exists ( 'child-category ' , 'category ' , 999 );
551+ $ this ->assertNull ( $ found );
552+ }
404553}
0 commit comments