2017-07-24 3 views
2

Ich möchte Posts eines Benutzers in einem benutzerdefinierten Tab im budypress-Profil von Mitgliedern anzeigen.Paginierung auf BuddyPress-Mitgliedsprofil

Problem: Die Seitennummerierung funktioniert nicht.

Was ich versuche: Hier ist der Code, den ich versuche:

Registerkarte erstellen: Die Funktion unten schafft eine Registerkarte auf die Mitglieder Profilseite. Es funktioniert gut.

function add_profile_tab() { 
    global $bp; 
    bp_core_new_nav_item(array( 
     'name'    => 'Blog', 
     'slug'    => 'blog', 
     'screen_function'  => 'yourtab_screen', 
     'position'   => 80, 
     'parent_url'   => bp_loggedin_user_domain() . '/blog/', 
     'parent_slug'   => $bp->profile->slug, 
     'default_subnav_slug' => 'blog' 
    )); 
} 

add_action('bp_setup_nav', 'add_profile_tab'); 

function yourtab_screen() { 
    add_action('bp_template_title', 'blog_content_title'); 
    add_action('bp_template_content', 'blog_content_main'); 
    bp_core_load_template('buddypress/members/single/plugins'); 
} 

function blog_content_title() { 
    echo 'Title'; 
} 

function blog_content_main() { 
    show_user_posts(); 
} 

angezeigte User Posts: Hier die show_user_posts() ist, der die Benutzer Beiträge zeigt:

function show_user_posts() { 
    $args = array(
     'author' => bp_displayed_user_id(), 
     'post_status' => 'publish', 
     'paged' => $paged 
    ); 

    $query = new WP_Query($args); 

    if ($query -> have_posts()) : 

     while ($query -> have_posts()) : $query -> the_post();  
      get_template_part('excerpt', 'content');          
     endwhile;     

     blog_pagination($query->max_num_pages, '', $paged); 
     wp_reset_postdata(); 
    endif; 
} 

Paginierung: Hier ist die Paginierung Funktion.

function blog_pagination($numpages = '', $pagerange = '', $paged = '') { 

    global $paged, $wp_query, $wp_rewrite; 

    if (empty($pagerange)) { 
     $pagerange = 2; 
    } 

    if (empty($paged)) { 
     $paged = 1; 
    } 

    if ($numpages == '') { 
     $numpages = $wp_query -> max_num_pages; 

     if (! $numpages) { 
      $numpages = 1; 
     } 
    } 

    $pagination_args = array (
     'base'   => get_pagenum_link(1) . '%_%', 
     'format'   => 'page/%#%', 
     'total'   => $numpages, 
     'current'   => $paged, 
     'show_all'  => False, 
     'end_size'  => 1, 
     'mid_size'  => $pagerange, 
     'prev_next'  => True,  
     'type'   => 'plain', 
     'add_args'  => false, 
     'add_fragment' => '' 
    ); 

    if ($wp_rewrite->using_permalinks()) 
     $pagination_args['base'] = user_trailingslashit(trailingslashit(remove_query_arg('s', get_pagenum_link(1))).'page/%#%/', 'paged'); 

    if (! empty($wp_query->query_vars['s'])) 
     $pagination_args['add_args'] = array('s' => get_query_var('s')); 

    $paginate_links = paginate_links($pagination_args); 

    if ($paginate_links) { 
     echo $paginate_links; 
    } 
} 

Was geschieht: Die obige Paginierung Funktion berechnet und erzeugt die Anzahl der Seiten korrekt, jedoch bekomme ich 404-Fehler auf allen Paginierung Links. Zum Beispiel auf dieser url: http://wp/members/admin/blog/page/2/

Was ich denke: Dieser von Rewrite-Regeln verursacht wird. Es kann behoben werden, indem eine Rewrite-Regel für die obige URL hinzugefügt wird. Im WordPress kann das mit add_rewrite_rule gemacht werden, aber ich kann die URL-Struktur für die Buddypress nicht herausfinden.

+0

Hallo dort. Könnten Sie bitte eine korrekte URL Ihrer Website angeben? Der von Ihnen angegebene ist falsch: [link] (http: // wp/members/admin/blog/page/2 /), Ihre Website-Domain fehlt – bkseen

Antwort

0

Verwenden DataTable wird es gibt Ihnen automatische Paginierung Funktion nur müssen Sie diese Funktion auf der Grundlage Ihrer Bedürfnisse zu steuern. Hier gebe ich Ihnen Link siehe https://datatables.net/examples/ajax/simple.html oder Für Wordpress können Sie auch Plugin als WP-Paginate genannt verwenden.

0

zurücksetzen Beiträge pro Seite von bestimmten Seite, Post, Taxonomie usw.

Hinweis: Dies wird mit Wordpress Standardeinstellung von 10 Beiträgen pro Seite in Konflikt geraten. Wenn Sie die Seitennummerierung testen, gehen Sie im Admin auf Einstellungen> Lesen. & Sie können den Beitrag pro Seite ändern, indem Sie die unten stehende Funktion für einen bestimmten Beitrag verwenden. ändern Sie einfach, wenn Bedingung.

hinzufügen unten Funktion in function.php Datei

$option_posts_per_page = get_option('posts_per_page'); 
add_action('init', 'my_modify_posts_per_page', 0); 
function my_modify_posts_per_page() { 
    add_filter('option_posts_per_page', 'my_option_posts_per_page'); 
} 
function my_option_posts_per_page($value) { 
    global $option_posts_per_page; 
    if (!is_admin() && bp_has_members() ) { 
     return 12; 
    } else { 
     return $option_posts_per_page; 
    } 
}