Skip to:
Content

BuddyPress.org

Ticket #6675: 6675.05.patch

File 6675.05.patch, 15.1 KB (added by imath, 6 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 c7c9147..f8d92d1 100644
    add_filter( 'wpmu_signup_user_notification', 'bp_core_activation_signup_user_not 
    649649 * @return string              New page title.
    650650 */
    651651function bp_modify_page_title( $title = '', $sep = '»', $seplocation = 'right' ) {
    652         global $bp, $paged, $page, $_wp_theme_features;
     652        global $paged, $page, $_wp_theme_features;
    653653
    654         // If this is not a BP page, just return the title produced by WP.
    655         if ( bp_is_blog_page() ) {
    656                 return $title;
    657         }
    658 
    659         // If this is a 404, let WordPress handle it.
    660         if ( is_404() ) {
    661                 return $title;
    662         }
    663 
    664         // If this is the front page of the site, return WP's title.
    665         if ( is_front_page() || is_home() ) {
    666                 return $title;
    667         }
     654        // Get the BuddyPress title parts
     655        $bp_title_parts = bp_get_title_parts( $seplocation );
    668656
    669         // Return WP's title if not a BuddyPress page.
    670         if ( ! is_buddypress() ) {
     657        // If not set, simply return the original title
     658        if ( ! $bp_title_parts ) {
    671659                return $title;
    672660        }
    673661
    674         // Setup an empty title parts array.
    675         $title_parts = array();
    676 
    677         // Is there a displayed user, and do they have a name?
    678         $displayed_user_name = bp_get_displayed_user_fullname();
    679 
    680         // Displayed user.
    681         if ( ! empty( $displayed_user_name ) && ! is_404() ) {
    682 
    683                 // Get the component's ID to try and get its name.
    684                 $component_id = $component_name = bp_current_component();
    685 
    686                 // Set empty subnav name.
    687                 $component_subnav_name = '';
    688 
    689                 // Use the component nav name.
    690                 if ( ! empty( $bp->bp_nav[$component_id] ) ) {
    691                         $component_name = _bp_strip_spans_from_title( $bp->bp_nav[ $component_id ]['name'] );
    692 
    693                 // Fall back on the component ID.
    694                 } elseif ( ! empty( $bp->{$component_id}->id ) ) {
    695                         $component_name = ucwords( $bp->{$component_id}->id );
    696                 }
    697 
    698                 // Append action name if we're on a member component sub-page.
    699                 if ( ! empty( $bp->bp_options_nav[ $component_id ] ) && ! empty( $bp->canonical_stack['action'] ) ) {
    700                         $component_subnav_name = wp_filter_object_list( $bp->bp_options_nav[ $component_id ], array( 'slug' => bp_current_action() ), 'and', 'name' );
    701 
    702                         if ( ! empty( $component_subnav_name ) ) {
    703                                 $component_subnav_name = array_shift( $component_subnav_name );
    704                         }
    705                 }
    706 
    707                 // If on the user profile's landing page, just use the fullname.
    708                 if ( bp_is_current_component( $bp->default_component ) && ( bp_get_requested_url() === bp_displayed_user_domain() ) ) {
    709                         $title_parts[] = $displayed_user_name;
    710 
    711                 // Use component name on member pages.
    712                 } else {
    713                         $title_parts = array_merge( $title_parts, array_map( 'strip_tags', array(
    714                                 $displayed_user_name,
    715                                 $component_name,
    716                         ) ) );
    717 
    718                         // If we have a subnav name, add it separately for localization.
    719                         if ( ! empty( $component_subnav_name ) ) {
    720                                 $title_parts[] = strip_tags( $component_subnav_name );
    721                         }
    722                 }
    723 
    724         // A single group.
    725         } elseif ( bp_is_active( 'groups' ) && ! empty( $bp->groups->current_group ) && ! empty( $bp->bp_options_nav[ $bp->groups->current_group->slug ] ) ) {
    726                 $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'] : '';
    727                 $title_parts = array( $bp->bp_options_title, $subnav );
    728 
    729         // A single item from a component other than groups.
    730         } elseif ( bp_is_single_item() ) {
    731                 $title_parts = array( $bp->bp_options_title, $bp->bp_options_nav[ bp_current_item() ][ bp_current_action() ]['name'] );
    732 
    733         // An index or directory.
    734         } elseif ( bp_is_directory() ) {
    735                 $current_component = bp_current_component();
    736 
    737                 // No current component (when does this happen?).
    738                 $title_parts = array( _x( 'Directory', 'component directory title', 'buddypress' ) );
    739 
    740                 if ( ! empty( $current_component ) ) {
    741                         $title_parts = array( bp_get_directory_title( $current_component ) );
    742                 }
    743 
    744         // Sign up page.
    745         } elseif ( bp_is_register_page() ) {
    746                 $title_parts = array( __( 'Create an Account', 'buddypress' ) );
    747 
    748         // Activation page.
    749         } elseif ( bp_is_activation_page() ) {
    750                 $title_parts = array( __( 'Activate Your Account', 'buddypress' ) );
    751 
    752         // Group creation page.
    753         } elseif ( bp_is_group_create() ) {
    754                 $title_parts = array( __( 'Create a Group', 'buddypress' ) );
    755 
    756         // Blog creation page.
    757         } elseif ( bp_is_create_blog() ) {
    758                 $title_parts = array( __( 'Create a Site', 'buddypress' ) );
    759         }
    760 
    761         // Strip spans.
    762         $title_parts = array_map( '_bp_strip_spans_from_title', $title_parts );
    763 
    764         // Sep on right, so reverse the order.
    765         if ( 'right' == $seplocation ) {
    766                 $title_parts = array_reverse( $title_parts );
    767         }
    768 
    769662        // Get the blog name, so we can check if the original $title included it.
    770663        $blogname = get_bloginfo( 'name', 'display' );
    771664
    function bp_modify_page_title( $title = '', $sep = '»', $seplocation = 'ri 
    777670         */
    778671        $title_tag_compatibility = (bool) ( ! empty( $_wp_theme_features['title-tag'] ) || strstr( $title, $blogname ) );
    779672
    780         // Append the site title to title parts if theme supports title tag.
     673        // Append the site title to title parts if theme supports title tag
    781674        if ( true === $title_tag_compatibility ) {
    782                 $title_parts[] = $blogname;
     675                $bp_title_parts['site'] = $blogname;
    783676
    784                 if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
    785                         $title_parts[] = sprintf( __( 'Page %s', 'buddypress' ), max( $paged, $page ) );
     677                if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() && ! bp_is_single_activity() ) {
     678                        $bp_title_parts['page'] = sprintf( __( 'Page %s', 'buddypress' ), max( $paged, $page ) );
    786679                }
    787680        }
    788681
    789         // Pad the separator with 1 space on each side.
     682        // Pad the separator with 1 space on each side
    790683        $prefix = str_pad( $sep, strlen( $sep ) + 2, ' ', STR_PAD_BOTH );
    791684
    792         // Join the parts together.
    793         $new_title = join( $prefix, array_filter( $title_parts ) );
     685        // Join the parts together
     686        $new_title = join( $prefix, array_filter( $bp_title_parts ) );
    794687
    795         // Append the prefix for pre `title-tag` compatibility.
     688        // Append the prefix for pre `title-tag` compatibility
    796689        if ( false === $title_tag_compatibility ) {
    797690                $new_title = $new_title . $prefix;
    798691        }
    799692
    800693        /**
    801          * Filters the page title for BuddyPress pages.
     694         * Filters the older 'wp_title' page title for BuddyPress pages.
    802695         *
    803696         * @since  1.5.0
    804697         *
    function bp_modify_page_title( $title = '', $sep = '»', $seplocation = 'ri 
    809702         */
    810703        return apply_filters( 'bp_modify_page_title', $new_title, $title, $sep, $seplocation );
    811704}
    812 add_filter( 'wp_title', 'bp_modify_page_title', 20, 3 );
    813 add_filter( 'bp_modify_page_title', 'wptexturize'     );
    814 add_filter( 'bp_modify_page_title', 'convert_chars'   );
    815 add_filter( 'bp_modify_page_title', 'esc_html'        );
     705add_filter( 'wp_title',             'bp_modify_page_title', 20, 3 );
     706add_filter( 'bp_modify_page_title', 'wptexturize'                 );
     707add_filter( 'bp_modify_page_title', 'convert_chars'               );
     708add_filter( 'bp_modify_page_title', 'esc_html'                    );
    816709
    817710/**
    818  * Strip span tags out of title part strings.
     711 * Filter the document title for BuddyPress pages.
    819712 *
    820  * This is a temporary function for compatibility with WordPress versions
    821  * less than 4.0, and should be removed at a later date.
     713 * @since 2.4.3
    822714 *
    823  * @param string $title_part Title part to clean up.
    824  * @return string
     715 * @param array $title The WordPress document title parts
     716 * @return array the unchanged title parts or the BuddyPress ones
    825717 */
    826 function _bp_strip_spans_from_title( $title_part = '' ) {
    827         $title = $title_part;
    828         $span = strpos( $title, '<span' );
    829         if ( false !== $span ) {
    830                 $title = substr( $title, 0, $span - 1 );
     718function bp_modify_document_title_parts( $title = array() ) {
     719        // Get the BuddyPress title parts
     720        $bp_title_parts = bp_get_title_parts();
     721
     722        // If not set, simply return the original title
     723        if ( ! $bp_title_parts ) {
     724                return $title;
    831725        }
    832         return $title;
     726
     727        // Get the separator used by wp_get_document_title()
     728        $sep = apply_filters( 'document_title_separator', '-' );
     729
     730        // Build the BuddyPress portion of the title.
     731        // We don't need to sanitize this as WordPress will take care of it.
     732        $bp_title = array(
     733                'title' => join( " $sep ", $bp_title_parts )
     734        );
     735
     736        // Add the pagination number if needed (not sure if this is necessary).
     737        if ( isset( $title['page'] ) && ! bp_is_single_activity() ) {
     738                $bp_title['page'] = $title['page'];
     739        }
     740
     741        // Add the sitename if needed.
     742        if ( isset( $title['site'] ) ) {
     743                $bp_title['site'] = $title['site'];
     744        }
     745
     746        /**
     747         * Filters BuddyPress title parts that will be used into the document title.
     748         *
     749         * @since  2.4.3
     750         *
     751         * @param  array $bp_title   The BuddyPress page title parts.
     752         * @param  array $title      The original WordPress title parts.
     753         */
     754        return apply_filters( 'bp_modify_document_title_parts', $bp_title, $title );
    833755}
     756add_filter( 'document_title_parts', 'bp_modify_document_title_parts', 20, 1 );
    834757
    835758/**
    836759 * Add BuddyPress-specific items to the wp_nav_menu.
  • src/bp-core/bp-core-functions.php

    diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
    index 76ec0c9..f865d7c 100644
    function bp_remove_adjacent_posts_rel_link() { 
    22822282}
    22832283add_action( 'bp_init', 'bp_remove_adjacent_posts_rel_link' );
    22842284
     2285/**
     2286 * Strip the span count of a menu item or of a title part.
     2287 *
     2288 * @since 2.2.2
     2289 *
     2290 * @param string $title_part Title part to clean up.
     2291 * @return string
     2292 */
     2293function _bp_strip_spans_from_title( $title_part = '' ) {
     2294        $title = $title_part;
     2295        $span = strpos( $title, '<span' );
     2296        if ( false !== $span ) {
     2297                $title = substr( $title, 0, $span - 1 );
     2298        }
     2299        return trim( $title );
     2300}
     2301
    22852302/** Nav Menu ******************************************************************/
    22862303
    22872304/**
    function bp_nav_menu_get_loggedin_pages() { 
    23332350        foreach ( $bp_menu_items as $bp_item ) {
    23342351
    23352352                // Remove <span>number</span>.
    2336                 $item_name = preg_replace( '/([.0-9]+)/', '', $bp_item['name'] );
    2337                 $item_name = trim( strip_tags( $item_name ) );
     2353                $item_name = _bp_strip_spans_from_title( $bp_item['name'] );
    23382354
    23392355                $page_args[ $bp_item['slug'] ] = (object) array(
    23402356                        'ID'             => -1,
  • src/bp-core/bp-core-template.php

    diff --git src/bp-core/bp-core-template.php src/bp-core/bp-core-template.php
    index 3431f80..88d4bca 100644
    function bp_is_register_page() { 
    27822782}
    27832783
    27842784/**
     2785 * Get the title parts of the BuddyPress displayed page
     2786 *
     2787 * @since 2.4.3
     2788 *
     2789 * @param string $seplocation
     2790 * @return array the title parts
     2791 */
     2792function bp_get_title_parts( $seplocation = 'right' ) {
     2793        $bp = buddypress();
     2794
     2795        // Defaults to an empty array
     2796        $bp_title_parts = array();
     2797
     2798        // If this is not a BP page, return the empty array.
     2799        if ( bp_is_blog_page() ) {
     2800                return $bp_title_parts;
     2801        }
     2802
     2803        // If this is a 404, return the empty array.
     2804        if ( is_404() ) {
     2805                return $bp_title_parts;
     2806        }
     2807
     2808        // If this is the front page of the site, return the empty array.
     2809        if ( is_front_page() || is_home() ) {
     2810                return $bp_title_parts;
     2811        }
     2812
     2813        // Return the empty array if not a BuddyPress page.
     2814        if ( ! is_buddypress() ) {
     2815                return $bp_title_parts;
     2816        }
     2817
     2818        // Now we can build the BP Title Parts
     2819        // Is there a displayed user, and do they have a name?
     2820        $displayed_user_name = bp_get_displayed_user_fullname();
     2821
     2822        // Displayed user.
     2823        if ( ! empty( $displayed_user_name ) && ! is_404() ) {
     2824
     2825                // Get the component's ID to try and get its name.
     2826                $component_id = $component_name = bp_current_component();
     2827
     2828                // Set empty subnav name.
     2829                $component_subnav_name = '';
     2830
     2831                // Use the component nav name.
     2832                if ( ! empty( $bp->bp_nav[$component_id] ) ) {
     2833                        $component_name = _bp_strip_spans_from_title( $bp->bp_nav[ $component_id ]['name'] );
     2834
     2835                // Fall back on the component ID.
     2836                } elseif ( ! empty( $bp->{$component_id}->id ) ) {
     2837                        $component_name = ucwords( $bp->{$component_id}->id );
     2838                }
     2839
     2840                // Append action name if we're on a member component sub-page.
     2841                if ( ! empty( $bp->bp_options_nav[ $component_id ] ) && ! empty( $bp->canonical_stack['action'] ) ) {
     2842                        $component_subnav_name = wp_filter_object_list( $bp->bp_options_nav[ $component_id ], array( 'slug' => bp_current_action() ), 'and', 'name' );
     2843
     2844                        if ( ! empty( $component_subnav_name ) ) {
     2845                                $component_subnav_name = array_shift( $component_subnav_name );
     2846                        }
     2847                }
     2848
     2849                // If on the user profile's landing page, just use the fullname.
     2850                if ( bp_is_current_component( $bp->default_component ) && ( bp_get_requested_url() === bp_displayed_user_domain() ) ) {
     2851                        $bp_title_parts[] = $displayed_user_name;
     2852
     2853                // Use component name on member pages.
     2854                } else {
     2855                        $bp_title_parts = array_merge( $bp_title_parts, array_map( 'strip_tags', array(
     2856                                $displayed_user_name,
     2857                                $component_name,
     2858                        ) ) );
     2859
     2860                        // If we have a subnav name, add it separately for localization.
     2861                        if ( ! empty( $component_subnav_name ) ) {
     2862                                $bp_title_parts[] = strip_tags( $component_subnav_name );
     2863                        }
     2864                }
     2865
     2866        // A single group.
     2867        } elseif ( bp_is_active( 'groups' ) && ! empty( $bp->groups->current_group ) && ! empty( $bp->bp_options_nav[ $bp->groups->current_group->slug ] ) ) {
     2868                $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'] : '';
     2869                $bp_title_parts = array( $bp->bp_options_title, $subnav );
     2870
     2871        // A single item from a component other than groups.
     2872        } elseif ( bp_is_single_item() ) {
     2873                $bp_title_parts = array( $bp->bp_options_title, $bp->bp_options_nav[ bp_current_item() ][ bp_current_action() ]['name'] );
     2874
     2875        // An index or directory.
     2876        } elseif ( bp_is_directory() ) {
     2877                $current_component = bp_current_component();
     2878
     2879                // No current component (when does this happen?).
     2880                $bp_title_parts = array( _x( 'Directory', 'component directory title', 'buddypress' ) );
     2881
     2882                if ( ! empty( $current_component ) ) {
     2883                        $bp_title_parts = array( bp_get_directory_title( $current_component ) );
     2884                }
     2885
     2886        // Sign up page.
     2887        } elseif ( bp_is_register_page() ) {
     2888                $bp_title_parts = array( __( 'Create an Account', 'buddypress' ) );
     2889
     2890        // Activation page.
     2891        } elseif ( bp_is_activation_page() ) {
     2892                $bp_title_parts = array( __( 'Activate Your Account', 'buddypress' ) );
     2893
     2894        // Group creation page.
     2895        } elseif ( bp_is_group_create() ) {
     2896                $bp_title_parts = array( __( 'Create a Group', 'buddypress' ) );
     2897
     2898        // Blog creation page.
     2899        } elseif ( bp_is_create_blog() ) {
     2900                $bp_title_parts = array( __( 'Create a Site', 'buddypress' ) );
     2901        }
     2902
     2903        // Strip spans.
     2904        $bp_title_parts = array_map( '_bp_strip_spans_from_title', $bp_title_parts );
     2905
     2906        // Sep on right, so reverse the order.
     2907        if ( 'right' === $seplocation ) {
     2908                $bp_title_parts = array_reverse( $bp_title_parts );
     2909        }
     2910
     2911        /**
     2912         * Filter BuddyPress title parts before joining.
     2913         *
     2914         * @since 2.4.3
     2915         *
     2916         * @param  array $bp_title_parts Current BuddyPress title parts
     2917         * @return array
     2918         */
     2919        return (array) apply_filters( 'bp_get_title_parts', $bp_title_parts );
     2920}
     2921
     2922/**
    27852923 * Customize the body class, according to the currently displayed BP content.
    27862924 */
    27872925function bp_the_body_class() {