Penyesuai Tema: Persyaratan, Tema Anak, dan Plugin


  1. 1. Pengantar Penyesuai Tema WordPress
  2. 2. Berinteraksi dengan Penyesuai Tema WordPress
  3. 3. Pelat Boiler Penyesuai Tema WordPress
  4. 4. Memperluas Boilerplate Penyesuai Tema WordPress
  5. 5. Sedang Dibaca: Penyesuai Tema: Persyaratan, Tema Anak, dan Plugin

Sejauh ini kita telah melihat betapa sederhananya menangani opsi tema menggunakan Theme Customizer Boilerplate dan pengaitnya. Seperti yang mungkin Anda ingat, langkah paling penting adalah menghubungkan ke kait filter 'thsp_cbp_options_array' dan meneruskannya ke serangkaian opsi yang ingin Anda gunakan dalam tema Anda.

Saya yakin Anda sudah familiar dengan action WordPress dan filter hooks — Plugin API — dan cara kerjanya, namun untuk berjaga-jaga, berikut rekap singkatnya (menggunakan filter hooks sebagai contoh). Anda dapat menentukan fungsi khusus dan menghubungkannya ke filter yang ada menggunakan fungsi add_filter:

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

Mari kita fokus pada argumen prioritas. Nilai defaultnya adalah 10, jadi jika Anda tidak menggunakan angka lain, itulah prioritas eksekusi fungsi Anda. Turunkan angkanya, sebelum fungsi Anda dijalankan. Jadi jika Anda melakukan sesuatu seperti ini:

// 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 );

Saat Anda memanggil fungsi the_content di single.php atau konten postingan template lainnya akan ditampilkan, diikuti oleh Pesan Pertama, diikuti oleh Pesan Kedua. Bukan karena itu urutannya dalam cuplikan kode ini, tetapi karena parameter prioritas eksekusi. Bayangkan kait seolah-olah itu adalah bola salju yang menggelinding menuruni bukit, mengambil segala macam barang di jalannya.

Bagaimana hal ini berlaku untuk Boilerplate Penyesuai Tema?

Anda dapat menghubungkan ke 'thsp_cbp_options_array' dari file function.php tema Anda, menggunakan fungsi khusus (misalnya my_theme_options_array) dengan nilai prioritas ditetapkan ke 1. Itu berarti fungsi lain apa pun yang terhubung ke 'thsp_cbp_options_array ' filter hook akan melakukannya SETELAH fungsi my_theme_options_array yang sudah Anda tetapkan. Lihatlah contoh ini:

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 );

Ini akan menambahkan Bagian Baru ke Penyesuai Tema dengan satu bidang di dalamnya, yang disebut Tombol Radio Saya. Kemudian Anda, atau orang lain mengembangkan tema anak untuk tema Anda dan memutuskan untuk tetap menggunakan Bagian Baru, namun daripada Tombol Radio Saya, mungkin lebih baik memiliki Kotak Centang Saya. Mudah:

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 );

Perhatikan bahwa saya tidak meneruskan parameter $options ke my_theme_options_array dan melakukannya di fungsi_my_child_theme_options_array? Itu karena ketika saya pertama kali terhubung ke hook 'thsp_cbp_options_array' saya ingin mengganti opsi sampel Theme Customizer Boilerplate. Lalu, ketika saya menghubungkannya lagi dari tema anak saya, saya tidak ingin sepenuhnya menghapus opsi tema induk, hanya mengeditnya sedikit. Itu sebabnya saya hanya mengotak-atik $options['my_theme_new_section']['fields'], bukan keseluruhan array $options.

Tentu saja, Anda juga dapat menghubungkan ke kait filter 'thsp_cbp_options_array' dari tema induk lebih dari sekali.. Katakanlah Anda memilih untuk tidak menambahkan fitur wilayah plugin ke tema Anda dan membiarkan plugin melakukan apa yang mereka inginkan. seharusnya begitu. Sekarang Anda ingin menampilkan beberapa opsi Penyesuai Tema hanya jika plugin tertentu aktif. Sekali lagi, mudah:

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 );

Ingin mengembangkan plugin fungsi inti untuk digunakan dengan tema Anda (sebagaimana mestinya)? Anda juga dapat menghubungkan ke 'thsp_cbp_options_array' dari salah satu file plugin Anda, sama seperti Anda melakukannya dari file function.php tema.

Jangan Menjadi Pilihan Gila

Setiap kali Anda menambahkan opsi ke tema yang Anda kembangkan, Anda perlu mengingat salah satu prinsip inti WordPress — Keputusan bukan Pilihan —. Sangat mudah untuk terbawa suasana dan mulai menambahkan opsi pengguna untuk setiap detail kecil yang dimiliki tema Anda, tapi itu tidak membantu siapa pun. Saya harap beberapa trik ini, terutama menambahkan opsi yang bergantung pada plugin, akan membantu menjaga jumlah opsi tema Anda serendah mungkin.

Lagi pula, jika tema Anda memiliki opsi untuk hal-hal seperti setiap radius batas setiap elemen, itu bukanlah tema, melainkan editor WYSIWYG dan mungkin bukan yang hebat.

Anda tidak membeli kemeja putih karena dengan usaha ekstra Anda bisa mengubahnya menjadi taplak meja, Anda membelinya karena Anda menyukai “kemeja putihnya”. Tema WordPress juga harus seperti itu, mereka harus menyajikan konten dengan cara tertentu, bukan mencoba melakukan segala cara yang bisa dibayangkan. Jika Anda seorang pengembang tema, tugas Anda adalah memastikan ekspektasi pengguna sesuai dengan yang seharusnya.