แสดงจำนวนโพสต์ที่แตกต่างกันต่อหน้าขึ้นอยู่กับบริบท (เช่นโฮมเพจการค้นหาการเก็บถาวร)


21

ในการตั้งค่าการอ่านมีสถานที่ตั้งจำนวนการโพสต์ที่แสดงที่มีผลต่อจำนวนการโพสต์ที่แสดงในบริบททั้งหมด ฉันต้องการแสดงจำนวนโพสต์ในหน้าแรกแทนและจำนวนโพสต์ต่าง ๆ ในหน้าเช่นที่เก็บถาวรผลการค้นหาและอื่น ๆ

อ่านการตั้งค่าบล็อกหน้าแสดงที่มากที่สุดต่อหน้า

ฉันรู้ว่าฉันสามารถทำได้โดยแก้ไขไฟล์ธีมและเปลี่ยนพารามิเตอร์การสืบค้นที่นั่น แต่ฉันต้องการเข้าถึงหน้าการตั้งค่าง่ายขึ้น นานมาแล้วฉันเจอปลั๊กอินที่ทำสิ่งนี้ แต่ฉันหามันไม่พบในตอนนี้

ไม่มีใครรู้ว่าปลั๊กอินทำเช่นนี้หรือแม้แต่ฟังก์ชั่นที่ฉันสามารถใส่ไว้ใน


คุณอาจนึกถึงปลั๊กอิน 'โพสต์ที่แตกต่างกันต่อหน้า' ของ @ chip-bennett: chipbennett.net/plugins/cbnet-different-posts-per-pageซึ่งทำสิ่งที่คุณต้องการในรูปแบบกราฟิก
Tom Auger

คำตอบ:


23

ฉันเชื่อว่าวิธีที่ดีที่สุดในการทำปลั๊กอินคือการเรียกใช้ฟังก์ชั่นตัวอย่างต่อไปนี้เมื่อpre_get_postsพบ hook action $wp_queryวัตถุใช้ได้หมายถึงแท็กตามเงื่อนไขของคุณมีอยู่ แต่ก่อน WordPress ได้รับการโพสต์ซึ่งหมายความว่าคุณกำลังจะเปลี่ยนแบบสอบถาม vars ก่อนที่จะมีการสอบถามครั้งแรกที่ถูกเรียกใช้แทนที่จะเพิ่มแบบสอบถามที่สองเช่นเมื่อ query_posts () ถูกนำมาใช้ในรูปแบบ ไฟล์.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');

ฉันใช้ฟังก์ชั่นนี้ในเว็บไซต์ของฉันเอง มันง่ายที่จะตัดและวางที่นี่เพื่อคุณ
kevtrout

0

คุณสามารถทำการวนซ้ำแบบกำหนดเองโดยใช้ query_posts และระบุจำนวนการโพสต์โดย is_home, is_archive ฯลฯ

เพียงคำสั่งง่ายๆถ้าพร้อมกับ query_posts


ใช่ฉันพูดถึงเรื่องนี้ในคำถามของฉัน ฉันกำลังมองหาวิธีที่จะทำดังนั้นฉันไม่ต้องแก้ไขไฟล์หลายธีมเพื่อเปลี่ยนการตั้งค่า ขอบคุณ
Doug

1
มันค่อนข้างเลวร้ายที่จะทำแบบนี้ WordPress ใช้งานแบบสอบถามอยู่แล้ว หากคุณใส่query_postsชุดรูปแบบของคุณคุณจะไม่สนใจข้อความค้นหาต้นฉบับและสร้างคำถามใหม่ที่ซ้ำซ้อน
Krzysiek Dróżdż

-1

เพื่อเพิ่มคำถามนี้ มีใครรู้วิธีกำหนด post_per_page สำหรับฟังก์ชั่นฟังก์ชั่นนี้ custom_posts_per_page ($ query) ถ้าเพิ่มหน้าใหม่ไปที่ index.php เช่นนี้:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>

-1

