Skip to:
Content

BuddyPress.org

Ticket #6107: 6107.03.patch

File 6107.03.patch, 7.5 KB (added by imath, 5 years ago)
  • src/bp-core/bp-core-filters.php

    diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
    index 514acfa..13f0381 100644
    add_filter( 'wpmu_signup_user_notification', 'bp_core_activation_signup_user_not 
    509509 * @param string $seplocation Direction to display title.
    510510 * @return string New page title.
    511511 */
    512 function bp_modify_page_title( $title, $sep = '', $seplocation = '' ) {
     512function bp_modify_page_title() {
     513        $args = func_get_args();
     514        $return_array = false;
    513515
    514516        // If this is not a BP page, just return the title produced by WP
    515517        if ( bp_is_blog_page() ) {
    516                 return $title;
     518                return $args[0];
    517519        }
    518520
    519521        // If this is a 404, let WordPress handle it
    520522        if ( is_404() ) {
    521                 return $title;
     523                return $args[0];
    522524        }
    523525
    524526        // If this is the front page of the site, return WP's title
    525527        if ( is_front_page() || is_home() ) {
    526                 return $title;
     528                return $args[0];
    527529        }
    528530
    529         $bp    = buddypress();
    530         $title = '';
     531        $bp             = buddypress();
     532        $bp_title       = array();
     533        $current_filter = current_filter();
     534
     535        /**
     536         * wp_title_parts was introduced in WordPress 4.0
     537         *
     538         * We first try to use it, if it fails, we still can count on the wp_title filter. We're
     539         * using this new way of filtering the title since the introduction of the 'title-tag'
     540         * feature (WordPress 4.1) in order to let WordPress build the title with our data.
     541         */
     542        if ( 'wp_title_parts' == $current_filter ) {
     543                $return_array = true;
     544        } else if ( 'wp_title' == $current_filter ) {
     545                // Default separator is » in WordPress
     546                $sep = '»';
     547                if ( ! empty( $args[1] ) ) {
     548                        $sep = $args[1];
     549                }
     550
     551                // Arbitrary default seplocation if not set
     552                $seplocation = 'right';
     553                if ( ! empty( $args[2] ) ) {
     554                        $seplocation = $args[2];
     555                }
     556
     557                if ( ! empty( $bp->title_tag ) ) {
     558                        $title = join( ' ' . $sep . ' ', $bp->title_tag );
     559                        return apply_filters( 'bp_modify_page_title', $title, $args[0], $sep, $seplocation );
     560                }
     561        }
    531562
    532563        // Displayed user
    533564        if ( bp_get_displayed_user_fullname() && ! is_404() ) {
    function bp_modify_page_title( $title, $sep = '', $seplocation = '' ) { 
    566597
    567598                // If on the user profile's landing page, just use the fullname
    568599                if ( bp_is_current_component( $bp->default_component ) && bp_get_requested_url() === bp_displayed_user_domain() ) {
    569                         $title = bp_get_displayed_user_fullname();
     600                        $bp_title[] = bp_get_displayed_user_fullname();
    570601
    571602                // Use component name on member pages
    572603                } else {
     604                        $bp_title = array_merge( $bp_title, array_map( 'strip_tags', array(
     605                                bp_get_displayed_user_fullname(),
     606                                $component_name,
     607                        ) ) );
     608
    573609                        // If we have a subnav name, add it separately for localization
    574610                        if ( ! empty( $component_subnav_name ) ) {
    575                                 // translators: construct the page title. 1 = user name, 2 = component name, 3 = separator, 4 = component subnav name
    576                                 $title = strip_tags( sprintf( __( '%1$s %3$s %2$s %3$s %4$s', 'buddypress' ), bp_get_displayed_user_fullname(), $component_name, $sep, $component_subnav_name ) );
    577 
    578                         } else {
    579                                 // translators: construct the page title. 1 = user name, 2 = component name, 3 = separator
    580                                 $title = strip_tags( sprintf( __( '%1$s %3$s %2$s', 'buddypress' ), bp_get_displayed_user_fullname(), $component_name, $sep ) );
     611                                $bp_title[] = strip_tags( $component_subnav_name );
    581612                        }
    582613                }
    583614
    584615        // A single group
    585616        } elseif ( bp_is_active( 'groups' ) && ! empty( $bp->groups->current_group ) && ! empty( $bp->bp_options_nav[ $bp->groups->current_group->slug ] ) ) {
    586617                $subnav = isset( $bp->bp_options_nav[ $bp->groups->current_group->slug ][ bp_current_action() ]['name'] ) ? $bp->bp_options_nav[ $bp->groups->current_group->slug ][ bp_current_action() ]['name'] : '';
    587                 // translators: 1 = group name, 2 = group nav section name, 3 = separator
    588                 $title = sprintf( __( '%1$s %3$s %2$s', 'buddypress' ), $bp->bp_options_title, $subnav, $sep );
     618                $bp_title = array( $bp->bp_options_title, $subnav );
    589619
    590620        // A single item from a component other than groups
    591621        } elseif ( bp_is_single_item() ) {
    592                 // translators: 1 = component item name, 2 = component nav section name, 3 = separator
    593                 $title = sprintf( __( '%1$s %3$s %2$s', 'buddypress' ), $bp->bp_options_title, $bp->bp_options_nav[ bp_current_item() ][ bp_current_action() ]['name'], $sep );
     622                $bp_title = array( $bp->bp_options_title, $bp->bp_options_nav[ bp_current_item() ][ bp_current_action() ]['name'] );
    594623
    595624        // An index or directory
    596625        } elseif ( bp_is_directory() ) {
    597626                $current_component = bp_current_component();
    598627
    599628                // No current component (when does this happen?)
    600                 if ( empty( $current_component ) ) {
    601                         $title = _x( 'Directory', 'component directory title', 'buddypress' );
    602                 } else {
    603                         $title = bp_get_directory_title( $current_component );
     629                $bp_title = array( _x( 'Directory', 'component directory title', 'buddypress' ) );
     630
     631                if ( ! empty( $current_component ) ) {
     632                        $bp_title = array( bp_get_directory_title( $current_component ) );
    604633                }
    605634
    606635        // Sign up page
    607636        } elseif ( bp_is_register_page() ) {
    608                 $title = __( 'Create an Account', 'buddypress' );
     637                $bp_title = array( __( 'Create an Account', 'buddypress' ) );
    609638
    610639        // Activation page
    611640        } elseif ( bp_is_activation_page() ) {
    612                 $title = __( 'Activate your Account', 'buddypress' );
     641                $bp_title = array( __( 'Activate your Account', 'buddypress' ) );
    613642
    614643        // Group creation page
    615644        } elseif ( bp_is_group_create() ) {
    616                 $title = __( 'Create a Group', 'buddypress' );
     645                $bp_title = array( __( 'Create a Group', 'buddypress' ) );
    617646
    618647        // Blog creation page
    619648        } elseif ( bp_is_create_blog() ) {
    620                 $title = __( 'Create a Site', 'buddypress' );
     649                $bp_title = array( __( 'Create a Site', 'buddypress' ) );
    621650        }
    622651
    623652        // Some BP nav items contain item counts. Remove them
    624         $title = preg_replace( '|<span>[0-9]+</span>|', '', $title );
     653        $bp_title = array_map( function( $t ) {
     654            return preg_replace( '|<span>[0-9]+</span>|' , '', $t );
     655        }, $bp_title);
     656
     657        // Set a global with the bp_title merged with site title
     658        $bp->title_tag = array_merge( $bp_title, array( get_bloginfo( 'name', 'display' ) ) );
     659
     660        if ( ! empty( $return_array ) ) {
     661                $title = array_reverse( $bp_title );
     662
     663                if ( ! bp_is_directory() && ! bp_is_register_page() && ! bp_is_activation_page() ) {
     664                        $title = array_merge( array( '' ), $title );
     665                }
     666
     667                /**
     668                 * The filters wptexturize, convert_chars and esc_html
     669                 * will be applied by WordPress later in wp_title() just
     670                 * before returning the title.
     671                 *
     672                 * @param  array $title list of BuddyPress page title parts
     673                 */
     674                return apply_filters( 'bp_modify_page_title_parts', $title );
    625675
    626         return apply_filters( 'bp_modify_page_title', $title . ' ' . $sep . ' ', $title, $sep, $seplocation );
     676        // Build the title it used to be done before 'title-tag' feature
     677        } else {
     678                // Set the title
     679                $title = join( ' ' . $sep . ' ', $bp->title_tag );
     680                /**
     681                 * @param  string $title the BuddyPress page title
     682                 * @param  string $args[0] the original WordPress page title
     683                 * @param  string $sep the title parts separator
     684                 * @param  string $seplocation Location of the separator (left or right).
     685                 */
     686                return apply_filters( 'bp_modify_page_title', $title, $args[0], $sep, $seplocation );
     687        }
    627688}
    628 add_filter( 'wp_title', 'bp_modify_page_title', 10, 3 );
     689add_filter( 'wp_title_parts', 'bp_modify_page_title', 10, 1 );
     690add_filter( 'wp_title',       'bp_modify_page_title', 20, 3 );
    629691add_filter( 'bp_modify_page_title', 'wptexturize'     );
    630692add_filter( 'bp_modify_page_title', 'convert_chars'   );
    631693add_filter( 'bp_modify_page_title', 'esc_html'        );