bp_core_get_directory_pages()

Get names and slugs for BuddyPress component directory pages.

Description

Return

(object) Page names, IDs, and slugs.

Source

File: bp-core/bp-core-functions.php

592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
function bp_core_get_directory_pages() {
    global $wpdb;
 
    // Look in cache first.
    $pages = wp_cache_get( 'directory_pages', 'bp_pages' );
 
    if ( false === $pages ) {
 
        // Set pages as standard class.
        $pages = new stdClass;
 
        // Get pages and IDs.
        $page_ids = bp_core_get_directory_page_ids();
        if ( !empty( $page_ids ) ) {
 
            // Always get page data from the root blog, except on multiblog mode, when it comes
            // from the current blog.
            $posts_table_name = bp_is_multiblog_mode() ? $wpdb->posts : $wpdb->get_blog_prefix( bp_get_root_blog_id() ) . 'posts';
            $page_ids_sql     = implode( ',', wp_parse_id_list( $page_ids ) );
            $page_names       = $wpdb->get_results( "SELECT ID, post_name, post_parent, post_title FROM {$posts_table_name} WHERE ID IN ({$page_ids_sql}) AND post_status = 'publish' " );
 
            foreach ( (array) $page_ids as $component_id => $page_id ) {
                foreach ( (array) $page_names as $page_name ) {
                    if ( $page_name->ID == $page_id ) {
                        if ( !isset( $pages->{$component_id} ) || !is_object( $pages->{$component_id} ) ) {
                            $pages->{$component_id} = new stdClass;
                        }
 
                        $pages->{$component_id}->name  = $page_name->post_name;
                        $pages->{$component_id}->id    = $page_name->ID;
                        $pages->{$component_id}->title = $page_name->post_title;
                        $slug[]                        = $page_name->post_name;
 
                        // Get the slug.
                        while ( $page_name->post_parent != 0 ) {
                            $parent                 = $wpdb->get_results( $wpdb->prepare( "SELECT post_name, post_parent FROM {$posts_table_name} WHERE ID = %d", $page_name->post_parent ) );
                            $slug[]                 = $parent[0]->post_name;
                            $page_name->post_parent = $parent[0]->post_parent;
                        }
 
                        $pages->{$component_id}->slug = implode( '/', array_reverse( (array) $slug ) );
                    }
 
                    unset( $slug );
                }
            }
        }
 
        wp_cache_set( 'directory_pages', $pages, 'bp_pages' );
    }
 
    /**
     * Filters the names and slugs for BuddyPress component directory pages.
     *
     * @since BuddyPress 1.5.0
     *
     * @param object $pages Object holding page names and slugs.
     */
    return apply_filters( 'bp_core_get_directory_pages', $pages );
}

Changelog

Changelog
Version Description
BuddyPress 1.5.0 Introduced.

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.