Sửa lỗi Mega menu không dịch Polylang cho widget

Cập nhật lần cuối vào

Bài viết này sẽ hướng dẫn cho các bạn cách khắc phục tình trạng Mega menu không dịch ngôn ngữ cho widget dùng Polylang. Đối với widget và một số đối tượng khác thì Polylang sẽ thêm vào một cái ô select gọi là languages choice. Nếu người dùng chọn tất cả language thì hệ thống sẽ tự động nhận diện ngôn ngữ hiện tại và dịch widget theo ngôn ngữ đó. Nếu người dùng chỉ chọn 1 language nhất định thì chỉ áp dụng cho ngôn ngữ đã được chọn.

Nguyên nhân đối với các widget sử dụng Mega menu không dịch đó là thiếu khung chọn ngôn ngữ này. Đối với các widget được kéo vào Mega menu thì nó sẽ được plugin lọc, lưu dữ liệu theo dạng khác so với các widget thông thường. Do vậy, bạn chỉ cần thêm cái ô chọn ngôn ngữ vào trong widget của Mega menu là được. Để làm được điều này thì bạn thêm vào tập tin functions.php của giao diện đoạn code sau:

function hocwp_theme_custom_in_widgets_form( $widget, $return, $instance ) {
	if ( $widget instanceof WP_Widget && class_exists( 'PLL_Walker_Dropdown' ) ) {
		global $polylang;
		$filter   = new PLL_Admin_Filters( $polylang );
		$dropdown = new PLL_Walker_Dropdown();

		$dropdown_html = $dropdown->walk(
			array_merge(
				array( (object) array( 'slug' => 0, 'name' => __( 'All languages', 'hocwp-theme' ) ) ),
				$filter->model->get_languages_list()
			),
			array(
				'name'     => $widget->id . '_lang_choice',
				'class'    => 'tags-input pll-lang-choice',
				'selected' => empty( $instance['pll_lang'] ) ? '' : $instance['pll_lang'],
			)
		);

		printf(
			'<p><label for="%1$s">%2$s %3$s</label></p>',
			esc_attr( $widget->id . '_lang_choice' ),
			esc_html__( 'The widget is displayed for:', 'hocwp-theme' ),
			$dropdown_html // phpcs:ignore WordPress.Security.EscapeOutput
		);
	}
}

add_action( 'in_widget_form', 'hocwp_theme_custom_in_widgets_form', 10, 3 );

Đoạn code bên trên sẽ có chức năng thêm một ô select chọn ngôn ngữ vào widget. Bạn sẽ chọn ngôn ngữ đối với các widget thông thường trên sidebar. Tạm thời bạn khắc phục tình trạng Polylang không dịch ngôn ngữ trên widget Mega menu như vậy. Sau này các nhà phát triển cập nhật lại tính năng này thì bạn xóa cái này đi để tránh trùng lặp. Chúc bạn thành công.

Theo dõi
Thông báo của
guest

1 Comment
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Nam Hải
4 năm trước

nói về Mega menu không dịch ngôn ngữ cho widget dùng Polylang mình thật sự trống rỗng luôn, vì thế mình cũng đang học hỏi để trang bị kieedn thức cho mình, cảm ơn bạn đã chia sẻ