Bài viết tổng hợp những Function hay và được sử dụng nhiều trong WordPress, thay thế phần nào việc sử dụng thêm Plugin, giúp tối ưu tốc độ tải trang. . .
Kiểm tra định dạng số điện thoại 10 số Việt Nam
function check_wpcf7_tel( $result, $tel ) { $result = preg_match( '/^(0|\+84)(\s|\.)?((3[2-9])|(5[689])|(7[06-9])|(8[1-689])|(9[0-46-9]))(\d)(\s|\.)?(\d{3})(\s|\.)?(\d{3})$/', $tel ); return $result; } add_filter( 'wpcf7_is_tel', 'check_wpcf7_tel', 10, 2 );
Code phân trang cho bài viết
//Code phan trang function wiki_wp_corenavi($custom_query = null, $paged = null) { global $wp_query; if($custom_query) $main_query = $custom_query; else $main_query = $wp_query; $paged = ($paged) ? $paged : get_query_var('paged'); $big = 999999999; $total = isset($main_query->max_num_pages)?$main_query->max_num_pages:''; if($total > 1) echo '<div class="pagenavi">'; echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, $paged ), 'total' => $total, 'mid_size' => '10', // Số trang hiển thị khi có nhiều trang trước khi hiển thị ... 'prev_text' => __('<i class="icon-angle-left"></i>','wiki'), 'next_text' => __('<i class="icon-angle-right"></i>','wiki'), ) ); if($total > 1) echo '</div>'; }
Thêm Panel trong Dashboard
add_action( 'admin_footer', 'rv_custom_dashboard_widget' ); function rv_custom_dashboard_widget() { // Bail if not viewing the main dashboard page if ( get_current_screen()->base !== 'dashboard' ) { return; } ?> <div id="custom-id" style="display: none;border: 2px solid #52accc; padding: 0 20px"> <h2 style="margin-top:20px; text-transform:uppercase; color: #dd3333; margin-bottom:-10px">Về chúng tôi</h2> <h3>CÔNG TY TNHH TM & DỊCH VỤ FOREST JUMP VIỆT NAM</h3> <p style="color: #000"><strong>Địa chỉ: </strong>P3432 HH4B Linh Đàm - Hoàng Liệt - Hoàng Mai - Hà Nội</p> <p style="color: #000"><strong>Hotline: </strong><a style="text-decoration:none" href="tel:0888805078">0888 805 078</a></p> <p style="color: #000"><strong>Email: </strong><a style="text-decoration:none" href="mailto:lienhe@forestjump.com.vn">lienhe@forestjump.com.vn</a></p> <p style="color: #000"><strong>Website: </strong><a href="https://forestjump.com.vn" style="text-decoration:none">Forestjump.com.vn</a></p> </div> <script> jQuery(document).ready(function($) { $('#welcome-panel').after($('#custom-id').show()); }); </script> <?php }
Đổi font chữ từ pt sang px
function flatsome_editor_text_sizes($initArray){ $initArray['fontsize_formats'] = "9px 10px 12px 13px 14px 16px 17px 18px 19px 20px 21px 24px 28px 32px 36px"; return $initArray; };
Thêm Page Options trong quản trị
// Page Options if( function_exists('acf_add_options_page') ) { acf_add_options_page(array( 'page_title' => 'Cài đặt chung', // Title hiển thị khi truy cập vào Options page 'menu_title' => 'Cài đặt chung', // Tên menu hiển thị ở khu vực admin 'menu_slug' => 'cai-dat-chung', // Url hiển thị trên đường dẫn của options page 'capability' => 'edit_posts', 'redirect' => false )); }
Xóa thông báo kích hoạt Flatsome trong quản trị
add_action( 'init', 'hide_notice' ); function hide_notice() { remove_action( 'admin_notices', 'flatsome_maintenance_admin_notice' ); }
Xóa trường thông tin trong form đặt hàng
add_filter( 'woocommerce_billing_fields', 'wc_npr_filter_phone', 10, 1 ); function wc_npr_filter_phone( $address_fields ) { $address_fields['billing_phone']['required'] = true; $address_fields['billing_country']['required'] = false; $address_fields['billing_last_name']['required'] = false; $address_fields['billing_city']['required'] = false; $address_fields['billing_postcode']['required'] = false; $address_fields['billing_email']['required'] = false; $address_fields['billing_state']['required'] = false; $address_fields['billing_address_1']['required'] = true; $address_fields['billing_address_2']['required'] = false; return $address_fields; } //make shipping fields not required in checkout add_filter( 'woocommerce_shipping_fields', 'wc_npr_filter_shipping_fields', 10, 1 ); function wc_npr_filter_shipping_fields( $address_fields ) { $address_fields['shipping_first_name']['required'] = true; $address_fields['shipping_last_name']['required'] = false; $address_fields['shipping_phone']['required'] = true; $address_fields['shipping_address_1']['required'] = true; $address_fields['shipping_address_2']['required'] = false; $address_fields['shipping_city']['required'] = false; $address_fields['shipping_country']['required'] = false; $address_fields['shipping_postcode']['required'] = false; $address_fields['shipping_state']['required'] = false; return $address_fields; } add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); // Our hooked in function - $fields is passed via the filter! function custom_override_checkout_fields( $fields ) { unset($fields['billing']['billing_company']); //unset($fields['billing']['billing_address_1']); unset($fields['billing']['billing_last_name']); unset($fields['billing']['billing_address_2']); unset($fields['billing']['billing_country']); unset($fields['billing']['billing_city']); unset($fields['billing']['billing_state']); unset($fields['billing']['billing_postcode']); //unset($fields['billing']['billing_email']); unset($fields['shipping']['shipping_company']); //unset($fields['billing']['billing_address_1']); unset($fields['shipping']['shipping_last_name']); unset($fields['shipping']['shipping_address_2']); unset($fields['shipping']['shipping_country']); unset($fields['shipping']['shipping_city']); unset($fields['shipping']['shipping_state']); unset($fields['shipping']['shipping_postcode']); //unset($fields['shipping']['shipping_email']); return $fields; }
Tạo mã đơn Woocommer tùy chỉnh
//Custom Order Number add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' ); function change_woocommerce_order_number( $order_id ) { $prefix = 'BEAR'; $suffix = 'ONL'; $new_order_id = $prefix . $order_id . $suffix; return $new_order_id; }
Xóa thẻ H3 trong tiêu đề bình luận
add_filter( 'comment_form_defaults', 'custom_reply_title' ); function custom_reply_title( $defaults ){ $defaults['title_reply_before'] = '<span id="reply-title" class="h4 comment-reply-title">'; $defaults['title_reply_after'] = '</span>'; return $defaults; }
Tắt Gutenberg Editor & Gutenberg Widget
// Disables the block editor from managing widgets in the Gutenberg plugin. add_filter( 'gutenberg_use_widgets_block_editor', '__return_false', 100 ); // Disables the block editor from managing widgets. renamed from wp_use_widgets_block_editor add_filter( 'use_widgets_block_editor', '__return_false' );
Dịch ngôn ngữ
//Dịch ngôn ngữ function multi_change_translate_text( $translated ) { $text = array( 'Thêm vào giỏ hàng' => 'Đặt mua', 'Add to cart' => 'Đặt mua', 'Mô tả' => 'Thông tin sản phẩm', 'Lựa chọn các tùy chọn' => 'Xem thêm', 'Cảm ơn bạn. Đơn hàng của bạn đã được nhận.' => 'Cảm ơn bạn! Chúng tôi đã nhận được đơn hàng của bạn.', ); $translated = str_ireplace( array_keys( $text ), $text, $translated ); return $translated; } add_filter( 'gettext', 'multi_change_translate_text', 20 );
Thay khoảng giá bằng giá của biến thể
//Replace Price Range by Variation Price add_action( 'woocommerce_before_single_product', 'move_variations_single_price', 1 ); function move_variations_single_price(){ global $product, $post; if ( $product->is_type( 'variable' ) ) { add_action( 'woocommerce_single_product_summary', 'replace_variation_single_price', 10 ); } } function replace_variation_single_price() { ?> <style> .woocommerce-variation-price { display: none; } </style> <script> jQuery(document).ready(function($) { var priceselector = '.product p.price'; var originalprice = $(priceselector).html(); $( document ).on('show_variation', function() { $(priceselector).html($('.single_variation .woocommerce-variation-price').html()); }); $( document ).on('hide_variation', function() { $(priceselector).html(originalprice); }); }); </script> <?php } //Save For simple products add_action( 'woocommerce_single_product_summary', 'simple_product_saving_amount', 11 ); function simple_product_saving_amount() { global $product; if( $product->is_type('simple') && $product->is_on_sale() ) { $regular_price = (float) wc_get_price_to_display( $product, array('price' => $product->get_regular_price() ) ); $active_price = (float) wc_get_price_to_display( $product, array('price' => $product->get_sale_price() ) ); $saved_amount = $regular_price - $active_price; $percentage = round( $saved_amount / $regular_price * 100 ); echo '<p id="saving_rpice">'. __("Tiết kiệm") .': ' . wc_price($saved_amount) . ' ('.$percentage.'%)</p>'; } } //Save For product variations (on variable products) add_filter( 'woocommerce_available_variation', 'variable_product_saving_amount', 10, 3 ); function variable_product_saving_amount( $data, $product, $variation ) { if( $variation->is_on_sale() ) { $saved_amount = $data['display_regular_price'] - $data['display_price']; $percentage = round( $saved_amount / $data['display_regular_price'] * 100 ); $data['price_html'] .= '<p id="saving_rpice">'. __("Tiết kiệm") .': ' . wc_price($saved_amount) . ' ('.$percentage.'%)</p>'; } return $data; }
Thay 0đ bằng Liên hệ
// Thay 0đ bằng Liên hệ function wiki_wc_custom_get_price_html( $price, $product ) { if ( $product->get_price() == 0 ) { if ( $product->is_on_sale() && $product->get_regular_price() ) { $regular_price = wc_get_price_to_display( $product, array( 'qty' => 1, 'price' => $product->get_regular_price() ) ); $price = wc_format_price_range( $regular_price, __( 'Free!', 'woocommerce' ) ); } else { $price = '<span class="amount">' . __( 'Liên hệ', 'woocommerce' ) . '</span>'; } } return $price; } add_filter( 'woocommerce_get_price_html', 'wiki_wc_custom_get_price_html', 10, 2 );
Thêm Widget Area
register_sidebar( array( 'name' => 'Contact Menu', 'id' => 'contactmenu', 'description' => 'Widget for Contact Menu', 'before_widget' => '<div class="contact-menu">', 'after_widget' => '</div>', 'before_title' => '<span class="widget-title">', 'after_title' => '</span>', ) );
Xóa Menu iTem trong trang quản trị
// admin_init action works better than admin_menu in modern wordpress (at least v5+) add_action( 'admin_init', 'my_remove_menu_pages' ); function my_remove_menu_pages() { global $user_ID; if ( $user_ID != 1 ) { //your user id remove_menu_page('edit.php'); // Posts remove_menu_page('upload.php'); // Media remove_menu_page('link-manager.php'); // Links remove_menu_page('edit-comments.php'); // Comments remove_menu_page('edit.php?post_type=page'); // Pages remove_menu_page('plugins.php'); // Plugins remove_menu_page('themes.php'); // Appearance remove_menu_page('users.php'); // Users remove_menu_page('tools.php'); // Tools remove_menu_page('options-general.php'); // Settings } }
Ẩn thông báo trong trang quản trị
add_action('admin_head', 'bc_disable_notice'); function bc_disable_notice() { ?> <style> #message { display: none;} </style> <?php }
Tắt cập nhật tự động Theme và Plugin
Thêm vào functions.php
// Disable Auto Update Themes add_filter( 'auto_update_theme', '__return_false' ); // Disable Auto Update Plugins add_filter( 'auto_update_plugin', '__return_false' );
Tắt cài đặt Themes – Plugins
define('DISALLOW_FILE_MODS',true);
Tính thời gian đọc hết một bài viết
// Hàm tính số từ trong một chuỗi function countWords($text) { return str_word_count(strip_tags($text)); } // Hàm tính thời gian để đọc hết một bài viết function calculateReadingTime($content, $wordsPerMinute = 200) { $wordCount = countWords($content); $readingTime = ceil($wordCount / $wordsPerMinute); // Làm tròn lên để đảm bảo thời gian được hiển thị là một số nguyên return $readingTime; } // Hàm hiển thị thời gian đọc function displayReadingTime($content, $wordsPerMinute = 200) { $readingTime = calculateReadingTime($content, $wordsPerMinute); return "$readingTime phút đọc"; } // Đăng ký shortcode để hiển thị thời gian đọc add_shortcode('reading_time', 'display_reading_time_shortcode'); // Shortcode 23 phút đọc // Hàm thực thi shortcode function display_reading_time_shortcode($atts) { // Lấy nội dung của bài viết hiện tại global $post; $content = $post->post_content; // Tính thời gian đọc $readingTime = displayReadingTime($content); // Trả về kết quả để hiển thị return $readingTime; }
Tính thời gian đăng bài cách thời điểm đọc là bao lâu
// Thời gian đăng bài // Hàm tính thời gian từ một ngày đến ngày hiện tại function calculateElapsedTime($post_date) { $post_time = strtotime($post_date); $current_time = time(); $elapsed_time = $current_time - $post_time; // Chuyển đổi khoảng thời gian thành định dạng ngày/giờ/phút/... $elapsed_time_string = human_time_diff($post_time, $current_time); return $elapsed_time_string; } // Đăng ký shortcode để hiển thị thời gian đăng bài add_shortcode('post_age', 'display_post_age_shortcode'); // Shortcode 3 năm trước // Hàm thực thi shortcode function display_post_age_shortcode($atts) { // Lấy thời gian đăng bài của post hiện tại global $post; $post_date = $post->post_date; // Tính thời gian đã trôi qua từ thời gian đăng bài $elapsed_time = calculateElapsedTime($post_date); // Trả về kết quả để hiển thị return "$elapsed_time trước"; }
Hiển thị lượt xem bài viết
// Post View Count add_filter ('use_block_editor_for_post', '__return_false'); function getPostViews($postID, $is_single = true){ global $post; if(!$postID) $postID = $post->ID; $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if(!$is_single){ return '<span class="svl_show_count_only">'.$count.'</span>'; } $nonce = wp_create_nonce('flat_count_post'); if($count == "0"){ delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); return '<span class="svl_post_view_count" data-id="'.$postID.'" data-nonce="'.$nonce.'">0</span>'; } return '<span class="svl_post_view_count" data-id="'.$postID.'" data-nonce="'.$nonce.'">'.$count.'</span>'; } function setPostViews($postID) { $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count == "0" || empty($count) || !isset($count)){ add_post_meta($postID, $count_key, 1); update_post_meta($postID, $count_key, 1); }else{ $count++; update_post_meta($postID, $count_key, $count); } } add_action( 'wp_ajax_svl-ajax-counter', 'svl_ajax_callback' ); add_action( 'wp_ajax_nopriv_svl-ajax-counter', 'svl_ajax_callback' ); function svl_ajax_callback() { if ( !wp_verify_nonce( $_REQUEST['nonce'], "flat_count_post")) { exit(); } $count = 0; if ( isset( $_GET['p'] ) ) { global $post; $postID = intval($_GET['p']); $post = get_post( $postID ); if($post && !empty($post) && !is_wp_error($post)){ setPostViews($post->ID); $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); } } die($count.''); } add_action( 'wp_footer', 'svl_ajax_script', PHP_INT_MAX ); function svl_ajax_script() { if(!is_single()) return; ?> <script> (function($){ $(document).ready( function() { $('.svl_post_view_count').each( function( i ) { var $id = $(this).data('id'); var $nonce = $(this).data('nonce'); var t = this; $.get('<?php echo admin_url( 'admin-ajax.php' ); ?>?action=svl-ajax-counter&nonce='+$nonce+'&p='+$id, function( html ) { $(t).html( html ); }); }); }); })(jQuery); </script> <?php } add_filter('manage_posts_columns', 'posts_column_views'); add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2); function posts_column_views($defaults){ $defaults['post_views'] = __( '' , '' ); return $defaults; } function posts_custom_column_views($column_name, $id){ if( $column_name === 'post_views' ) { echo getPostViews( get_the_ID(), false); } } // Đếm lượt Comment // Đăng ký shortcode để hiển thị số lượng bình luận add_shortcode('post_comments', 'display_post_comments_shortcode'); // Shortcode 0 bình luận // Hàm thực thi shortcode function display_post_comments_shortcode($atts) { global $post; $comments_count = get_comments_number($post->ID); return "{$comments_count} bình luận"; }
Hiển thị danh sách danh mục bài viết
// Danh sách danh mục bài viết // Đăng ký shortcode để hiển thị danh mục của bài viết add_shortcode('post_categories', 'display_post_categories_shortcode'); // Hàm thực thi shortcode function display_post_categories_shortcode($atts) { $categories_list = get_the_category_list(' '); if ($categories_list) { return $categories_list; } else { return 'Bài viết này không thuộc danh mục nào.'; } } // Đăng ký shortcode để hiển thị các tags của bài viết add_shortcode('post_tags', 'display_post_tags_shortcode'); // Hàm thực thi shortcode function display_post_tags_shortcode($atts) { global $post; // Lấy danh sách các tags của bài viết $tags = get_the_tags($post->ID); // Nếu có tags, hiển thị chúng if ($tags) { $tag_links = array(); foreach ($tags as $tag) { $tag_links[] = '<a class="tagname" href="' . get_tag_link($tag->term_id) . '">' . $tag->name . '</a>'; } return '<div class="taglist">Tags: ' . implode(' ', $tag_links).'</div>'; } else { return ''; } }
Hiển thị số lượng sản phẩm đã bán
// Số lượng sản phẩm đã bán add_action( 'woocommerce_sold', 'wc_product_sold_count' ); function wc_product_sold_count() { global $product; $units_sold = get_post_meta( $product->get_id(), 'total_sales', true ); echo '<p class="da-ban">' . sprintf( __( '%s lượt mua', 'woocommerce' ), $units_sold ) . '</p>'; }
Hiển thị lượt đánh giá sao
// Hiển thị đánh giá sao remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_loop_rating', 5 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); add_action('woocommerce_starrated', 'wiki_com_get_star_rating' ); function wiki_com_get_star_rating() { global $woocommerce, $product; $average = $product->get_average_rating(); echo '<div class="star-rating"><span style="width:'.( ( $average / 5 ) * 100 ) . '%"><strong itemprop="ratingValue" class="rating">'.$average.'</strong> '.__( 'out of 5', 'woocommerce' ).'</span></div>'; }
Hiển thị số lượng sản phẩm còn lại
// Sản phẩm còn lại add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2); function custom_get_availability( $availability, $_product ) { //change text "In Stock' to 'SPECIAL ORDER' if($_product->is_in_stock()){ $availability['availability']='còn ' . $_product->get_stock_quantity().' '.__('sản phẩm','woocommerce'); } //change text "Out of Stock' to 'SOLD OUT' if(!$_product->is_in_stock()) { $availability['availability']=__('Hết hàng','woocommerce'); } return $availability; }
Thêm tùy chọn xuất hóa đơn VAT
// Thêm tùy chọn xuất hóa đơn VAT tại trang thanh toán add_action('woocommerce_before_order_notes', 'custom_checkout_field'); function custom_checkout_field($checkout) { echo '<div id="custom_checkout_field"><h3>' . __('Hóa đơn VAT') . '</h3>'; woocommerce_form_field('vat_invoice', array( 'type' => 'checkbox', 'class' => array('form-row-wide'), 'label' => __('Yêu cầu xuất hóa đơn VAT'), ), $checkout->get_value('vat_invoice')); echo '</div>'; } // Lưu giá trị của tùy chọn xuất hóa đơn VAT khi đơn hàng được đặt add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta'); function custom_checkout_field_update_order_meta($order_id) { if (isset($_POST['vat_invoice'])) { update_post_meta($order_id, 'VAT Invoice', esc_attr($_POST['vat_invoice'])); } } // Hiển thị tùy chọn xuất hóa đơn VAT trong trang quản trị đơn hàng add_action('woocommerce_admin_order_data_after_billing_address', 'custom_checkout_field_display_admin_order_meta', 10, 1); function custom_checkout_field_display_admin_order_meta($order) { $vat_invoice = get_post_meta($order->get_id(), 'VAT Invoice', true); if ($vat_invoice) { echo '<p><strong>' . __('VAT Invoice') . ':</strong> ' . __('Yes') . '</p>'; } } // Thêm mục thiết lập để đặt thuế suất VAT trong quản trị add_filter('woocommerce_get_sections_tax', 'add_vat_section'); function add_vat_section($sections) { $sections['vat'] = __('VAT Settings'); return $sections; } add_filter('woocommerce_get_settings_tax', 'add_vat_settings', 10, 2); function add_vat_settings($settings, $current_section) { if ($current_section == 'vat') { $settings_vat = array(); $settings_vat[] = array( 'name' => __('VAT Settings'), 'type' => 'title', 'id' => 'vat_settings' ); $settings_vat[] = array( 'name' => __('VAT Rate'), 'type' => 'number', 'id' => 'woocommerce_vat_rate', 'css' => 'min-width:300px;', 'desc' => __('Enter the VAT rate as a percentage.'), 'desc_tip' => true, ); $settings_vat[] = array( 'type' => 'sectionend', 'id' => 'vat_settings' ); return $settings_vat; } else { return $settings; } } // Tính và thêm VAT vào tổng giá trị đơn hàng nếu tùy chọn xuất hóa đơn VAT được chọn add_action('woocommerce_cart_calculate_fees', 'add_vat_fee'); function add_vat_fee($cart) { if (is_admin() && !defined('DOING_AJAX')) { return; } if (isset($_POST['post_data'])) { parse_str($_POST['post_data'], $post_data); } else { $post_data = array(); } if (isset($post_data['vat_invoice']) && $post_data['vat_invoice']) { $vat_rate = floatval(get_option('woocommerce_vat_rate')); if ($vat_rate > 0) { $cart_total = $cart->cart_contents_total; $vat = $cart_total * ($vat_rate / 100); $cart->add_fee(__('VAT'), $vat, true); } } } // Thêm VAT vào thông tin đơn hàng add_action('woocommerce_checkout_create_order', 'add_vat_to_order_meta', 20, 2); function add_vat_to_order_meta($order, $data) { if (isset($_POST['vat_invoice']) && $_POST['vat_invoice']) { $vat_rate = floatval(get_option('woocommerce_vat_rate')); if ($vat_rate > 0) { $cart_total = WC()->cart->cart_contents_total; $vat = $cart_total * ($vat_rate / 100); $order->update_meta_data('VAT', $vat); } } } // Xử lý AJAX để cập nhật giỏ hàng khi chọn xuất hóa đơn VAT add_action('wp_footer', 'add_vat_checkbox_script'); function add_vat_checkbox_script() { if (is_checkout()) { ?> <script type="text/javascript"> jQuery(function($) { $('form.checkout').on('change', 'input#vat_invoice', function() { $(document.body).trigger('update_checkout'); }); }); </script> <?php } } // Thêm trường ẩn để truyền giá trị VAT qua AJAX add_action('woocommerce_review_order_before_payment', 'add_vat_hidden_field'); function add_vat_hidden_field() { ?> <input type="hidden" name="vat_invoice" id="hidden_vat_invoice" value="0" /> <?php } // Cập nhật trường ẩn khi người dùng chọn hoặc bỏ chọn tùy chọn VAT add_action('wp_footer', 'update_hidden_vat_field_script'); function update_hidden_vat_field_script() { if (is_checkout()) { ?> <script type="text/javascript"> jQuery(function($) { $('form.checkout').on('change', 'input#vat_invoice', function() { if ($(this).is(':checked')) { $('#hidden_vat_invoice').val('1'); } else { $('#hidden_vat_invoice').val('0'); } }); }); </script> <?php } }
Báo lỗi khi không nhập trường thông tin ở form đặt hàng
// Check field function custom_checkout_field_validation_script() { if (is_checkout()) { ?> <script type="text/javascript"> jQuery(document).ready(function($) { // Hàm kiểm tra trường function validate_field(field) { // Xóa thông báo lỗi cũ field.next('.error-message').remove(); var field_name = field.attr('name'); // Kiểm tra các trường thông tin chung if (field.val() === '') { field.css('border', '1px solid red'); field.after('<span class="error-message" style="color: red; font-size: 12px;">Vui lòng nhập thông tin</span>'); return false; } else { field.css('border', ''); } // Kiểm tra điều kiện đặc biệt cho trường điện thoại if (field_name === 'billing_phone') { var phone_regex = /^0\d{9}$/; if (!phone_regex.test(field.val())) { field.css('border', '1px solid red'); field.after('<span class="error-message" style="color: red; font-size: 12px;">Số điện thoại không hợp lệ. Số điện thoại phải bắt đầu bằng số 0 và có 10 chữ số.</span>'); return false; } else { field.css('border', ''); } } // Kiểm tra điều kiện đặc biệt cho trường email if (field_name === 'billing_email') { var email_regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; if (!email_regex.test(field.val())) { field.css('border', '1px solid red'); field.after('<span class="error-message" style="color: red; font-size: 12px;">Địa chỉ email không hợp lệ.</span>'); return false; } else { field.css('border', ''); } } return true; } // Kiểm tra các trường khi người dùng rời khỏi trường đó $('input[name="billing_first_name"], input[name="billing_last_name"], input[name="billing_email"], input[name="billing_phone"]').on('blur', function() { validate_field($(this)); }); // Kiểm tra tất cả các trường khi người dùng nhấn nút "Đặt hàng" $('form.checkout').on('submit', function(event) { var valid = true; $('input[name="billing_first_name"], input[name="billing_last_name"], input[name="billing_email"], input[name="billing_phone"]').each(function() { if (!validate_field($(this))) { valid = false; } }); if (!valid) { event.preventDefault(); alert('Vui lòng điền đầy đủ các trường bắt buộc.'); } }); }); </script> <?php } } add_action('wp_footer', 'custom_checkout_field_validation_script');
Chỉ cho phép tìm kiếm với từ khóa có trong tiêu đề
function search_by_title_only( $search, $wp_query ) { // Kiểm tra nếu không phải là trang tìm kiếm thì không thực hiện thay đổi gì if ( !$wp_query->is_search ) { return $search; } // Kiểm tra nếu không phải tìm kiếm trong post type 'product' thì không thực hiện thay đổi gì if ( !is_post_type_archive('product') && !isset($wp_query->query_vars['s'])) { return $search; } global $wpdb; // Lấy từ khóa tìm kiếm $search_term = $wp_query->query_vars['s']; // Nếu từ khóa không rỗng, tạo câu truy vấn chỉ tìm kiếm theo tiêu đề sản phẩm if ( !empty( $search_term ) ) { $search = $wpdb->prepare(" AND {$wpdb->posts}.post_title LIKE '%%%s%%'", $wpdb->esc_like($search_term)); } return $search; } add_filter( 'posts_search', 'search_by_title_only', 10, 2 ); function remove_ttt_pnwc_modal_content() { if (!is_cart()) { // Kiểm tra nếu không phải là trang giỏ hàng ?> <style> .ttt-pnwc-modal, .woocommerce-message { display: none !important; } </style> <?php } } add_action('wp_head', 'remove_ttt_pnwc_modal_content');