ในโลกออนไลน์มีวิธีการสื่อสารกันหลากหลายรูปแบบ หนึ่งในเครื่องมือที่มีการใช้งานก็คือการสร้างกระทู้ถามตอบครับ ซึ่งก็เหมาะมากกับองค์กรไม่ได้มีทีม Suport ตลอดเวลา หรือลักษณะการใช้งานที่เน้นแบ่งปันความรู้กันไป เช่น เว็บไซต์โรงเรียน เว็บแจกลิงค์ดาวน์โหลด
สำหรับการสร้างระบบฟอรั่ม หรือสร้างกระทู้ใน WordPress นั้น ที่นิยมกันก็คือการติดตั้งปลักอิน bbPress ครับ แต่ปลักอินนี้ก็มีข้อจำกัดเรื่องการใช้งานพวก Shortcode ต่างๆ มันจะไม่รองรับด้วย เวลาเราเขียน Shortcode มันก็จะแสดงโค้ดพวกนั้นมาด้วย ไม่ทำงานแบบที่หวังไว้
บทความนี้ผมจะพาไปลองเขียน Shortcode สำหรับ bbPress กันครับ พร้อมกับยกตัวอย่าง เป็นการซ่อนเนื้อหาสำหรับให้มองเห็นเฉพาะคนที่เป็นสมาชิกที่เข้าสู่ระบบแล้วเท่านั้น
อย่างแรก เรามาทำให้ bbPress รองรอง Shortcode กันก่อนครับ โดยให้เราเขียนคำสั่งนี้ลงในไฟล์ functions.php ของธีมที่เราใช้งานอยู่นะครับ
add_filter( 'bbp_get_forum_content', 'do_shortcode' ); add_filter( 'bbp_get_reply_content', 'do_shortcode' );
โดยโค้ดด้านบนก็เป็นการบอกให้ bbPress พร้อมจะใช้งาน Shortcode ที่เราจะเขียนแล้วนะ จากนั้นก็มาเริ่มต้นเขียน Shortcode ของเราเลยครับ ซึ่งในเคสนี้ผมจะยกตัวอย่างการสร้าง Shortcode ที่มีการเปิด Tag ปิด Tag ในตัว โดยเป็นการซ่อนเนื้อหา URL ออกจากคนทั่วไปที่ไม่ใช่สมาชิกเว็บไม่ให้เห็นเนื้อหานี้
เช่นเดิมครับ เราเขียนคำสั่ง PHP ลงในไฟล์ functions.php
function hide_shortcode( $attr, $content = null ) { if ( is_user_logged_in() ) { /* เช็คก่อนว่าผู้ใช้งานเป็นสมาชิกหรือไม่ ถ้าใช่แสดงเนื้อหาที่ซ่อนไว้ */ return '<a href="'. esc_url($content) . '" target="_blank">'.esc_url($content).'</a>'; } else { /*ถ้าไม่ใช่ ให้แสดงข้อความเตือน */ echo "<div class='notice'>กระทู้นี้มีเนื้อหาบางส่วนที่ดูได้เฉพาะสมาชิกเท่านั้น กรุณาสมัครสมาชิกหรือเข้าสู่ระบบเพื่อดูเนื้อหานี้</div>"; } } add_shortcode('hide', 'hide_shortcode');
ตรงบรรทัด add_shortcode ตรงคำว่า hide นั่นแหละครับ คือคำสั่ง shortcode ที่เราจะเอาไปใช้งาน คือ
[hide]https://www.buksohn.com[/hide]
ถ้าหากเราอยากใช้ชื่ออื่น เช่น อยากใช้ shortcode ว่า
[hideme]เนื้อหาที่จะซ่อน[/hideme]
ตรงบรรทัดนี้ก็แก้เป็นแบบนี้ครับ
add_shortcode('hideme', 'hide_shortcode');
และนี้ก็เป็นตัวอย่าง Output ครับผมในกรณีที่ User เป็นสมาชิก
ส่วน user ที่ไม่ได้เป็นสมาชิก ก็จะมีข้อความเตือนดังนี้ครับ (พวกสีพื้นหลัง ก็แก้ CSS ตามต้องกันนะครับ)