Changeset 13450 for trunk/src/bp-core/classes/class-bp-component.php
- Timestamp:
- 04/12/2023 10:12:37 PM (17 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-core/classes/class-bp-component.php
r13442 r13450 544 544 add_action( 'bp_late_include', array( $this, 'late_includes' ) ); 545 545 546 // Generate navigation. 547 add_action( 'bp_setup_nav', array( $this, 'register_nav' ), 7 ); 548 546 549 // Setup navigation. 547 550 add_action( 'bp_setup_nav', array( $this, 'setup_nav' ), 9 ); 548 549 // Generate navigation.550 add_action( 'bp_setup_nav', array( $this, 'generate_nav' ), 10, 0 );551 551 552 552 // Setup WP Toolbar menus. … … 614 614 615 615 /** 616 * Set up component navigation. 617 * 618 * @since 1.5.0 619 * @since 12.0.0 Uses `BP_Component::$main_nav` && `BP_Component::$sub_nav` to globalize nav items. 616 * Registers nav items globalizing them into `BP_Component::$main_nav` & `BP_Component::$sub_nav` properties. 617 * 618 * @since 12.0.0 620 619 * 621 620 * @param array $main_nav Optional. Passed directly to bp_core_new_nav_item(). … … 625 624 * function for a description. 626 625 */ 627 public function setup_nav( $main_nav = array(), $sub_nav = array() ) {626 public function register_nav( $main_nav = array(), $sub_nav = array() ) { 628 627 if ( isset( $main_nav['slug'] ) ) { 629 628 // Always set the component ID. … … 658 657 659 658 /** 660 * Generate component navigation using the nav/subnav set up in `BP_Component::setup_nav()`. 661 * 662 * @since 12.0.0 663 * 664 * @see bp_core_new_nav_item() For a description of the $main_nav 665 * parameter formatting. 666 * @see bp_core_new_subnav_item() For a description of how each item 667 * in the $sub_nav parameter array should be formatted. 668 */ 669 public function generate_nav() { 670 // No sub nav items without a main nav item. 671 if ( $this->main_nav ) { 672 bp_core_new_nav_item( $this->main_nav, 'members' ); 659 * Set up component navigation. 660 * 661 * @since 1.5.0 662 * @since 12.0.0 Uses the registered navigations to generate it. 663 * 664 * @param array $main_nav Optional. Passed directly to bp_core_new_nav_item(). 665 * See that function for a description. 666 * @param array $sub_nav Optional. Multidimensional array, each item in 667 * which is passed to bp_core_new_subnav_item(). See that 668 * function for a description. 669 */ 670 public function setup_nav( $main_nav = array(), $sub_nav = array() ) { 671 // Use the registered navigations if available. 672 if ( empty( $main_nav ) && $this->main_nav ) { 673 // Don't generate navigation if there's no member. 674 if ( ! is_user_logged_in() && ! bp_is_user() ) { 675 return; 676 } 677 678 $generate = true; 679 if ( isset( $this->main_nav['generate'] ) ) { 680 $generate = is_callable( $this->main_nav['generate'] ) ? call_user_func( $this->main_nav['generate'] ) : (bool) $this->main_nav['generate']; 681 unset( $this->main_nav['generate'] ); 682 } 683 684 if ( bp_displayed_user_has_front_template() ) { 685 bp_core_new_nav_item( 686 array( 687 'name' => _x( 'Home', 'Member Home page', 'buddypress' ), 688 'slug' => 'front', 689 'position' => 5, 690 'screen_function' => 'bp_members_screen_display_profile', 691 'default_subnav_slug' => 'public', 692 ), 693 'members' 694 ); 695 } 696 697 if ( 'xprofile' === $this->id ) { 698 $extra_subnavs = wp_list_filter( 699 buddypress()->members->sub_nav, 700 array( 701 'slug' => 'change-avatar', 702 'screen_function' => 'bp_members_screen_change_cover_image', 703 ), 704 'OR' 705 ); 706 707 $this->sub_nav = array_merge( $this->sub_nav, $extra_subnavs ); 708 } 709 710 // No sub nav items without a main nav item. 711 if ( $this->main_nav && $generate) { 712 if ( isset( $this->main_nav['user_has_access_callback'] ) && is_callable( $this->main_nav['user_has_access_callback'] ) ) { 713 $this->main_nav['show_for_displayed_user'] = call_user_func( $this->main_nav['user_has_access_callback'] ); 714 unset( $this->main_nav['user_has_access_callback'] ); 715 } 716 717 bp_core_new_nav_item( $this->main_nav, 'members' ); 718 719 // Sub nav items are not required. 720 if ( $this->sub_nav ) { 721 foreach( (array) $this->sub_nav as $nav ) { 722 if ( isset( $nav['user_has_access_callback'] ) && is_callable( $nav['user_has_access_callback'] ) ) { 723 $nav['user_has_access'] = call_user_func( $nav['user_has_access_callback'] ); 724 unset( $nav['user_has_access_callback'] ); 725 } 726 727 if ( isset( $nav['generate'] ) ) { 728 if ( is_callable( $nav['generate'] ) ) { 729 $generate_sub = call_user_func( $nav['generate'] ); 730 } else { 731 $generate_sub = (bool) $nav['generate']; 732 } 733 734 unset( $nav['generate'] ); 735 736 if ( ! $generate_sub ) { 737 continue; 738 } 739 } 740 741 bp_core_new_subnav_item( $nav, 'members' ); 742 } 743 } 744 } 745 746 /* 747 * If the `$main_nav` is populated, it means a plugin is not registering its navigation using 748 * `BP_Component::register_nav()` to enjoy the BP Rewrites API slug customization. Let's simply 749 * preverve backward compatibility in this case. 750 */ 751 } elseif ( ! empty( $main_nav ) && ! $this->main_nav ) { 752 // Always set the component ID. 753 $main_nav['component_id'] = $this->id; 754 $this->main_nav = $main_nav; 755 756 bp_core_new_nav_item( $main_nav, 'members' ); 673 757 674 758 // Sub nav items are not required. 675 if ( $this->sub_nav ) { 676 foreach( (array) $this->sub_nav as $nav ) { 759 if ( ! empty( $sub_nav ) ) { 760 $this->sub_nav = $sub_nav; 761 762 foreach( (array) $sub_nav as $nav ) { 677 763 bp_core_new_subnav_item( $nav, 'members' ); 678 764 }
Note: See TracChangeset
for help on using the changeset viewer.