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 » Hướng dẫn tạo mới widget trong wordpress

Hướng dẫn tạo mới widget trong wordpress

Thứ Bảy, 11/10/2014 by Hoàng Quách

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

Tạo widget trong wordpress

Bạn có thể viết trực tiếp vào theme hoặc tạo plugin đơn giản. WordPress admin sẽ sử dụng file functions.php của theme kích thoạt trong wordpress nên để cho đơn giản mình sẽ viết ngay vào file functions.php, bạn dán đoạn code sau vào file:

<?php
// Creating the widget 
class wpb_widget extends WP_Widget {

	function __construct() {
		parent::__construct(
		// Base ID of your widget
		'hw_formdangky', 

		// Widget name will appear in UI
		__('Form đăng ký', 'hoangweb'), 

		// Widget description
		array( 'description' => __( 'Hoangweb thiết kế web giá rẻ uy tín chất lượng', 'hoangweb' ), ) 
		);
	}

	// Creating widget front-end
	// This is where the action happens
	public function widget( $args, $instance ) {
		$title = apply_filters( 'widget_title', $instance['title'] );
		// before and after widget arguments are defined by themes
		echo $args['before_widget'];
		if ( ! empty( $title ) )
		echo $args['before_title'] . $title . $args['after_title'];

		// This is where you run the code and display the output
		$temp=get_template_directory().'/page-templates/dangky-html.php';
		if(file_exists($temp)) include($temp);
		echo $args['after_widget'];
	}
		
	// Widget Backend 
	public function form( $instance ) {
		if ( isset( $instance[ 'title' ] ) ) {
			$title = $instance[ 'title' ];
		}
		else {
			$title = __( 'New title', 'hoangweb' );
		}
		// Widget admin form
		?>
		<p>
		<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> 
		<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
		</p>
		<?php 
	}
	
	// Updating widget replacing old instances with new
	public function update( $new_instance, $old_instance ) {
		$instance = array();
		$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
		return $instance;
	}
} // Class wpb_widget ends here

// Register and load the widget
function wpb_load_widget() {
	register_widget( 'wpb_widget' );
}
add_action( 'widgets_init', 'wpb_load_widget' );
?>

Giải thích:
Hàm __construct của class sẽ dùng để thiết lập thông tin cho widget, như tên widget, tiêu đề và mô tả.

parent::__construct(
	// Base ID of your widget
	'hw_formdangky', 

	// Widget name will appear in UI
	__('Form đăng ký', 'hoangweb'), 

	// Widget description
	array( 'description' => __( 'Hoangweb thiết kế web giá rẻ uy tín chất lượng', 'hoangweb' ), ) 
);

Tham số đầu tiên là ID của widget, tên này có tiền tố ‘widget_’ xuất hiện trong class của widget khi xem trên web và cũng dùng để truy xuất độc lập dữ liệu của widget nữa nhé, xem thêm cách lấy dữ liệu widget đã đăng ký trên sidebar.

Widget bao gồm 2 phần: tham số cài đặt tại backend và nội dung hiển thị widget trên frontend.

Tiếp đến, nội dung của widget hiện thị trên web bạn trình bầy vào phương thức widget( $args, $instance ). Biến $args chứa tham số trong phần khai báo sidebar, bạn có thể đưa thêm các thuộc tính giá trị ngoài dữ liệu dùng để thiết lập giao diện cho widget như: before_widget, after_widget,..

register_sidebar( array(
		'name' => __( 'Main Sidebar', 'hoangweb' ),
		'id' => 'sidebar-1',
		'description' => __( 'Appears on posts and pages except the optional Front Page template, which has its own widgets', 'hoangweb' ),
		'before_widget' => '<div class="moduletable %2$s" id="%1$s">',
		'after_widget' => '</div></div>',
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3><div class="latestnewsenhanced_116 newslist">',
		'custom_var'=>'xx'
	) );

Còn biến $instances chứa nội dung cấu hình bạn đã thiết lập trong wordpress admin.
Tất nhiên, hàm quản lý tùy chọn cài đặt cho wiget chỉ sử dụng biến này. Hàm form cho phép người dùng thiết lập cài đặt vào widget và hoạt động trong admin.

public function form( $instance ) {
	if ( isset( $instance[ 'title' ] ) ) {
		$title = $instance[ 'title' ];
	}
	else {
		$title = __( 'New title', 'hoangweb' );
	}
	// Widget admin form
	?>
	<p>
	<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> 
	<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
	</p>
	<?php 
}

Lưu ý: Biến $instance chứa trường cài đặt bạn thiết lập trong hàm cập nhật thông tin widget dưới đây. Những field được người dùng thiết lập giá trị thì bạn sẽ lưu, và những trường còn lại bạn phải kiểm tra xem có tồn tại không chẳng hạn với hàm php isset. Nếu không muốn dùng hàm này, bằng cách bạn khai báo những thuộc tính cài đặt mặc định của widget.
Liệt kê vào options vào biến $default_options trong constructor.

<?php
// Creating the widget 
class wpb_widget extends WP_Widget {

	function __construct() {
		parent::__construct(
		...
		);
		$default_options=array('title'=>'val1','opt1'=>'val2','opt2'=>'val3',...);
	}

Và trong hàm hiển thị tùy chọn của widget, gộp những trường cài đặt không có giá trị bởi biến này.

// Widget Backend 
	public function form( $instance ) {
		$instance = wp_parse_args( (array) $instance, $this->defaults_options );
		...

Ok, Cuối cùng bạn phải lưu lại cài đặt widget bởi hàm update( $new_instance, $old_instance ).
Bạn có thể lấy giá trị cài đặt trước đó trước khi thay thế bằng giá trị mới bởi biến $old_instance.
Sửa lại giá trị cài đặt mới trước khi wordpress lưu vào cơ sở dữ liệu. Dữ liệu mới sẽ được lưu trong kết quả trả về của hàm.

// Updating widget replacing old instances with new
public function update( $new_instance, $old_instance ) {
	$instance = array();
	$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
	return $instance;
}

Đoạn code trên, mình lọc giới hạn fields, bạn cũng có thể lưu lại tất fields bằng cách gán $instance=$new_instance.

Như vậy, chúng ta đã xong phần thiết kế widget, để có thể sử dụng widget bạn cần đăng ký vào menu Apprearance->Widget. Đăng ký với hàm register_widget trong khi đang khởi tạo các widgets khác, bạn sử dụng hook widgets_init.

// Register and load the widget
function wpb_load_widget() {
	register_widget( 'wpb_widget' );
}
add_action( 'widgets_init', 'wpb_load_widget' );

Kết quả:
tao-widget
widget-settings
Chúc bạn thành công!

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

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

Chuyên mục: Wordpress Tìm kiếm: 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.