ฉันรู้ว่าฉันสามารถทำได้โดยแก้ไขไฟล์ธีมและเปลี่ยนพารามิเตอร์การสืบค้นที่นั่น แต่ฉันต้องการเข้าถึงหน้าการตั้งค่าง่ายขึ้น

ในความสนใจของความสมบูรณ์ฉันพบว่าquery_postsรวมกับการ$query_stringเรียงต่อกันทำงานได้ดี

ฉันวางรหัสนี้ในindex.php(ธีมของฉันไม่มี category.php) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

แน่นอนสิ่งที่เรากำลังทำอะไรที่นี่มีการปรับเปลี่ยนสตริงแบบสอบถามภายในของวงที่เอาชนะหมายเลขเริ่มต้นของข้อความต่อหน้า

ใช้งานได้ดีกับการจัดทำรายการโพสต์เล็ก ๆ ในหน้าแรกที่ฉันแสดงโพสต์แบบเต็มและรายการโพสต์ที่ใหญ่ขึ้นทุกที่ (หมวดหมู่ตามวันที่ ฯลฯ ) ที่ฉันแสดงเฉพาะบทสรุปของโพสต์

อย่างไรก็ตามโปรดทราบว่าไม่เหมือนกับคำตอบที่ยอมรับซึ่งจะเรียกใช้แบบสอบถามสองครั้งดังนั้นจึงไม่ใช่ทางออกที่ดี


เจฟฟ์ฉันกำลังมองหาที่รวมศูนย์เพื่อควบคุมจำนวนโพสต์ที่ส่งคืนในบริบทที่แตกต่างกัน คำตอบของคุณคือถ้าคุณใช้ index.php เพื่อจัดการบริบททั้งหมดซึ่งธีมส่วนใหญ่ไม่ได้ทำ นอกเหนือจากการเพิ่มการเรียกไปยังฐานข้อมูล (ซึ่งมีผลต่อประสิทธิภาพ) เทคนิคของคุณยังสามารถเปลี่ยนการตอบสนองต่อแท็กที่มีเงื่อนไข (เช่น is_home () หรือ is_front_page) ในรูปแบบที่ไม่คาดคิด สุดท้ายหากคุณต้องการเพิ่มลูปรองในหน้าคุณไม่ควรใช้ query_posts แต่ใช้ "new WP_Query" แทน (หรือ get_posts)
Doug

@doug นี่ไม่ใช่ลูปรอง แต่มันทับลูปหลัก - และใช่ธีมนี้ใช้ index.php เพื่อแสดงทุกอย่างมันเรียบง่ายพอสมควร ฉันรู้สึกว่านี่เป็นคำตอบที่เหมาะสมกว่า แต่ถ้าคุณต้องการฉันสามารถถามคำถามของตัวเองและตอบคำถามหากคำตอบนี้ทำให้คุณขุ่นเคือง
Jeff Atwood

อันที่จริงฉันอ่านย่อหน้าที่สองถึงครั้งสุดท้ายผิดและคิดว่ารายการ "ใหญ่กว่า" และ "เล็กกว่า" อยู่ในหน้าเดียวกันดังนั้นประโยคสุดท้ายของฉันด้านบนจึงไม่เกี่ยวข้อง และใช่มันถูกต้องตามกฎหมายอย่างสมบูรณ์แบบที่จะนำรหัสของคุณทั้งหมดใน index.php ถ้าคุณต้องการ และถ้าเป็นเช่นนั้นวิธีการของคุณเป็นวิธีที่ง่ายและรวดเร็วในการทำเช่นนี้ดังนั้นฉันจะลบ downvote ของฉันหลังจากการล็อค 20 ชั่วโมงสิ้นสุดลง ถึงกระนั้นการส่งแบบสอบถามใหม่แทนที่จะปรับเปลี่ยนแบบสอบถามเดิมเช่นเดียวกับในคำตอบของ kevtrout นั้นเป็นที่ต้องการน้อยกว่าด้วยเหตุผลที่กล่าวถึงแล้ว (โดยคุณ, ฉันและ WP Codex)
Doug
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.