WP_Query หลายลูปพร้อมการแบ่งหน้า


10

มีคำถามอื่นอีกสองสามข้อเกี่ยวกับเรื่องนี้ (และการแบ่งหน้า WP_Query ดูเหมือนจะเป็นคำถามที่ยิ่งใหญ่สำหรับผู้คนจำนวนมาก) ดังนั้นฉันจึงพยายาม จำกัด ให้แคบลงอย่างชัดเจนถึงวิธีการใช้งาน

ฉันสามารถสร้างลูปที่กำหนดเองเดียวด้วยการแบ่งหน้ารหัสนี้:

// http://weblogtoolscollection.com/archives/2008/04/19/paging-and-custom-wordpress-loops/
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$args = array(
    'showposts' => 2,
    'paged' => $paged
);
$wp_query->query($args);
while ($wp_query->have_posts()) : $wp_query->the_post();

// The Post
the_title();
echo '<br>';
the_category(' ');
the_excerpt();
echo '<hr>';

endwhile;
// http://codex.wordpress.org/Function_Reference/paginate_links#Examples
$big = 999999999;
$pag_args = array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
);
echo paginate_links($pag_args);
$wp_query = null;
$wp_query = $temp;

... แต่โดยธรรมชาติถ้าฉันคัดลอก / วางลูปนี้มันจะทำหน้าที่เหมือนโคลนที่แน่นอนซึ่งหมายความว่าเมื่อคุณคลิกที่ "หน้า 2" มันจะพาคุณไปยังหน้า 2 เพื่อวนลูป

มีวิธีที่จะแยกสิ่งเหล่านี้ออกจากกันหรือไม่ดังนั้นแต่ละหน้าแยกกันหรือไม่?

นี่คือรหัสเต็มรูปแบบพร้อมลูปที่ซ้ำกันหากใครสนใจตั้งค่าเวอร์ชั่นในท้องถิ่นของตัวเองและเล่นกับมัน: http://paste.pocoo.org/show/573108/


ดูโพสต์นี้ซึ่งฉันได้แก้ไขปัญหาการแบ่งเลขหลายวงสำหรับตัวเองwordpress.stackexchange.com/questions/126814/ …
ewroman

คำตอบ:


18

ใช่มันสามารถทำได้ กุญแจสำคัญคือการทำให้formatพารามิเตอร์ที่แตกต่างกันสำหรับทั้งสองแบบสอบถาม:

    <!-- Cats -->
    <div class="animals">
        <?
            $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
            $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;

            // Custom Loop with Pagination 1
            // http://codex.wordpress.org/Class_Reference/WP_Query#Usage
            $args1 = array(
                'paged'          => $paged1,
                'posts_per_page' => 2,
            );
            $query1 = new WP_Query( $args1 );

            while ( $query1->have_posts() ) : $query1->the_post();
                the_title();
                echo '<br>';
                the_category(' ');
                the_excerpt();
                echo '<hr>';
            endwhile;

            // http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters
            $pag_args1 = array(
                'format'  => '?paged1=%#%',
                'current' => $paged1,
                'total'   => $query1->max_num_pages,
                'add_args' => array( 'paged2' => $paged2 )
            );
            echo paginate_links( $pag_args1 );
        ?>
    </div>

    <!-- Dogs -->
    <div class="animals">
        <?
            // Custom Loop with Pagination 2
            $args2 = array(
                'paged'          => $paged2,
                'posts_per_page' => 2,
            );
            $query2 = new WP_Query( $args2 );

            while ( $query2->have_posts() ) : $query2->the_post();
                the_title();
                echo '<br>';
                the_category(' ');
                the_excerpt();
                echo '<hr>';
            endwhile;

            $pag_args2 = array(
                'format'  => '?paged2=%#%',
                'current' => $paged2,
                'total'   => $query2->max_num_pages,
                'add_args' => array( 'paged1' => $paged1 )
            );
            echo paginate_links( $pag_args2 );
        ?>
    </div>

ขอบคุณมากสำหรับการตอบกลับ Boone ฉันเห็นสิ่งที่คุณกำลังพูด แต่เมื่อใดก็ตามที่ฉันพยายามเปลี่ยน get_query_var มันจะเกิดข้อผิดพลาด นี่คือรหัสที่อัปเดตแล้ว: paste.pocoo.org/show/573208 ข้อผิดพลาด: การเรียกไปยังฟังก์ชั่นสมาชิก get () บนวัตถุที่ไม่ใช่ใน C: \ wamp \ www \ wordpress_wp_query_pagination \ wp- รวม \ query.php ที่บรรทัด 27
คอรี

สองสิ่ง: 1) คุณกำลังทำสิ่งแปลก ๆ กับ$wp_queryโลก (2) มีบางแปลกประหลาดในการดำเนินงานที่เป็นWP_Queryตัวเองที่ทำให้มันเป็นไปไม่ได้ที่จะใช้get_query_var()และบางฟังก์ชั่นอื่น ๆ ที่มีมันดังนั้นฉันมักอ้างอิง$_GETsuperglobal โดยตรงเพื่อให้แน่ใจว่า sanitize intโดยการหล่อไป ฉันได้อัปเดตคำตอบของฉันด้วยตัวอย่างการทำงานที่สมบูรณ์
Boone Gorges

นก็น่ากลัว! ขอบคุณมากใช้งานได้ดี เวลาเรียนให้ละเอียด สิ่งแปลกประหลาด WP_Query มาจากบทความปี 2551 นี้: weblogtoolscollection.com/archives/2008/04/19/ … ฉันคิดว่าบางที get_query_var กำลังดึง var เดียวกัน แต่ไม่มีสมองที่จะรับมันโดยตรงด้วย $ _GET อีกครั้งขอบคุณชายมาก รับการต่อสู้กับสิ่งนี้ตลอดไป
คอรี

เย็น. โชคดี!
Boone Gorges

อึ สนใจที่จะต่อสู้กับฉันต่อไปหรือไม่? :) หลังจากทดสอบเวอร์ชันของคุณฉันสังเกตว่ามันไม่ได้กลับไปที่หน้า 1 มันติดอยู่ที่หน้า 2 นอกจากนี้เมื่อคุณคลิกที่หน้าอื่นมันจะรีเซ็ตลูปอื่น เป็นไปได้หรือไม่ที่จะรวมตัวแปร $ _GET เข้าด้วยกันดังนั้นจึงจำได้ว่าfoo.com/?paged_1=2&paged_2=3 ?
คอรี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.