it-swarm.com.de

Ergebnismenge von $ wpdb-> get_results () paginieren

Gibt es eine einfache Möglichkeit, die Ergebnismenge aus $ wpdb-> get_results () zu paginieren?

Ich möchte eine paginierte Liste der Kommentare eines Benutzers auf der Seite author_archive erhalten. Einige Benutzer der Community haben mehr als 500 Kommentare. Daher ist Paginierung wichtig.

Gibt es eine eingebaute Möglichkeit, dies mit WordPress zu tun, oder muss ich es selbst erstellen?

[Aktualisiert, um Code hinzuzufügen]

<!-- Show comments -->
<?php 
$querystr = "
    SELECT comment_ID, comment_post_ID, post_title, LEFT(comment_content,100) as comment_content, comment_date_gmt
    FROM $wpdb->comments, $wpdb->posts
    WHERE user_id = $thisauthor->ID
    AND comment_post_id = ID
    AND comment_approved = 1
    ORDER BY comment_ID DESC
    LIMIT 100
 ";


$comments_array = $wpdb->get_results($querystr, OBJECT);

if ($comments_array): ?>
    <div id="author-comments-list">
        <h2>Recent Comments </h2>
        <ul>
            <? 
                $odd_even = "odd";
                foreach ($comments_array as $comment):
                    echo "<li class='$odd_even'><a href='". get_bloginfo('url') ."/?p=".$comment->comment_post_ID."/#comment-". $comment->comment_ID ."'>". $comment->post_title ."</a> : ".mysql2date('l jS F, Y, g:ia',$comment->comment_date_gmt);
                    echo "<div class='author-comments-content'>".$comment->comment_content."</li>";
                    $odd_even = ($odd_even == "odd" ? "even" : "odd");
               endforeach; ?>
        </ul>
    </div> 
<? endif; ?>
6
anu

Sie können die Funktion paginate_links () für jede Paginierung verwenden.

Für Ihren speziellen Fall:

$total = $wpdb->get_var("
    SELECT COUNT(comment_ID)
    FROM $wpdb->comments
    WHERE user_id = $thisauthor->ID
    AND comment_post_id = ID
    AND comment_approved = 1
");
$comments_per_page = 100;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;

echo paginate_links( array(
    'base' => add_query_arg( 'cpage', '%#%' ),
    'format' => '',
    'prev_text' => __('&laquo;'),
    'next_text' => __('&raquo;'),
    'total' => ceil($total / $comments_per_page),
    'current' => $page
));
6
sorich87

für diejenigen, die eine vollständige Antwort basierend auf der Frage und @ sorich87 Antwort suchen.

Ich dachte, ich sollte hier eine Lösung für Leute wie mich (WordPress-Anfänger) posten.

//use in your custom page or custom post template 
global $wpdb;
$per_page = 5;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
if ($page > 1) {
    $offset = $page * $per_page - $per_page;
} else {
    $offset = $page;
}
$the_post = "select id,post_title from $wpdb->posts where post_type in ('buy','rent') and post_status='publish' "
        . "order by id desc limit $per_page offset $offset";
$details = $wpdb->get_results($the_post, OBJECT);
//do foreach to display your post details.


//paste this, where you want to display the pagination
$total = $wpdb->get_var("SELECT count(id) from $wpdb->posts where post_type in ('buy','rent') and post_status='publish' order by id desc");
echo paginate_links(array(
    'base' => add_query_arg('cpage', '%#%'),
    'format' => '',
    'prev_text' => __('&laquo;'),
    'next_text' => __('&raquo;'),
    'total' => ceil($total / $per_page),
    'current' => $page
));

so habe ich es für meine WordPress-Website zum Laufen gebracht

1
Mohammed Sufian