วิธีดึง post ล่าสุดของ wordpress มาแสดงนอก blog
วิธีดึง post ล่าสุดของ wordpress มาแสดงนอก blog
Wordpress เป็น CMS ทักมักจะนิยมนำไปใช้ในการทำ blog สำหรับเขียนข่าวหรือบทความของเว็บไซต์ ซึ่งมักจะเป็นเนื้อหาที่แยกส่วนจากเว็บไซต์หลัก เว็บไซต์หน้าแรกอาจจะถูกพัฒนาขึ้นมาโดยไม่ใช้ CMS และแยกส่วนข่าวสาร ส่วนที่มีเนื้อหายาว ๆ ออกไปไว้ในส่วนของบล็อกและใช้ CMS อย่าง wordpress ในการจัดการข้อมูลแทน
ปัญหาคือ เมื่อเราแยกส่วนระหว่าง wordpress และเว็บไซต์หลักซึ่งถูกพัฒนาขึ้นมาจากระบบที่แตกต่างกัน ทำให้เราไม่สามารถใช้งานคำสั่งต่าง ๆ หรือถึงจะใช้ได้ก็อาจจะติดปัญหาบางอย่าง ทำให้ไม่สามารถแสดง post ล่าสุดของ wordpress ในหน้าเพจหลักที่แยกระบบกันได้ อีกวิธีหนึ่งที่เราจะสามารถโหลด post ล่าสุดของ wordpress มาแสดงได้ก็คือการ query ตรง ลองมาดูกันครับว่าจะสามารถเขียนคำสั่งได้อย่างไรบ้าง
โหลด post ล่าสุดมาแสดงนอก wordpress
หลักการทำก็ง่าย ๆ ครับคือเข้าถึงฐานข้อมูลของ wordpress โดยตรงเลย แต่โดยตรงปกติแล้วฐานข้อมูลของ wordpress ก็ค่อนข้างซับซ้อนพอสมควร เราสามารถใช้การ query เพียงครั้งเดียวและ loop เพื่อแสดง post ของ wordpress ได้เลยดังนี้
คำสั่งสำหรับเชื่อมต่อฐานข้อมูลของ wordpress
$hostname = "localhost"; $username = "db username"; $password = "db password"; $dbname = "db name"; mysql_connect($hostname, $username, $password) or die("Unble to connect Database"); mysql_query("SET NAMES UTF8"); @mysql_select_db("$dbname") or die("Unble to connect database");
จากนั้นก็ทำการ query ข้อมูลและ loop เพื่อแสดง post ตามจำนวนที่ต้องการ
$result = mysql_query('SELECT p1.*, wm2.meta_value FROM wp_posts p1 LEFT JOIN wp_postmeta wm1 ON ( wm1.post_id = p1.id AND wm1.meta_value IS NOT NULL AND wm1.meta_key = "_thumbnail_id" ) LEFT JOIN wp_postmeta wm2 ON (wm1.meta_value = wm2.post_id AND wm2.meta_key = "_wp_attached_file" AND wm2.meta_value IS NOT NULL) WHERE p1.post_status="publish" AND p1.post_type="post" ORDER BY p1.post_date DESC'); $i = 0; $max_post = 5; while ($i<$max_post){ $row = mysql_fetch_array($result); $post_date = $row['post_date']; $post_title = $row['post_title']; $post_thumbnail = $row['meta_value']; $link = $row['guid']; $post_content = $row['post_content']; $content = explode('<!--more-->',$post_content); $i++; }
อธิบายตัวแปรเพิ่มเติม
$max_post คือจำนวน post ที่ต้องการดึงมาแสดง
$post_date คือวันที่ของ post ที่ถูกสร้าง
$post_title คือหัวข้อของ post นั้น
$post_thumbnail คือรูปของ post หรือ featured image ให้ชี้ไปที่โฟลเด้อ uploads ของ wordpress
$link คือ url ที่จะพาไปหน้าเนื้อหาของ post
$content คือเนื้อหาแบบย่อที่เรากำหนดไว้ ที่คั่นด้วยแท็ก more
ถ้าต้องการเนื้อหาแบบเต็ม ก็ใช้ตัวแปร $post_content แทน