Rumah >pembangunan bahagian belakang >tutorial php >Petua Pantas: Dayakan Lajur Tersuai Boleh Diisih

Petua Pantas: Dayakan Lajur Tersuai Boleh Diisih

WBOY
WBOYasal
2023-09-01 17:45:13591semak imbas

Petua Pantas: Dayakan Lajur Tersuai Boleh Diisih

Dalam siaran terbaharu oleh Claudio Simeone, dia menunjukkan cara menambah lajur tambahan pada siaran, atau menyesuaikan jenis siaran, skrin pentadbir (atau memadam yang sedia ada). Dalam petua ringkas ini, saya akan membinanya dan menunjukkan kepada anda cara membuat lajur yang baru dibuat boleh diisih.


Untuk memberitahu WordPress lajur yang ingin anda daftarkan sebagai boleh diisih, anda memerlukan penapis ini:

manage_{$screen->id}_sortable_column

Untuk siaran dan halaman, $screen->id ialah "edit-post" dan "edit-page" masing-masing. Secara umumnya, untuk jenis siaran bernama "jenis-siaran saya", ia ialah "edit-jenis-siaran-saya". $screen->id 分别是“edit-post”和“edit-page”。一般来说,对于名称为“my-post-type”的帖子类型,它是“edit-my-post-type”。

过滤器传递一个数组,其中可排序列的名称作为键,排序依据作为值。更准确地说,这些值指示在填充表的查询中设置“orderby”参数。与删除列的方式相同,您也可以通过从该数组中删除列来使列“不可排序”。让我们看一个例子:


注册列

根据 Claudio 的文章,假设我们已将“切片”列添加到“蛋糕”帖子类型中,我们可以执行以下操作:

add_filter('manage_edit-cake_columns', 'my_extra_cake_columns');
function my_extra_cake_columns($columns) {
	$columns['slices'] =__('Slices','myplugindomain');
	return $columns;
}

我们为该列添加了如下内容:

