Warning: Undefined array key "vi" in /home/host1693024/word-press.day/htdocs/www/875348534534.php on line 1665
Tùy biến chủ đề: Điều kiện, Chủ đề con và Plugin

Tùy biến chủ đề: Điều kiện, Chủ đề con và Plugin


  1. 1. Giới thiệu về Trình tùy chỉnh chủ đề WordPress
  2. 2. Tương tác với Trình tùy chỉnh chủ đề WordPress
  3. 3. Bản tóm tắt tùy biến chủ đề WordPress
  4. 4. Mở rộng bản tóm tắt tùy biến chủ đề WordPress
  5. 5. Đang đọc: Tùy biến chủ đề: Điều kiện, Chủ đề con và Plugin

Cho đến nay, chúng ta đã thấy việc xử lý các tùy chọn chủ đề bằng cách sử dụng Trình soạn thảo tùy chỉnh chủ đề và các móc của nó đơn giản như thế nào. Có thể bạn còn nhớ, bước quan trọng nhất là nối vào móc lọc 'thsp_cbp_options_array' và chuyển cho nó một loạt tùy chọn mà bạn muốn sử dụng trong chủ đề của mình.

Tôi chắc chắn rằng bạn đã quen thuộc với các móc lọc và hành động của WordPress - API plugin - và cách chúng hoạt động, nhưng để đề phòng, đây là bản tóm tắt nhanh (sử dụng móc lọc làm ví dụ). Bạn có thể xác định hàm tùy chỉnh của mình và nối nó vào bộ lọc hiện có bằng hàm add_filter:

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Hãy tập trung vào đối số ưu tiên. Giá trị mặc định của nó là 10, vì vậy nếu bạn không sử dụng số khác thì đó sẽ là mức độ ưu tiên thực thi của hàm của bạn. Giảm số xuống, chức năng của bạn sẽ được thực thi sớm hơn. Vì vậy, nếu bạn làm một cái gì đó như thế này:

// Adding first message
function my_theme_add_first_message( $content ) {
	$content .= '<p>First Message</p>';
	return $content;
}
add_filter( 'the_content', 'my_theme_add_first_message', 1 );

// Adding second message
function my_theme_add_second_message( $content ) {
	$content .= '<p>Second Message</p>';
	return $content;
}
add_filter( 'the_content', 'my_theme_add_second_message', 2 );

Khi bạn gọi hàm the_content trong single.php hoặc bất kỳ nội dung bài đăng mẫu nào khác sẽ được hiển thị, theo sau là Tin nhắn đầu tiên, tiếp theo là Tin nhắn thứ hai. Không phải vì đó là thứ tự của chúng trong đoạn mã này mà vì tham số mức độ ưu tiên thực thi. Hãy nghĩ về những chiếc móc như thể chúng là những quả cầu tuyết lăn xuống đồi nhặt đủ thứ trên đường đi.

Điều này áp dụng cho Bản tóm tắt tùy chỉnh chủ đề như thế nào?

Bạn có thể nối vào 'thsp_cbp_options_array' từ tệp function.php của chủ đề bằng cách sử dụng hàm tùy chỉnh (ví dụ: my_theme_options_array) với giá trị ưu tiên được đặt thành 1. Điều đó có nghĩa là bất kỳ hàm nào khác nối vào 'thsp_cbp_options_array ' hook bộ lọc sẽ thực hiện điều đó SAU hàm my_theme_options_array mà bạn đã xác định. Hãy xem ví dụ này:

