Tổng hợp Functions hay dùng trong WordPress

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);

 

Về tôi

Minh Anh

Xin chia sẻ những phần việc nhỏ ở các dự án đã triển khai để tiện sử dụng lại ở những dự án khác, giúp rút ngắn thời gian hoàn thành sản phẩm, giảm chi phí cho đối tác và khách hàng.
0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận

Danh mục bài viết

Khám phá những nội dung mới nhất

0
Rất thích suy nghĩ của bạn, hãy bình luận.x