Update (08/01/10): แก้ไขจาก query_posts('posts_per_page=5'); เป็น query_posts($query_string); เนื่องจากจะทำให้เราไม่สามารถใช้งาน pagination ของ Wordpress ได้
เชื่อว่าคนที่ทำเว็บด้วย Wordpress หลายๆ อาจจะเคยเจอโจทย์ที่ว่า ต้องทำหน้าแรกเป็นข่าว ในขณะที่ก็ต้องมีข้อมูลตัวหนึ่งอยู่บนส่วนบนสุดเหนือข่าวอยู่ตลอด เช่น ประกาศพิเศษ, วัตถุประสงค์ของเว็บ, ไฟล์วิดิโอ หรือข้อมูลแบบ static อื่นๆ ดังตัวอย่างรูปข้างต้น ซึ่งปกติเราคงใส่ข้อมูลพิเศษตัวนั้นลงไปในส่วนของโค้ดในธีมเลย แต่บางครั้งจะพบว่าลูกค้าต้องการเปลี่ยนแปลงในส่วนนี้ด้วยตัวเอง แม้ว่าอาจจะเปลี่ยนนานๆ ครั้ง ซึ่งแนวทางในการแก้ไขปัญหานี้มีทางเลือกคือ
- ทำ Sticky Post เพิ่มขึ้นมา ซึ่งในส่วน Sticky นี้จะอยู่ข้างบนสุดของ Post เสมอ
- แก้โค้ดธีมให้ Query ข้อมูล Post กับ Page ให้อยู่หน้าเดียวกัน
ซึ่งแนวทางการแก้ไขนี้ จะพบว่าแนวทางแรกจะมีปัญหาตรงที่ทั้ง Sticky Post และ Post ที่แสดงออกมาจะอยู่ในรูปแบบเดียวกันเสมอ เช่น มีชื่อผู้โพส มีเวลา หรือหมวดที่โพสอยู่เสมอ ซึ่งอาจจะไม่ตรงกับความต้องการกับลูกค้า จึงทำให้เราต้องทำในแนวทางที่สองแทนดังที่จะเสนอในวันนี้
หลักการในการทำให้เนื้อหาใน Post กับ Page แสดงอยู่หน้าเดียวกันคือ ใช้ฟังก์ชัน query_posts() ของ Wordpress ซึ่งเป็นฟังก์ชันในการ Query ข้อมูลได้ทั้ง Post และ Page รวมถึงสามารถใส่เงื่อนไขในรูปแบบต่างๆ ซึ่งเราจะนำเอาเงื่อนไขของฟังก์ชัน query_posts() มาทำการแสดงผล Page ก่อน แล้วจึงใช้ฟังก์ชัน query_posts() อีกรอบหนึ่งเพื่อแสดงผล Post ออกมาดังในรูปข้างต้น
สำหรับโค้ดตัวอย่างง่ายๆ ที่จะแสดง Page และ Post ในหน้าเดียวกันมีดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php // Query page id 12 query_posts('page_id=12'); ?> <?php if(have_posts()): the_post(); ?> <div id="page-content"> <?php the_content(); ?> </div> <?php endif; ?> <?php // Query latest posts query_posts($query_string); // Activate Read more... global $more; // Declare global $more (before the loop). $more = 0; ?> <?php if(have_posts()): the_post(); ?> <div id="post-content"> <?php the_content('Read more »'); ?> </div> <?php endif; ?> |
บรรทัดที่ 2: เป็นการดึงข้อมูล Page ID 12 ขึ้นมาตามเงื่อนไขที่กำหนดในฟังก์ชัน query_posts
บรรทัดที่ 6-10: เป็นการแสดงเนื้อหาใน Page ID 12 ออกมาตามฟังก์ชันที่เราเรียกในบรรทัดที่ 2
บรรทัดที่ 14: เป็นการดึงข้อมูล Post ล่าสุดจำนวน Post ที่เรากำหนดไว้ใน Settings > Reading
บรรทัดที่ 16-17: เป็นการกำหนดไม่ให้แสดงข้อมูลของ Post ทั้งหมดออกมา ให้แสดงเฉพาะ Teaser ก่อน Break เท่านั้น
บรรทัดที่ 20-24: เป็นการแสดงเนื้อหาใน Post ตามฟังก์ชันที่เราได้กำหนดในบรรทัดที่ 14
สุดท้ายนี้ ขอแนะนำให้ลองอ่านการใช้เงื่อนไขทั้งหมดของ query_posts() เพื่อให้เราสามารถปรับโค้ดการดึงข้อมูลให้ตรงกับความต้องการของเราให้มากที่สุดครับ


Comments
<?php
<?php // Query page id 12 query_posts('page_id=12'); ?>
ดึงได้เฉพาะ page_id หรือครับ ดึง page_name ได้ไหมครับ
แล้วจะแก้อย่างไร ให้มันโชว์
แล้วจะแก้อย่างไร ให้มันโชว์ page+post เฉพาะหน้าแรกหน้าเดียวครับ ต้องแก้ที่ไฟล์อะไรครับ ผมแก้ที่ไฟล์ index มันเลยไปหมดทุกหน้า เวลาเข้าหน้าไหน ก็โชว์ page+post หมด ทีนี้ใช้คำสั่ง getcwd() ใน index.php ไม่ว่าจะไปหน้าไหน ค่าที่ได้ออกมาเป็นค่าเดียวกันหมด ก็เลยไม่รู้จะดักยังไงครับ ขอคำชี้แนะด้วยครับ
Add new comment