เริ่มต้นเขียน Theme ของ WordPress ใช้เอง ตอนที่ 3

สวัสดีครับ  วันนี้ผมกลับมาเขียนเรื่องเกี่ยวกับการทำ Theme ของ WordPress ต่อ  หลังจากที่ดองเอาไว้เกือบสองปี (ครับ  ดองโพสต์นี้นั้นแหละ  ดองไว้เกือบสองปี) สำหรับใครที่มาไม่ทัน  สามารถย้อนกลับไปอ่านได้ตามลิงค์นี้

และสำหรับเนื้อหาในตอนที่ 3 ผมจะพาไปรู้จักกับฟังก์ชันหลักๆ ที่เราใช้กันใน The Loop กันครับ

อะไรคือฟังก์ชันใน The Loop?

ฟังก์ชันของ WordPress ตามความเข้าใจของผมคือจะมีอยู่ 2 ประเภท  คือ 1. กลุ่มที่ใช้ได้เฉพาะใน The Loop เท่านั้น  และ 2. กลุ่มที่สามารถใช้นอก The Loop ได้

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

  1. ไก่จิกเด็กตายบนปากโอ่ง
  2. เด็กเป็นซอมบี้ฟื้นมากัดไก่ตาย
  3. ไก่กลับชาติมาเกิดถือปืนไล่ยิงซอมบี้

เมื่อเราเข้าลูปครั้งแรก ฟังก์ชัน the_post()  จะเอาข้อมูลของ “ไก่จิกเด็กตายบนปากโอ่ง” มาให้แสดง  และพอวนกลับเข้าลูปครั้งที่สอง  ฟังก์ชัน the_post()  ก็จะเอาข้อมูลของ “เด็กเป็นซอมบี้ฟื้นมากัดไก่ตาย”  ขึ้นมาให้แสดง  และพอวนกลับเข้าลูปครั้งที่สาม  ฟังก์ชัน the_post()  ก็จะเอาข้อมูลของ “ไก่กลับชาติมาเกิดถือปืนไล่ยิงซอมบี้” ขึ้นมาให้แสดงนั่นเองครับ

รู้จักกับฟังก์ชันลูปที่ใช้บ่อย

อย่างแรก  ผมอยากให้เราลองดูโค๊ดนี้กันก่อน

<?php  while (have_posts() ) : the_post(); ?>
		<div class="post-container" id="post-<?php the_ID(); ?>">
			<div class="post-header">
				<h1 class="post-title"><?php the_title(); ?></h1>
				<div class="post-meta">
					Posted: <?php the_time("l, j F Y @ G:i"); ?>, <a href="<?php comments_link(); ?>"><?php comments_number("no comment", "1 comment", "% comments");?></a>, [<a href="<?php the_permalink();?>">Permalink</a>]
				</div>
			</div>
			<div class="post-content">
				<?php the_content(); ?>
			</div>
			<div class="post-index">
				Categories: <?php the_category(", "); ?><br/>
				Tags: <?php the_tags(); ?>
			</div>
		</div>
<?php endwhile; ?>

ฟังก์ชันที่เราใช้กันภายใน Loop นั้น  มักจะเป็นฟังก์ชันที่ขึ้นต้นด้วย the ทั้งหลายครับ เช่น the_title();  หรือ the_permalink();  ซึ่งฟังก์ชันพวกนี้จะ echo ข้อมูลออกมาให้เราเลย  หรือถ้าหากต้องการดึงข้อมูลมาเก็บลงตัวแปร  ฟังก์ชันพวกนี้ก็มักจะมีฟังชันสำหรับดึงข้อมูลออกมาเหมือนกัน  โดยมักจะเป็นเติม get_ นำหน้า  เช่น get_the_content();  สำหรับดึง the_content();  หรือ get_permalink();  เพื่อใช้ดึง the_permalink();  มาไว้ในตัวแปร

ต่อไปนี้จะเป็นฟังก์รายการฟังก์ชันหลักๆ ที่เราใช้บ่อยๆ ใน Loop นะครับ  ซึ่ง “จำเป็น” จะต้องวางฟังก์ชันเหล่านี้เอาไว้ใน Loop ไม่อย่างนั้นมันจะไม่สามารถดึงข้อมูลออกมาได้ถูกต้องครับ  และบางฟังก์ชันจะอนุญาตให้เราใส่พารามิเตอร์เพิ่มเติมได้ด้วย  ซึ่งสามารถกดเข้าไปอ่านจากลิงค์ที่ทำไว้ได้เลยครับ

  • the_title(); สำหรับแสดงผลหัวข้อของโพสต์นั้นๆ
  • the_content(); สำหรับแสดงเนื้อหาของโพสต์นั้นๆ
  • the_time(); สำหรับใช้แสดงวันที่และเวลาของโพสต์นั้นๆ  จริงๆ มันมีฟังก์ชัน the_date(); อยู่อีกอันนึงครับ แต่ว่าถ้าเราใช้ the_date();  ถ้าโพสต์มันมีวันทีซ้ำกัน  มันจะแสดงวันที่ที่โพสต์แรกโพสต์เดียว  ดังนั้นถ้าจะให้แสดงวันที่ทุกโพสต์  ควรใช้ the_time();  มากกว่าครับ
  • the_author_link(); แสดงชื่อผู้เขียนโพสต์นั้นๆ (Publicly display name ที่ตั้งเอาไว้) พร้อมทั้งทำเป็นลิงค์ไปยังหน้าของผู้เขียนคนนั้นครับ (อาจจะเป็นหน้าข้อมูลส่วนตัว หรือหน้ารวมโพสต์ ตามแต่ธีมที่ทำเอาไว้)  ในกรณีที่เราต้องการแค่ชื่อผู้เขียนอย่างเดียวโดยที่ไม่มีลิงค์  เราสามารถใช้ the_author();  เฉยๆ ก็ได้เช่นกัน  และยังมีฟังก์ชันสำหรับดึงข้อมูลส่วนตัวต่างๆ ของผู้เขียนออกมาแสดงได้อีกด้วย ผ่านฟังก์ชัน the_author_meta(); ครับ
  • the_category(); สำหรับแสดง category ทั้งหมดที่ตั้งไว้ของโพสต์นั้นๆ
  • the_tags(); สำหรับแสดง tag ทั้งหมดที่ตั้งไว้ของโพสต์นั้นๆ

