| | 468 | |
| | 469 | function test_get_the_terms_by_order() { |
| | 470 | // Set up a sortable taxonomy. The only way to add a value to the term_order column is via a sortable tax. |
| | 471 | register_taxonomy( 'sortable-taxonomy', 'post', array( |
| | 472 | 'sort' => true, |
| | 473 | ) ); |
| | 474 | |
| | 475 | $post_id = $this->factory->post->create(); |
| | 476 | |
| | 477 | // Create three tags to test ordering. Purposefully creating tags out of order to be able to easily verify ordering |
| | 478 | $term1_id = $this->factory->term->create( array( 'taxonomy' => 'sortable-taxonomy', 'name' => 'M Term' ) ); |
| | 479 | $term2_id = $this->factory->term->create( array( 'taxonomy' => 'sortable-taxonomy', 'name' => 'A Term' ) ); |
| | 480 | $term3_id = $this->factory->term->create( array( 'taxonomy' => 'sortable-taxonomy', 'name' => 'Z Term' ) ); |
| | 481 | |
| | 482 | // Attach the terms to the post |
| | 483 | $tt_ids = wp_set_object_terms( |
| | 484 | $post_id, |
| | 485 | array( $term1_id, $term2_id, $term3_id ), |
| | 486 | 'sortable-taxonomy' |
| | 487 | ); |
| | 488 | |
| | 489 | // Verify get by term order |
| | 490 | $post_terms_by_term_order = wp_get_post_terms( $post_id, 'sortable-taxonomy', array( 'orderby' => 'term_order' ) ); |
| | 491 | $this->assertEquals( array( $term1_id, $term2_id, $term3_id ), wp_list_pluck( $post_terms_by_term_order, 'term_id' ) ); |
| | 492 | |
| | 493 | // Verify get by term slug |
| | 494 | $post_terms_by_term_slug = wp_get_post_terms( $post_id, 'sortable-taxonomy', array( 'orderby' => 'slug' ) ); |
| | 495 | $this->assertEquals( array( $term2_id, $term1_id, $term3_id ), wp_list_pluck( $post_terms_by_term_slug, 'term_id' ) ); |
| | 496 | |
| | 497 | // Verify get by term name |
| | 498 | $post_terms_by_term_name = wp_get_post_terms( $post_id, 'sortable-taxonomy', array( 'orderby' => 'name' ) ); |
| | 499 | $this->assertEquals( array( $term2_id, $term1_id, $term3_id ), wp_list_pluck( $post_terms_by_term_name, 'term_id' ) ); |
| | 500 | } |
| | 501 | |
| | 502 | /** |
| | 503 | * @ticket 9547 |
| | 504 | */ |
| | 505 | function test_get_the_terms_with_args() { |
| | 506 | $post_id = $this->factory->post->create(); |
| | 507 | |
| | 508 | // Create three tags to test ordering. Purposefully creating tags out of order to be able to easily verify ordering |
| | 509 | $term1_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'M Tag', ) ); |
| | 510 | $term2_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'A Tag', ) ); |
| | 511 | $term3_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'Z Tag', ) ); |
| | 512 | |
| | 513 | // Attach the terms to the post |
| | 514 | $tt_ids = wp_set_object_terms( |
| | 515 | $post_id, |
| | 516 | array( $term1_id, $term2_id, $term3_id ), |
| | 517 | 'post_tag' |
| | 518 | ); |
| | 519 | |
| | 520 | // Make sure that the terms added are available when the args parameter is used |
| | 521 | $terms = get_the_terms( $post_id, 'post_tag', array( 'orderby' => 'name' ) ); |
| | 522 | $this->assertEquals( array( $term2_id, $term1_id, $term3_id ), wp_list_pluck( $terms, 'term_id' ) ); |
| | 523 | |
| | 524 | /** |
| | 525 | * Verify that using the args parameter produces two different results when the args parameter is different. This |
| | 526 | * suggests that the cache key is working correctly by taking the args into account. |
| | 527 | */ |
| | 528 | $orderby_asc = get_the_terms( $post_id, 'post_tag', array( 'order' => 'ASC' ) ); |
| | 529 | $orderby_desc = get_the_terms( $post_id, 'post_tag', array( 'order' => 'DESC' ) ); |
| | 530 | $this->assertFalse( in_array( $orderby_asc, $orderby_desc ) ); |
| | 531 | } |
| | 532 | |
| | 533 | /** |
| | 534 | * @ticket 9547 |
| | 535 | */ |
| | 536 | function test_get_the_term_list_with_args() { |
| | 537 | $post_id = $this->factory->post->create(); |
| | 538 | |
| | 539 | // Create three tags to test ordering. Purposefully creating tags out of order to be able to easily verify ordering |
| | 540 | $term1_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'M Tag', ) ); |
| | 541 | $term2_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'A Tag', ) ); |
| | 542 | $term3_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'Z Tag', ) ); |
| | 543 | |
| | 544 | // Attach the terms to the post |
| | 545 | $tt_ids = wp_set_object_terms( |
| | 546 | $post_id, |
| | 547 | array( $term1_id, $term2_id, $term3_id ), |
| | 548 | 'post_tag' |
| | 549 | ); |
| | 550 | |
| | 551 | // Verify that the term list returns its expected result |
| | 552 | $links = array(); |
| | 553 | foreach ( array( $term2_id, $term1_id, $term3_id ) as $term_id ) { |
| | 554 | $term = get_term( $term_id, 'post_tag' ); |
| | 555 | $term_link = get_term_link( $term_id, 'post_tag' ); |
| | 556 | $links[] = '<a href="' . esc_url( $term_link ) . '" rel="tag">' . $term->name . '</a>'; |
| | 557 | } |
| | 558 | $expected = join( '', $links ); |
| | 559 | |
| | 560 | $this->assertEquals( $expected, get_the_term_list( $post_id, 'post_tag', '', '', '', array( 'order' => 'ASC', 'orderby' => 'name' ) ) ); |
| | 561 | |
| | 562 | /** |
| | 563 | * Verify that using the args parameter produces two different results when the args parameter is different. This |
| | 564 | * suggests that the cache key is working correctly by taking the args into account. |
| | 565 | */ |
| | 566 | $orderby_asc = get_the_term_list( $post_id, 'post_tag', '', '', '', array( 'order' => 'ASC' ) ); |
| | 567 | $orderby_desc = get_the_term_list( $post_id, 'post_tag', '', '', '', array( 'order' => 'DESC' ) ); |
| | 568 | $this->assertNotEquals( $orderby_asc, $orderby_desc ); |
| | 569 | } |
| | 570 | |
| | 571 | /** |
| | 572 | * @ticket 9547 |
| | 573 | */ |
| | 574 | function test_the_terms_with_args() { |
| | 575 | $post_id = $this->factory->post->create(); |
| | 576 | |
| | 577 | // Create three tags to test ordering. Purposefully creating tags out of order to be able to easily verify ordering |
| | 578 | $term1_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'M Tag', ) ); |
| | 579 | $term2_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'A Tag', ) ); |
| | 580 | $term3_id = $this->factory->term->create( array( 'taxonomy' => 'post_tag', 'name' => 'Z Tag', ) ); |
| | 581 | |
| | 582 | // Attach the terms to the post |
| | 583 | $tt_ids = wp_set_object_terms( |
| | 584 | $post_id, |
| | 585 | array( $term1_id, $term2_id, $term3_id ), |
| | 586 | 'post_tag' |
| | 587 | ); |
| | 588 | |
| | 589 | // Prepare a string that represents the output of the_terms when setting orderby to name and order to ASC |
| | 590 | $links = array(); |
| | 591 | foreach ( array( $term2_id, $term1_id, $term3_id ) as $term_id ) { |
| | 592 | $term = get_term( $term_id, 'post_tag' ); |
| | 593 | $term_link = get_term_link( $term_id, 'post_tag' ); |
| | 594 | $links[] = '<a href="' . esc_url( $term_link ) . '" rel="tag">' . $term->name . '</a>'; |
| | 595 | } |
| | 596 | $expected1 = join( ', ', $links ); |
| | 597 | |
| | 598 | /** |
| | 599 | * Prepare a string that represents the output of the_terms when setting order to DESC; It is important to test |
| | 600 | * two variants to ensure that the cache keys are working properly. |
| | 601 | */ |
| | 602 | $links = array(); |
| | 603 | foreach ( array( $term3_id, $term1_id, $term2_id ) as $term_id ) { |
| | 604 | $term = get_term( $term_id, 'post_tag' ); |
| | 605 | $term_link = get_term_link( $term_id, 'post_tag' ); |
| | 606 | $links[] = '<a href="' . esc_url( $term_link ) . '" rel="tag">' . $term->name . '</a>'; |
| | 607 | } |
| | 608 | $expected2 = join( ', ', $links ); |
| | 609 | |
| | 610 | /** |
| | 611 | * At the end of the test, the_terms will run twice producing output. The output should be the concatenation of |
| | 612 | * the first and second test string. |
| | 613 | */ |
| | 614 | $this->expectOutputString( $expected1 . $expected2 ); |
| | 615 | |
| | 616 | the_terms( $post_id, 'post_tag', '', ', ', '', array( 'order' => 'ASC', 'orderby' => 'name' ) ); |
| | 617 | the_terms( $post_id, 'post_tag', '', ', ', '', array( 'order' => 'DESC' ) ); |
| | 618 | } |