function my_theme_options_array() {
	// Using helper function to get default required capability
	$thsp_cbp_capability = thsp_cbp_capability();

	$options = array(
		// Section ID
		'my_theme_new_section' => array(

			'existing_section' => false,
			'args' => array(
				'title' => __( 'New Section', 'my_theme_textdomain' ),
				'priority' => 10
			),
			'fields' => array(
				/*
				 * Radio field
				 */
				'my_radio_button' => array(
					'setting_args' => array(
						'default' => 'option-2',
						'type' => 'option',
						'capability' => $thsp_cbp_capability,
						'transport' => 'refresh',
					),					
					'control_args' => array(
						'label' => __( 'My Radio Button', 'my_theme_textdomain' ),
						'type' => 'radio', // Radio control
						'choices' => array(
							'option-1' => array(
								'label' => __( 'Option 1', 'my_theme_textdomain' )
							),
							'option-2' => array(
								'label' => __( 'Option 2', 'my_theme_textdomain' )
							),
							'option-3' => array(
								'label' => __( 'Option 3', 'my_theme_textdomain' )
							)
						),					
						'priority' => 3
					)
				)
			)
		)
	);
	
	return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_theme_options_array', 1 );

Thao tác này sẽ thêm Phần mới vào Trình tùy chỉnh chủ đề với một trường trong đó, được gọi là Nút radio của tôi. Sau đó, bạn hoặc người khác phát triển chủ đề con cho chủ đề của bạn và quyết định giữ Phần mới, nhưng thay vì Nút Radio của tôi, có thể tốt hơn nên có Hộp kiểm của tôi. Dễ:

function my_child_theme_options_array( $options ) {
	// Using helper function to get default required capability
	$thsp_cbp_capability = thsp_cbp_capability();

	/*
	 * This time, we're only editing fields in my_theme_new_section in the $options array
	 */	
	$options['my_theme_new_section']['fields'] = array(
		'my_checkbox_field' => array(
			'setting_args' => array(
				'default' => true,
				'type' => 'option',
				'capability' => $thsp_cbp_capability,
				'transport' => 'refresh',
			),					
			'control_args' => array(
				'label' => __( 'My Checkbox', 'my_theme_textdomain' ),
				'type' => 'checkbox', // Checkbox field control
				'priority' => 2
			)
		)
	);
	
	return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_child_theme_options_array', 2 );

Tôi nhận thấy rằng tôi đã không chuyển tham số $options cho my_theme_options_array mà đã chuyển nó trong hàm my_child_theme_options_array? Đó là bởi vì khi lần đầu tiên tôi kết nối với hook 'thsp_cbp_options_array', tôi đã muốn ghi đè các tùy chọn mẫu Mẫu soạn sẵn của Trình tùy chỉnh chủ đề. Sau đó, khi tôi kết nối lại với nó từ chủ đề con của mình, tôi không muốn xóa hoàn toàn các tùy chọn của chủ đề gốc mà chỉ chỉnh sửa chúng một chút. Đó là lý do tại sao tôi chỉ xử lý $options['my_theme_new_section']['fields'] chứ không phải toàn bộ mảng $options.

Tất nhiên, bạn cũng có thể nối vào móc lọc 'thsp_cbp_options_array' từ chủ đề gốc của mình nhiều lần.. Giả sử bạn đã chọn không thêm các tính năng lãnh thổ plugin vào chủ đề của mình và để plugin thực hiện những gì chúng' lẽ ra phải thế. Bây giờ bạn chỉ muốn hiển thị một số tùy chọn Tùy chỉnh chủ đề nếu một plugin nhất định đang hoạt động. Một lần nữa, dễ dàng:

function my_plugin_dependency_options_array( $options ) {
	// Using helper function to get default required capability
	$thsp_cbp_capability = thsp_cbp_capability();

	/*
	 * Only adding my_plugin_dependency_section if 'test-plugin.php' is active
	 */	
	if ( is_plugin_active( 'test-plugin/test-plugin.php' ) ) {
	
		$options['my_plugin_dependency_section'] = array(
			'existing_section' => false,
			'args' => array(
				'title' => __( 'Plugin Dependency', 'my_theme_textdomain' ),
				'priority' => 10
			),
			'fields' => array(
				/*
				 * Text field
				 */
				// Field ID
				'new_text_field' => array(
					'setting_args' => array(
						'default' => __( '', 'my_theme_textdomain' ),
						'type' => 'option',
						'capability' => $thsp_cbp_capability,
						'transport' => 'refresh',
					),					
					'control_args' => array(
						'label' => __( 'Only shows if', 'my_theme_textdomain' ),
						'type' => 'text', // Text field control
						'priority' => 5
					)
				),
			)
		);
	
	}
	
	return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );

Bạn muốn phát triển một plugin chức năng cốt lõi để sử dụng với chủ đề của mình (nếu cần)? Bạn cũng có thể kết nối vào 'thsp_cbp_options_array' từ một trong các tệp của plugin, giống như cách bạn thực hiện từ tệp function.php của chủ đề.

Đừng đi theo lựa chọn điên cuồng

Mỗi khi thêm tùy chọn vào chủ đề mà bạn phát triển, bạn cần ghi nhớ một trong những nguyên tắc cốt lõi của WordPress — Quyết định không phải tùy chọn —. Thật dễ dàng để bắt đầu thêm các tùy chọn người dùng cho mọi chi tiết nhỏ mà chủ đề của bạn có, nhưng điều đó không mang lại lợi ích gì cho bất kỳ ai. Tôi hy vọng một số thủ thuật này, đặc biệt là việc thêm các tùy chọn phụ thuộc vào plugin, sẽ giúp số lượng tùy chọn trong chủ đề của bạn ở mức thấp nhất có thể.

Xét cho cùng, nếu chủ đề của bạn có các tùy chọn cho những thứ như mọi bán kính đường viền của từng phần tử, thì đó không phải là chủ đề mà đó là trình soạn thảo WYSIWYG và có thể không phải là một chủ đề tuyệt vời.

Bạn không mua một chiếc áo sơ mi trắng vì chỉ cần nỗ lực thêm một chút, bạn có thể biến nó thành một chiếc khăn trải bàn, bạn mua nó vì bạn thích “tính chất áo sơ mi trắng” của nó. Các chủ đề WordPress cũng phải như vậy, chúng nên trình bày nội dung theo một cách nhất định chứ không phải cố gắng làm mọi thứ theo mọi cách có thể tưởng tượng được. Nếu bạn là nhà phát triển chủ đề, công việc của bạn là đảm bảo mong đợi của người dùng đúng như mong đợi.