Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
03/27/2023 06:19:06 PM (2 years ago)
Author:
imath
Message:

Improve Components Member's single item navigation generation

  • Edit the BP_Component Class so that it globalize navigation items before registering it.
  • Introduce bp_get_component_navigations(), a new function that will be used to get Member's single navigation customizable slugs within the BuddyPress settings area.
  • Perform all remaining bp_loggedin_user_domain() replacements (55) in favor of the bp_loggedin_user_url() function which uses BP Rewrites to build URLs.
  • Improve bp_loggedin_user_link() by adding a new $chunks array of arguments to output escaped URL in templates.
  • Adapt some PHPUnit testcases.

Props r-a-y, johnjamesjacoby, boonebgorges

Closes https://github.com/buddypress/buddypress/pull/78
See #4954

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/classes/class-bp-component.php

    r13432 r13442  
    187187     */
    188188    public $directory_title = '';
     189
     190    /**
     191     * Component's main nav items.
     192     *
     193     * @since 12.0.0
     194     * @var array
     195     */
     196    public $main_nav = array();
     197
     198    /**
     199     * Component's main nav sub items.
     200     *
     201     * @since 12.0.0
     202     * @var array
     203     */
     204    public $sub_nav  = array();
    189205
    190206    /** Methods ***************************************************************/
     
    529545
    530546        // Setup navigation.
    531         add_action( 'bp_setup_nav',              array( $this, 'setup_nav'              ), 10 );
     547        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 );
    532551
    533552        // Setup WP Toolbar menus.
     
    598617     *
    599618     * @since 1.5.0
    600      *
    601      * @see bp_core_new_nav_item() For a description of the $main_nav
    602      *      parameter formatting.
    603      * @see bp_core_new_subnav_item() For a description of how each item
    604      *      in the $sub_nav parameter array should be formatted.
     619     * @since 12.0.0 Uses `BP_Component::$main_nav` && `BP_Component::$sub_nav` to globalize nav items.
    605620     *
    606621     * @param array $main_nav Optional. Passed directly to bp_core_new_nav_item().
     
    611626     */
    612627    public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    613 
     628        if ( isset( $main_nav['slug'] ) ) {
     629            // Always set the component ID.
     630            $this->main_nav['component_id'] = $this->id;
     631
     632            if ( ! isset( $main_nav['rewrite_id'] ) ) {
     633                $this->main_nav['rewrite_id'] = 'bp_member_' . str_replace( '-', '_', $main_nav['slug'] );
     634            } elseif ( ! $main_nav['rewrite_id'] ) {
     635                unset( $main_nav['rewrite_id'] );
     636            }
     637
     638            $this->main_nav = array_merge( $this->main_nav, $main_nav );
     639
     640            // Sub nav items are not required.
     641            if ( ! empty( $sub_nav ) ) {
     642                foreach( (array) $sub_nav as $nav ) {
     643                    if ( ! isset( $nav['slug'], $nav['parent_slug'] ) ) {
     644                        continue;
     645                    }
     646
     647                    if ( ! isset( $nav['rewrite_id'] ) ) {
     648                        $nav['rewrite_id'] = 'bp_member_' . str_replace( '-', '_', $nav['parent_slug'] ) . '_' . str_replace( '-', '_', $nav['slug'] );
     649                    } elseif ( ! $nav['rewrite_id'] ) {
     650                        unset( $nav['rewrite_id'] );
     651                    }
     652
     653                    $this->sub_nav[] = $nav;
     654                }
     655            }
     656        }
     657    }
     658
     659    /**
     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() {
    614670        // No sub nav items without a main nav item.
    615         if ( !empty( $main_nav ) ) {
    616             // Always set the component ID.
    617             $main_nav['component_id'] = $this->id;
    618 
    619             bp_core_new_nav_item( $main_nav, 'members' );
     671        if ( $this->main_nav ) {
     672            bp_core_new_nav_item( $this->main_nav, 'members' );
    620673
    621674            // Sub nav items are not required.
    622             if ( !empty( $sub_nav ) ) {
    623                 foreach( (array) $sub_nav as $nav ) {
     675            if ( $this->sub_nav ) {
     676                foreach( (array) $this->sub_nav as $nav ) {
    624677                    bp_core_new_subnav_item( $nav, 'members' );
    625678                }
Note: See TracChangeset for help on using the changeset viewer.