ลิสต์ด้านบนนี้จะเป็นฟังก์ชันสำหรับแสดงข้อมูลหลักๆ ของโพสต์ ครับ  จริงๆ ยังมีฟังก์ชันอื่นๆ มีมากที่จะมีโอกาสได้ใช้ในขั้นสูง (เช่น get_post_meta();  สำหรับดึงค่าใน custom fields) ซึ่งจะพูดถึงในโพสต์ต่อๆ ไปครับ

และนอกจากฟังก์ชันด้านบนนี้  ยังมีฟังก์ชันบางตัวที่อาจจะได้ใช้เช่นกันครับ  ดังนี้

  • the_ID(); สำหรับแสดง ID ของโพสต์นั้นๆ โดยปกติแล้วผมจะเอาไปใส่ไว้ใน wrapper ของโพสต์ครับ  เผื่อว่าไว้เขียน css เฉพาะสำหรับโพสต์หรือเพจนี้
  • comments_link(); เป็นฟังก์ชันที่ไว้แสดงลิงค์ไปยังส่วนคอมเมนต์ครับ  โดยปกติแล้วจะเป็น permalink ธรรมดา  แล้วตามด้วย #respond สำหรับโดดไปยังฟอร์มตอบคอมเมนต์ (ในกรณีที่โพสต์นั้นไม่มีคอมเมนต์อยู่) หรือตามด้วย #comments เพื่อโดดไปยังรายการคอมเมนต์ทั้งหมด (ในกรณีที่โพสต์นั้นมีคอมเมนต์อยู่)
  • comments_number(); เป็นฟังก์ชันสำหรับแสดงจำนวนคอมเมนต์ของโพสต์หรือเพจนั้นครับๆ ฟังก์ชันนี้จะรับพารามิเตอร์ 3 ตัว  เนื่องจากว่าในภาษาอังกฤษ  พหูพจน์มันจะเติม s ด้วยนั่นเองครับ  ซึ่งพารามิเตอร์ที่ว่านี้คือ
  1. ข้อความเมื่อไม่มีคอมเมนต์
  2. ข้อความเมื่อมีคอมเมนต์เดียว
  3. ข้อความเมื่อมีหลายคอมเมนต์
  • next_post_link(); สำหรับแสดงลิงค์ไปยังโพสต์ที่เรา publish ต่อจากโพสต์ปัจจุบัน
  • previous_post_link(); สำหรับแสดงลิงค์ไปยังโพสต์ที่เรา publish ก่อนหน้าโพสต์ปัจจุบัน

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

  • next_posts_link(); สำหรับแสดงลิงค์ไปยังโพสต์หน้าถัดไป (สังเกตุนะครับ  ว่าอันนี้จะเป็น posts เติม s ส่วนอันข้างบนจะไม่เติม)
  • previous_posts_link(); สำหรับแสดงลิงค์ไปยังโพสต์หน้าก่อนหน้านี้  ถ้าอยู่หน้าแรก  มันจะไม่แสดงครับ (posts เติม s นะครับ)
  • posts_nav_link(); สำหรับแสดงลิงค์ไปยังหน้าก่อนหน้า และหน้าถัดไป ในฟังก์ชันเดียว

สำหรับฟังก์ชันหลักๆ ที่เอาไว้สำหรับสร้างธีมบล็อกพื้นฐานขึ้นมาสักธีมหนึ่ง  ก็จะมีคร่าวๆ ดังที่กล่าวไปครับ

สำหรับในตอนต่อไป  จะพาไปดูอีกส่วนสำคัญส่วนหนึ่งของบล็อก  นั่นคือส่วนของคอมเมนต์และฟอร์มตอบคอมเมนต์ครับ

บทความทั้งหมดในชุดนี้

  1. เริ่มต้นเขียน Theme ของ WordPress ใช้เอง ตอนที่ 1 – โครงสร้างไฟล์พื้นฐานของธีม
  2. เริ่มต้นเขียน Theme ของ WordPress ใช้เอง ตอนที่ 2 – รู้จักกับ The Loop
  3. เริ่มต้นเขียน Theme ของ WordPress ใช้เอง ตอนที่ 3 – ฟังก์ชันในลูปที่ใช่บ่อย

Posted by Jirayu

WordPress Developer ที่พอมีประสบการณ์อยู่บ้าง วันไหนไม่ทำงานอยู่บ้านว่างๆ ก็นั่งเลี้ยงแมว

Comments