add_action( 'manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2 );
function my_cake_column_content( $column_name, $post_id ) {
	if ( 'slices' != $column_name )
		return;
	//Get number of slices from post meta
	$slices = get_post_meta($post_id, 'slices', true);
	echo intval($slices);
}

我已将切片存储为后元,但您的列可以由其他数据填充。


使列可排序

现在我们将自定义列注册为“可排序”。如上所述,我们使用 manage_{$screen->id}_sortable_column 过滤器。本例中的 $screen->id 是“edit-cake”。

add_filter( 'manage_edit-cake_sortable_columns', 'my_sortable_cake_column' );
function my_sortable_cake_column( $columns ) {
	$columns['slices'] = 'slice';

	//To make a column 'un-sortable' remove it from the array
	//unset($columns['date']);

	return $columns;
}

$columns 数组的键表示可排序列,其值告诉 WordPress 在查询中将 'orderby' 设置为什么。如果该值是 WordPress 本身理解的 'orderby 之一(这些值包括 'title'、'date'、'modified'、'comment_count',或者确实是下面列出的任何其他值WordPress Codex 中的 WP_Query)我们可以到此为止。此规则的例外情况(如本例所示)是 'meta_value' 和 'meta_value_num' 参数,它们也要求我们设置元密钥。

如果我们想按元值排序,或者通过 WordPress 无法自动理解的其他方式进行排序,您必须告诉它按“切片”排序的含义。如果您通过 post meta 订购,最简单的方法是挂钩 pre_get_posts 操作。这传递了一个我们可以修改的查询对象。请注意,所有默认查询(正面和背面)都会触发此操作。虽然它不太可能引起任何问题,但除非您希望 WordPress 在前端也将 orderby 设置为“切片”,否则最好只在管理端影响查询。

add_action( 'pre_get_posts', 'my_slice_orderby' );
function my_slice_orderby( $query ) {
	if( ! is_admin() )
		return;

	$orderby = $query->get( 'orderby');

	if( 'slice' == $orderby ) {
		$query->set('meta_key','slices');
		$query->set('orderby','meta_value_num');
	}
}

这会检查我们的查询是否按“切片”排序,如果是,它会告诉 WordPress 按“切片”帖子元的值进行数字排序。如果您想按字母顺序对值进行排序,请使用 'meta_value' 而不是 'meta_value_num'。

$query 是一个 WP_Query 对象,因此您可以使用该对象对任何内容进行排序,您也可以对列进行排序。对于其他更复杂的事情,您需要挂钩 posts_orderby (或 post_clauses

Penapis dihantar tatasusunan dengan nama lajur boleh diisih sebagai kunci dan isih mengikut sebagai nilai. Lebih tepat lagi, nilai ini menunjukkan bahawa parameter "orderby" ditetapkan dalam pertanyaan yang mengisi jadual. Dengan cara yang sama seperti mengalih keluar lajur, anda juga boleh membuat lajur "tidak boleh diisih" dengan mengalih keluar lajur daripada tatasusunan ini. Mari lihat contoh:

Lajur pendaftaran

Setiap artikel Claudio, dengan andaian kami telah menambah lajur "Slice" pada jenis siaran "Cake", kami boleh melakukan perkara berikut:

rrreee 🎜Kami menambah yang berikut pada lajur: 🎜 rrreee 🎜Saya telah menyimpan kepingan sebagai metadata, tetapi lajur anda boleh diisi oleh data lain. 🎜 🎜

Jadikan lajur boleh diisih

🎜Kini kami mendaftarkan lajur tersuai sebagai "boleh disusun". Seperti yang dinyatakan di atas, kami menggunakan penapis manage_{$screen->id}_sortable_column. $screen->id dalam contoh ini ialah "edit-cake". 🎜 rrreee Kekunci tatasusunan 🎜$columns mewakili lajur boleh diisih dan nilainya memberitahu WordPress perkara yang perlu ditetapkan 'orderby' dalam pertanyaan. Jika nilai adalah salah satu daripada 'orderby' yang difahami oleh WordPress sendiri (nilai ini termasuk 'title', 'date', ' diubah suai ', 'comment_count' atau mana-mana nilai lain yang disenaraikan di bawah untuk WP_Query dalam WordPress Codex) Kita boleh berhenti di sini. Pengecualian kepada peraturan ini (seperti yang ditunjukkan dalam contoh ini) ialah parameter 'meta_value' dan 'meta_value_num', yang juga memerlukan kami menetapkan metakey. 🎜 🎜Jika kita ingin mengisih mengikut nilai meta, atau dengan cara lain yang WordPress tidak faham secara automatik, anda perlu memberitahunya maksud pengisihan mengikut "slice". Jika anda memesan melalui meta pos, cara paling mudah ialah dengan menggunakan tindakan pre_get_posts. Ini menghantar objek pertanyaan yang boleh kita ubah suai. Ambil perhatian bahawa semua pertanyaan lalai (depan dan belakang) mencetuskan tindakan ini. Walaupun ia tidak mungkin menyebabkan sebarang masalah, melainkan anda mahu WordPress menetapkan orderby kepada "menghiris" pada bahagian hadapan juga, sebaiknya hanya mempengaruhi pertanyaan di bahagian pentadbir. 🎜 rrreee 🎜Ini menyemak sama ada pertanyaan kami diisih mengikut "slice" dan jika ya, ia memberitahu WordPress untuk mengisih secara berangka mengikut nilai meta post "slice". Jika anda ingin mengisih nilai mengikut abjad, gunakan 'meta_value' dan bukannya 'meta_value_num'. 🎜 🎜$query ialah objek WP_Query, jadi anda boleh menggunakan objek itu untuk mengisih apa-apa dan anda juga boleh mengisih lajur. Untuk perkara lain yang lebih kompleks, anda perlu mengaitkan cangkuk posts_orderby (atau post_clauses), tetapi itu di luar skop petua ringkas ini. 🎜 🎜🎜Nota: 🎜Jika siaran tidak menyimpan nilai untuk kunci meta itu, maka siaran itu tidak akan dipaparkan apabila anda mengisih mengikut kunci meta tersebut. Ini berbeza daripada siaran yang menyimpan 0 sebagai nilai meta. 🎜

Atas ialah kandungan terperinci Petua Pantas: Dayakan Lajur Tersuai Boleh Diisih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn