Changeset 38506
- Timestamp:
- 09/02/2016 12:09:42 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/shortcodes.php
r37865 r38506 322 322 } 323 323 324 /** 325 * Filters whether to call a shortcode callback. 326 * 327 * Passing a truthy value to the filter will effectively short-circuit the 328 * shortcode generation process, returning that value instead. 329 * 330 * @since 4.7.0 331 * 332 * @param bool|string $return Short-circuit return value. Either false or the value to replace the shortcode with. 333 * @param string $tag Shortcode name. 334 * @param array $attr Shortcode attributes array, 335 * @param array $m Regular expression match array. 336 */ 337 $return = apply_filters( 'pre_do_shortcode_tag', false, $tag, $attr, $m ); 338 if ( false !== $return ) { 339 return $return; 340 } 341 324 342 if ( isset( $m[5] ) ) { 325 343 // enclosing tag - extra parameter -
trunk/tests/phpunit/tests/shortcode.php
r37298 r38506 677 677 $this->assertEquals( $expected, $out ); 678 678 } 679 680 /** 681 * @ticket 37906 682 */ 683 public function test_pre_do_shortcode_tag() { 684 // does nothing if no filters are set up 685 $str = 'pre_do_shortcode_tag'; 686 add_shortcode( $str, array( $this, '_shortcode_pre_do_shortcode_tag' ) ); 687 $result_nofilter = do_shortcode( "[{$str}]" ); 688 $this->assertSame( 'foo', $result_nofilter ); 689 690 // short-circuit with filter 691 add_filter( 'pre_do_shortcode_tag', array( $this, '_filter_pre_do_shortcode_tag_bar' ) ); 692 $result_filter = do_shortcode( "[{$str}]" ); 693 $this->assertSame( 'bar', $result_filter ); 694 695 // respect priority 696 add_filter( 'pre_do_shortcode_tag', array( $this, '_filter_pre_do_shortcode_tag_p11' ), 11 ); 697 $result_priority = do_shortcode( "[{$str}]" ); 698 $this->assertSame( 'p11', $result_priority ); 699 700 // pass arguments 701 $arr = array( 702 'return' => 'p11', 703 'key' => $str, 704 'atts' => array( 'a'=>'b', 'c'=>'d' ), 705 'm' => array( 706 "[{$str} a='b' c='d']", 707 "", 708 $str, 709 " a='b' c='d'", 710 "", 711 "", 712 "", 713 ), 714 ); 715 add_filter( 'pre_do_shortcode_tag', array( $this, '_filter_pre_do_shortcode_tag_attr' ), 12, 4 ); 716 $result_atts = do_shortcode( "[{$str} a='b' c='d']" ); 717 $this->assertSame( wp_json_encode( $arr ), $result_atts ); 718 719 remove_filter( 'pre_do_shortcode_tag', array( $this, '_filter_pre_do_shortcode_tag_attr' ), 12, 4 ); 720 remove_filter( 'pre_do_shortcode_tag', array( $this, '_filter_pre_do_shortcode_tag_p11' ), 11 ); 721 remove_filter( 'pre_do_shortcode_tag', array( $this, '_filter_pre_do_shortcode_tag_bar' ) ); 722 remove_shortcode( $str, array( $this, '_shortcode_pre_do_shortcode_tag' ) ); 723 } 724 725 public function _shortcode_pre_do_shortcode_tag( $atts = array(), $content = '' ) { 726 return 'foo'; 727 } 728 729 public function _filter_pre_do_shortcode_tag_bar() { 730 return 'bar'; 731 } 732 733 public function _filter_pre_do_shortcode_tag_p11() { 734 return 'p11'; 735 } 736 737 public function _filter_pre_do_shortcode_tag_attr( $return, $key, $atts, $m ){ 738 $arr = array( 739 'return' => $return, 740 'key' => $key, 741 'atts' => $atts, 742 'm' => $m, 743 ); 744 return wp_json_encode( $arr ); 745 } 679 746 }
Note: See TracChangeset
for help on using the changeset viewer.