Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Wordpress » Thêm custom fields vào mọi wordpress widgets

Thêm custom fields vào mọi wordpress widgets

Chủ Nhật, 12/10/2014 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Khách hàng của chúng tôi thường xuyên hỏi làm sao để thêm options mới vào mọi widget có trong sidebar ví dụ như trường color, background,…Nếu bạn đã sử dụng qua plugin widget_logic thì không quá lạ lẫm wordpress cung cấp hook cho phép bạn tùy chỉnh options thêm custom fields mới vào mọi widget mà bạn đăng ký vào sidebar. Ứng dụng điển hình như, bạn có thể chỉ định hiển thị widgets cho từng trang trong website wordpress sử dụng plugin widget_logic.

Tạo custom fields cho widget

Trong bài hôm nay mình sẽ dậy các bạn tự thêm fields options vào widgets không cần sử dụng plugin.
extended_textwidget
Cũng giống quy trình thêm các fields vào post type, chúng ta cần 2 hook, chèn thêm fields vào hook hiển thị options của widget và hook lưu lại các options vừa mới tạo.

//Add input fields(priority 5, 3 parameters)
add_action('in_widget_form', 'hw_in_widget_form',5,3);
//Callback function for options update (priorität 5, 3 parameters)
add_filter('widget_update_callback', 'hw_in_widget_form_update',5,3);

Tạo option mới giống như cách bạn viết code widget có kế thừa class WP_Widget, truyền các biến của lớp định nghĩa widget sẽ sửa thêm vào hàm liên kết với hook in_widget_form sẽ giúp bạn tiếp tục xây dựng phần cài đặt fields widget.

function hw_in_widget_form($t,$return,$instance){
    $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'text' => '', 'float' => 'none') );
    if ( !isset($instance['float']) )
        $instance['float'] = null;
    if ( !isset($instance['texttest']) )
        $instance['texttest'] = null;
    ?>
    <p>
        <input id="<?php echo $t->get_field_id('width'); ?>" name="<?php echo $t->get_field_name('width'); ?>" type="checkbox" <?php checked(isset($instance['width']) ? $instance['width'] : 0); ?> />
        <label for="<?php echo $t->get_field_id('width'); ?>"><?php _e('halbe Breite'); ?></label>
    </p>
    <p>
        <label for="<?php echo $t->get_field_id('float'); ?>">Float:</label>
        <select id="<?php echo $t->get_field_id('float'); ?>" name="<?php echo $t->get_field_name('float'); ?>">
            <option <?php selected($instance['float'], 'none');?> value="none">none</option>
            <option <?php selected($instance['float'], 'left');?>value="left">left</option>
            <option <?php selected($instance['float'], 'right');?> value="right">right</option>
        </select>
    </p>
    <input type="text" name="<?php echo $t->get_field_name('texttest'); ?>" id="<?php echo $t->get_field_id('texttest'); ?>" value="<?php echo $instance['texttest'];?>" />
    <?php
    $retrun = null;
    return array($t,$return,$instance);
}

Tham số $t là đối tượng instance của lớp widget. Hàm cần trả về mảng thứ tự giá trị của 3 tham số truyền vào hàm đã sửa đổi bởi hàm, trong đó có biến $instance, khai báo cho option tạo mới.

Để lưu lại dữ liệu fields mở rộng wordpress gọi filter hook widget_update_callback trong phương thức update và cho bạn sử lý tiếp các giá trị option trước khi đóng gói cập nhật vào database .

function hw_in_widget_form_update($instance, $new_instance, $old_instance){
    $instance['width'] = isset($new_instance['width']);
    $instance['float'] = $new_instance['float'];
    $instance['texttest'] = strip_tags($new_instance['texttest']);
    return $instance;
}

Tùy biến widget với option ngoài

Bạn không được phép can thiệp trực tiếp vào nội dung của widget có tạo trước đó, mỗi widget tạo ra bởi wordpress hoặc plugin bạn cài vào website sẽ thực hiện một công việc nhất định, nhưng bạn có thể can thiệp giao diện bằng cách thay đổi các thuộc tính trước khi hiển thị widget, thậm trí dữ liệu của widget.
Xem thêm các ví dụ cụ thể tại bài viết: Tùy biến sidebar widget params thêm class chỉ số đếm cho widget.
Từ thông tin option mới, bạn có thể sửa lại thông số của sidebar như: before_widget, before_title…

add_filter('dynamic_sidebar_params', 'hw_dynamic_sidebar_params');
function hw_dynamic_sidebar_params($params){
    global $wp_registered_widgets;
    $widget_id = $params[0]['widget_id'];
    $widget_obj = $wp_registered_widgets[$widget_id];
    $widget_opt = get_option($widget_obj['callback'][0]->option_name);
    $widget_num = $widget_obj['params'][0]['number'];
    if (isset($widget_opt[$widget_num]['background'])){

             $float = $widget_opt[$widget_num]['background'];
            $params[0]['before_widget'] = preg_replace('/class="/', 'class="'.$float.' custom-field ',  $params[0]['before_widget'], 1);
    }
    return $params;
}

Kết quả giống như thế này.
extended_output
extended_textwidget

Để nhận được bài viết mới vui lòng đăng ký kênh kiến thức WordPress từ A-Z ở Form bên dưới. Bạn cũng có thể nhận được sự trợ giúp trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Wordpress Tìm kiếm: custom fields, wordpress widget

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.