บทความนี้ได้รวบรวมโค้ดสำเร็จรูปที่ใช้บ่อยใน WordPress และช่วยแก้ปัญหาสำหรับหลาย ๆ คน ถึงแม้จะไม่มีความรู้เรื่องโค้ดก็สามารถนำไปใช้ได้ทันที เพียงแค่นำไปวางในไฟล์ functions.php
ของธีม อย่างไรก็ตาม อย่าลืมวิธีการใช้โค้ดอย่างปลอดภัย โดยการทดสอบใน local ก่อน หากนำไปใช้บน production แล้วเว็บไซต์มีปัญหา ถือว่าเตือนแล้วนะครับ
สารบัญ
ซ่อน Admin Bar
add_filter('show_admin_bar', '__return_false');
ซ่อน Admin bar เฉพาะคนที่ไม่ใช่ Admin
function hide_admin_bar_for_non_admins() { // ตรวจสอบว่าผู้ใช้ปัจจุบันไม่ใช่ผู้ดูแลระบบ และไม่ได้อยู่ในหน้าแอดมิน if (!current_user_can('administrator') && !is_admin()) { // ซ่อนแถบผู้ดูแลระบบ show_admin_bar(false); } } add_action('after_setup_theme', 'hide_admin_bar_for_non_admins');
เปลี่ยนโลโก้ที่หน้า Login page
function custom_login_logo() { ?> <style type="text/css"> #login h1 a { background-image: url('<?php echo get_stylesheet_directory_uri(); ?>/path/to/your/logo.png'); height: 80px; /* ปรับความสูงตามขนาดโลโก้ */ width: 320px; /* ปรับความกว้างตามขนาดโลโก้ */ background-size: contain; /* ปรับขนาดโลโก้ให้อยู่ในกรอบ */ background-repeat: no-repeat; padding-bottom: 30px; } </style> <?php } add_action('login_enqueue_scripts', 'custom_login_logo');
กำหนดความยาวของ Excerpt
// ฟังก์ชันกำหนดความยาวของ excerpt แบบนับตัวอักษรภาษาไทย function custom_excerpt_length_in_chars($text, $length = 100) { if (mb_strlen($text) > $length) { $text = mb_substr($text, 0, $length) . '...'; } return $text; } // ฟิลเตอร์สำหรับใช้ฟังก์ชันกำหนดความยาวของ excerpt แบบนับตัวอักษร function apply_custom_excerpt_length($excerpt) { return custom_excerpt_length_in_chars($excerpt, 100); // เปลี่ยนตัวเลข 100 เป็นจำนวนตัวอักษรที่ต้องการ } add_filter('the_excerpt', 'apply_custom_excerpt_length');
ตัดคำ Tag: Category: Archive: Author: นำหน้าออกในหน้า Taxonomy
// ฟังก์ชันเพื่อตัดคำนำหน้าพวก "Tag:", "Archive:", "Category:" ออกจากหัวเรื่อง function custom_archive_title($title) { if (is_category()) { $title = single_cat_title('', false); } elseif (is_tag()) { $title = single_tag_title('', false); } elseif (is_post_type_archive()) { $title = post_type_archive_title('', false); } elseif (is_tax()) { $title = single_term_title('', false); } return $title; } add_filter('get_the_archive_title', 'custom_archive_title');
ปิดการใช้งาน Gutenberg
add_filter('use_block_editor_for_post', '__return_false', 10);
ตั้งหน้าที่ต้องการ Redirect หลังจากทำการ Login
// เปลี่ยน URL ของโลโก้ในหน้าเข้าสู่ระบบ function custom_login_logo_url() { return home_url(); // เปลี่ยนเป็น URL ของเว็บไซต์คุณ } add_filter('login_headerurl', 'custom_login_logo_url');
ตั้งหน้าที่ต้องการ Redirect หลังจากทำการ Logout
function custom_logout_redirect() { return home_url(); } add_filter('logout_redirect', 'custom_logout_redirect');
เพิ่ม CSS ที่หลังบ้านแบบ inline
// เพิ่ม CSS แบบกำหนดเองในแผงควบคุม Admin function custom_admin_css() { echo '<style> /* Custom CSS ที่ต้องการ */ #wpadminbar { background-color: #23282d; } .wp-admin #wpwrap { background-color: #f1f1f1; } </style>'; } add_action('admin_head', 'custom_admin_css');
ปิดการใช้งาน REST API สำหรับผู้ใช้ที่ไม่ได้ล็อกอิน
add_filter('rest_authentication_errors', function($result) { if (!empty($result)) { return $result; } if (!is_user_logged_in()) { return new WP_Error('rest_not_logged_in', 'You are not currently logged in.', array('status' => 401)); } return $result; });
ปิดการใช้งาน Feed ทั้งหมด
function disable_feeds() { wp_die(__('No feed available, please visit our <a href="'. esc_url(home_url('/')) .'">homepage</a>!')); } add_action('do_feed', 'disable_feeds', 1); add_action('do_feed_rdf', 'disable_feeds', 1); add_action('do_feed_rss', 'disable_feeds', 1); add_action('do_feed_rss2', 'disable_feeds', 1); add_action('do_feed_atom', 'disable_feeds', 1); add_action('do_feed_rss2_comments', 'disable_feeds', 1); add_action('do_feed_atom_comments', 'disable_feeds', 1);
เพิ่มปุ่มกลับไปด้านบน
function add_back_to_top_button() { ?> <!-- Back to Top button element --> <a id="back-to-top" href="#" style="display: none; position: fixed; bottom: 20px; right: 20px; z-index: 100;">⇧</a> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', function() { // Function to show/hide the Back to Top button window.addEventListener('scroll', function() { if (window.scrollY > 100) { document.getElementById('back-to-top').style.display = 'block'; } else { document.getElementById('back-to-top').style.display = 'none'; } }); // Function to scroll to the top when the button is clicked document.getElementById('back-to-top').addEventListener('click', function(event) { event.preventDefault(); window.scrollTo({ top: 0, behavior: 'smooth' }); }); }); </script> <?php } add_action('wp_footer', 'add_back_to_top_button');
ปิดการใช้งาน Comment
บางธีมจำเป็นต้องลบไฟล์ในเทมเพลตด้วย
// ปิดการใช้งานฟังก์ชันความคิดเห็นสำหรับโพสต์ทั้งหมด function disable_comments_post_types_support() { $post_types = get_post_types(); foreach ($post_types as $post_type) { if (post_type_supports($post_type, 'comments')) { remove_post_type_support($post_type, 'comments'); remove_post_type_support($post_type, 'trackbacks'); } } } add_action('admin_init', 'disable_comments_post_types_support'); // ปิดการใช้งานเมนูความคิดเห็นในแผงควบคุม function disable_comments_admin_menu() { remove_menu_page('edit-comments.php'); } add_action('admin_menu', 'disable_comments_admin_menu'); // ปิดการใช้งาน Widget ความคิดเห็นในแผงควบคุม function disable_comments_dashboard() { remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal'); } add_action('admin_init', 'disable_comments_dashboard'); // ปิดการใช้งาน Meta Box ความคิดเห็นในหน้าโพสต์ function disable_comments_post_meta_box() { remove_meta_box('commentstatusdiv', 'post', 'normal'); remove_meta_box('commentsdiv', 'post', 'normal'); } add_action('admin_menu', 'disable_comments_post_meta_box'); // ปิดการใช้งานฟังก์ชันความคิดเห็นในหน้า function disable_comments_status() { return false; } add_filter('comments_open', 'disable_comments_status', 20, 2); add_filter('pings_open', 'disable_comments_status', 20, 2); // ซ่อนฟิลด์ความคิดเห็นในหน้า function disable_comments_hide_existing_comments($comments) { $comments = array(); return $comments; } add_filter('comments_array', 'disable_comments_hide_existing_comments', 10, 2); // ปิดการใช้งาน RSS Feed ของความคิดเห็น function disable_comments_feed() { wp_die(__('No feed available, please visit our <a href="'. esc_url(home_url('/')) .'">homepage</a>!')); } add_action('do_feed_rss2_comments', 'disable_comments_feed', 1); add_action('do_feed_atom_comments', 'disable_comments_feed', 1); // ลบฟังก์ชันความคิดเห็นออกจากแถบ Admin Bar function disable_comments_admin_bar() { if (is_admin_bar_showing()) { remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60); } } add_action('init', 'disable_comments_admin_bar');
ปิดการใช้งาน XML-RPC
add_filter('xmlrpc_enabled', '__return_false');
ปิดการใช้งาน Self Pingbacks
function disable_self_pingbacks(&$links) { foreach ($links as $l => $link) { if (0 === strpos($link, home_url())) { unset($links[$l]); } } } add_action('pre_ping', 'disable_self_pingbacks');
ติดตั้ง Google Analytic
function add_google_analytics() { ?> <script async src="https://www.googletagmanager.com/gtag/js?id=YOUR_TRACKING_ID"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'YOUR_TRACKING_ID'); </script> <?php } add_action('wp_head', 'add_google_analytics');
ปรับผลการค้นหาให้แสดงค่า Post, Page เท่านั้น
function custom_search_results($query) { if ($query->is_search && !is_admin()) { $query->set('post_type', array('post', 'page')); // จำกัดการค้นหาเฉพาะโพสต์และเพจ } return $query; } add_filter('pre_get_posts', 'custom_search_results');
จำกัดการเข้าถึงแผงควบคุมสำหรับผู้ใช้ที่ไม่ใช่ Admin
function restrict_admin_access() { if (!current_user_can('administrator') && !wp_doing_ajax()) { wp_redirect(home_url()); exit; } } add_action('admin_init', 'restrict_admin_access');
ลบเมนู Admin Bar บางรายการ โลโก้ WordPress, การอัพเดท, เพิ่มเนื้อหาใหม่
function remove_admin_bar_items() { global $wp_admin_bar; $wp_admin_bar->remove_node('wp-logo'); // ลบโลโก้ WordPress $wp_admin_bar->remove_node('updates'); // ลบการอัปเดต $wp_admin_bar->remove_node('new-content'); // ลบเมนูเนื้อหาใหม่ } add_action('wp_before_admin_bar_render', 'remove_admin_bar_items');
เพิ่มลิงก์ในแถบ Admin Bar ( ใช้เพื่อเป็นเมนูลัด )
function modify_admin_bar() { global $wp_admin_bar; $wp_admin_bar->add_menu(array( 'id' => 'custom_link', 'title' => __('Custom Link'), 'href' => 'http://www.example.com' )); } add_action('wp_before_admin_bar_render', 'modify_admin_bar');
ปิดการใช้งานอัพเดทอัตโนมัติ
add_filter('automatic_updater_disabled', '__return_true'); add_filter('auto_update_core', '__return_false'); add_filter('auto_update_plugin', '__return_false'); add_filter('auto_update_theme', '__return_false');
ตั้งค่า สื่อที่อัพโหลด ให้เห็นได้แค่ เฉพาะของตัวเองเท่านั้น โดยยกเว้นผู้ดูแลระบบ
// Restrict media library function restrict_media_library($wp_query_obj) { global $current_user, $pagenow; if (!is_a($current_user, 'WP_User')) return; if ('admin-ajax.php' != $pagenow || $_REQUEST['action'] != 'query-attachments') return; if (!current_user_can('manage_options')) $wp_query_obj->set('author', $current_user->ID); return; } add_action('pre_get_posts', 'restrict_media_library');
กำหนดขนาดไฟล์สูงในการอัพโหลด ไม่เกิน 1MB
function custom_upload_size_limit($size) { // ตรวจสอบว่าเป็นแอดมินหรือไม่ if (!current_user_can('administrator')) { // กำหนดขนาดไฟล์สูงสุดที่ต้องการในหน่วยไบต์ (เช่น 1MB) $size = 1 * 1024 * 1024; // 1MB } return $size; } add_filter('upload_size_limit', 'custom_upload_size_limit');
แนะนำการใช้ Plugin Code Snippets
ในกรณีที่ไม่สะดวกแก้ไฟล์ functions.php สามารถใช้ปลั๊กอิน Code Snippets ที่ช่วยนำโค้ดเหล่านี้ไปแปะได้เช่นกัน โดยสามารถทำตามได้ขั้นตอนนี้
- Add New
- ตั้งชื่อ Snippet
- ใส่โค้ดที่ต้องการในช่อง Code
- เลือกตำแหน่งที่ต้องการให้โค้ดรัน
- คลิกปุ่ม Save และ Activate
แก้ไขโค้ด functions.php ในธีม
ในกรณีที่ไม่ได้เขียนธีมเองให้ระวังการแก้ไฟล์ functions.php เพราะถ้าธีมมีการอัพเดทจะทำให้โค้ดที่เราแก้นั้นถูกทับได้ เพราะฉะนั้นถ้าอยากจะเพิ่มโค้ดให้ไปแก้ที่ Child theme ครับ
โค้ดทั้งหมดที่รวบรวมมาให้เป็นเพียงการปรับหรือแก้ไขบางจุดใน WordPress แต่ถ้าอยากเรียนรู้ให้ลึกขึ้น สามารถอ่านบทความ “เส้นทางสู่การเป็น WordPress Theme Developer มืออาชีพ” ได้เพิ่มเติม หรืออยากหาคนที่เชี่ยวชาญด้าน WordPress สามารถติดต่อเราได้ ที่นี่ ถ้าหากชอบบทความนี้รบกวนช่วยกดไลก์กดแชร์ให้เพจ do action ให้ด้วยนะครับ