Hướng dẫn tạo plugin popup đơn giản bằng lightbox và ACF (Dành cho Flatsome)

20 Nov, 2021 admin

Hôm nay mình sẽ hướng dẫn các bạn tạo 1 plugin đơn giản để có thể tạo popup bằng việc sử dụng lightbox và ACF nhé.

Cái này khá là đơn giản nhưng các bạn newbie sẽ mất kha khá thời gian để tìm hiểu. Nếu các bạn đang tìm hiểu thì hay đọc ngay bài này của mình để biết cách thức hoạt động của ACF và lightbox.

Demo các bạn có thể xem tại đây. https://pttuan410.com/demo/

Các công việc và các yêu cầu cần có:

  • Đầu tiên bạn phải đảm bảo theme của mình đã cài đặt plugin ACF (Advanced Custom Field).
  • Tạo 1 theme option sử dụng plugin ACF. Tham khảo bài viết Cách tạo theme option bằng ACF.
  • Tạo các field text, radio, và Relationship (Phần này các bạn có thể copy code của mình cũng được)
  • Code phần hiển thị và các điều kiện kèm theo.

Bắt tay vào việc thôi.

Tạo các field Text, radio và Relationship

Các bạn tạo các field theo hình dưới này là được nhé. Nhớ đặt tên giống mình để dễ follow bài viết này nhé.

Tạo các field như hình show nó ở trang theme option nhé.

Trong field Lựa chọn hiển thị sẽ gồm có:

Lựa chọn hiển thị

Tần suất hiển thị sẽ bao gồm

Tần suất hiển thị

Hoặc các bạn có thể copy đoạn code này bỏ vào file function nhé.

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
	'key' => 'group_608a1c13df3ac',
	'title' => 'Popup',
	'fields' => array(
		array(
			'key' => 'field_608a1d701f176',
			'label' => 'Nội dung hiển thị',
			'name' => 'nd',
			'type' => 'text',
			'instructions' => '',
			'required' => 0,
			'conditional_logic' => 0,
			'wrapper' => array(
				'width' => '',
				'class' => '',
				'id' => '',
			),
			'default_value' => '',
			'placeholder' => '',
			'prepend' => '',
			'append' => '',
			'maxlength' => '',
		),
		array(
			'key' => 'field_608a2224aa352',
			'label' => 'Lựa chọn hiển thị',
			'name' => 'lua_chon',
			'type' => 'radio',
			'instructions' => '',
			'required' => 0,
			'conditional_logic' => 0,
			'wrapper' => array(
				'width' => '',
				'class' => '',
				'id' => '',
			),
			'choices' => array(
				'All' => 'Tất cả',
				'chose' => 'Lựa chọn hiển thị',
				'loai' => 'Loại trừ hiển thị',
			),
			'allow_null' => 0,
			'other_choice' => 0,
			'default_value' => '',
			'layout' => 'horizontal',
			'return_format' => 'value',
			'save_other_choice' => 0,
		),
		array(
			'key' => 'field_608a1d8d1f177',
			'label' => 'Trang hiển thị',
			'name' => 'id_ht',
			'type' => 'relationship',
			'instructions' => '',
			'required' => 0,
			'conditional_logic' => array(
				array(
					array(
						'field' => 'field_608a2224aa352',
						'operator' => '!=',
						'value' => 'All',
					),
				),
			),
			'wrapper' => array(
				'width' => '',
				'class' => '',
				'id' => '',
			),
			'post_type' => '',
			'taxonomy' => '',
			'filters' => array(
				0 => 'search',
				1 => 'post_type',
				2 => 'taxonomy',
			),
			'elements' => '',
			'min' => '',
			'max' => '',
			'return_format' => 'object',
		),
		array(
			'key' => 'field_60bf27b9bb5bd',
			'label' => 'Time',
			'name' => 'time',
			'type' => 'number',
			'instructions' => '',
			'required' => 0,
			'conditional_logic' => 0,
			'wrapper' => array(
				'width' => '',
				'class' => '',
				'id' => '',
			),
			'default_value' => '',
			'placeholder' => '',
			'prepend' => '',
			'append' => '',
			'min' => '',
			'max' => '',
			'step' => '',
		),
		array(
			'key' => 'field_60bf27c5bb5be',
			'label' => 'tần suất hiển thị',
			'name' => 'ts',
			'type' => 'radio',
			'instructions' => '',
			'required' => 0,
			'conditional_logic' => 0,
			'wrapper' => array(
				'width' => '',
				'class' => '',
				'id' => '',
			),
			'choices' => array(
				'once' => 'Once',
				'always' => 'Always',
			),
			'allow_null' => 0,
			'other_choice' => 0,
			'default_value' => '',
			'layout' => 'horizontal',
			'return_format' => 'value',
			'save_other_choice' => 0,
		),
	),
	'location' => array(
		array(
			array(
				'param' => 'options_page',
				'operator' => '==',
				'value' => 'theme-general-settings',
			),
		),
	),
	'menu_order' => 0,
	'position' => 'normal',
	'style' => 'default',
	'label_placement' => 'top',
	'instruction_placement' => 'label',
	'hide_on_screen' => '',
	'active' => true,
	'description' => '',
));

endif;

Code phần hiển thị ra ngoài kèm các điều kiện

Để show được ra ngoài các bạn sử dụng các hàm get_the_filed() hoặc the_field() của ACF nhé. Các bạn phân tích đoạn code dưới đây để biết cách thức hoạt động.

function show_popup(){
	global $post;
	$noidung = get_field('nd','option');
	$chose = get_field('lua_chon','option');
	$id_posts = get_field('id_ht','option');
	$auto = get_field('ts','option');
	$time = get_field('time','option');
	$id_array = array();
	foreach( $id_posts as $id_post ): 
		$id_array[] = $id_post->ID;
	endforeach;
	if($chose == 'All'){
		$postarray = !empty($id_array);
	}
	if($chose == 'loai'){
		$postarray = !(in_array((int)$post->ID, $id_array));
	}
	if($chose == 'chose'){
		$postarray = in_array((int)$post->ID, $id_array);
	}
	if ($postarray){;
		 echo do_shortcode('[lightbox auto_open="true" auto_timer="'.$time.'" auto_show="'.$auto.'" id="pttuan-custom-popup" width="600px" padding="20px"]
		'.$noidung.'
		[/lightbox]');
	}
}
add_action('wp_footer','show_popup');

Như vậy là xong, chúc các bạn thành công nhé, có gì không rõ cứ ib hoặc đặt comment hỏi mình.

Donate ủng hộ tinh thần

Có bất kì câu hỏi nào thì hãy gửi về cho mình nhé, mình sẽ cố gắng giải đáp trong thời gian sớm nhất

Ủng hộ mình một ly cà phê nhé: Vì đầy là động lực để mình có thể giúp đỡ mọi người nhé.

Ủng hộ bằng momo:


0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments