Dalam Bahagian 1, Bahagian 2 dan Bahagian 3 siri tutorial templat kotak meta tersuai kami, kami mempelajari cara membuat kotak meta boleh guna semula yang mendapat semua elemen daripada tatasusunan yang mudah dibaca dan mudah untuk disalin Maklumat Medan . Kebanyakan data mudah digunakan, hanya gema medan meta dalam templat atau melalui fungsi, tetapi sesetengah medan lebih kompleks dan memerlukan lebih banyak kemahiran untuk digunakan dengan betul. Tutorial ini akan memberi anda idea asas tentang cara menggunakan data ini, dan ia boleh dihuraikan dengan pelbagai cara.
WordPress menyediakan pelbagai cara untuk mendapatkan metadata pos.
Cara paling mudah untuk memaparkan data ialah menggunakan fungsi Metabox tersuai boleh diguna semula menggunakan data Bahagian 4()
. Anda boleh meletakkan ini terus ke dalam templat single.php anda, tetapi ia tidak akan memberikan hasil yang anda inginkan. Ia adalah output yang sangat literal bagi data dalam senarai tidak tertib, diawali dengan kunci setiap medan, seperti yang ditunjukkan. Metabox tersuai boleh diguna semula menggunakan data Bahagian 4()
函数。您可以将其直接放入您的 single.php 模板中,但它不会为您提供您可能想要的结果。它是无序列表中数据的非常字面的输出,以每个字段的键为前缀,如图所示。
获取保存在帖子元字段中的数据的最常见方法是使用 get_post_meta()
函数。这是一种定位特定字段并将其存储在稍后可以使用的变量中的简单方法。
$custom_text = get_post_meta($post->ID, 'custom_text', true);
在单个后循环中使用此代码会将文本“基本文本输入中的某些文本”放入变量 $custom_text
中,然后可以回显或过滤该变量,或者您想要对字符串执行的任何操作。当您只处理几个字段时,这可能是正确的方法,但在我们的示例中,我们正在处理 11 个不同的字段。使用此函数单独调用它们会使您的代码不必要地膨胀,因为有一种方法可以立即获取所有数据。
当我处理这么多字段时,我最喜欢的方法是使用 get_post_custom()
函数。通过此函数,我们可以将所有自定义帖子元字段存储在一个数组中,然后使用数组键检索我们想要的数据。
$post_meta_data = get_post_custom($post->ID);
会给我们一个如下所示的数组:
Array ( [custom_text] => Array ( [0] => Some text in a basic text input ) [custom_textarea] => Array ( [0] => A paragraph or two from a textarea. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tristique quam mi. Sed eget ligula sit amet ante dapibus tristique. Mauris vel enim mauris, vitae mattis tortor. Praesent at adipiscing massa. Fusce quis eros vel sem pharetra consequat imperdiet ut est. ) [custom_checkbox] => Array ( [0] => on ) [custom_select] => Array ( [0] => one ) [custom_radio] => Array ( [0] => two ) [custom_checkbox_group] => Array ( [0] => a:2:{i:0;s:3:"one";i:1;s:5:"three";} ) [custom_post_id] => Array ( [0] => 109 ) [custom_date] => Array ( [0] => 05/25/2012 ) [custom_slider] => Array ( [0] => 15 ) [custom_image] => Array ( [0] => 413 ) [custom_repeatable] => Array ( [0] => a:3:{i:0;s:22:"text from a repeatable";i:1;s:27:"more text from a repeatable";i:2;s:33:"repeatable text fields are great!";} ) )
正如您从该数组中看到的,WordPress 将每个字段存储为一个数组,因为同一字段可能有多个值。您可能还会注意到一些字段是序列化的。让我们更深入地了解如何处理每个字段的数据,并讨论如何解决这个问题。
文本和文本区域字段的处理非常简单。您可以使用以下示例之一来回应它们:
echo $post_meta_data['custom_text'][0]; echo apply_filters('the_content', $post_meta_data['custom_textarea'][0]); $custom_checkox = $post_meta_data['custom_checkbox'][0]; if ($custom_checkbox == 'on') { do_stuff(); }
第一行将简单地按原样输出字符串,第二行将使用 WordPress 的 the_content
过滤器将换行符转换为段落。您也可以对选择、单选、日期和滑块字段使用这些相同的方法。
最后一行显示了如何测试复选框是否已被选中。如果是,您可以执行各种功能或任意数量的事情。
我们的复选框组字段和可重复字段存储在数据库中序列化的数组。在输出这些数据之前,我们必须对其进行反序列化。
$custom_checkbox_group = unserialize($post_meta_data['custom_checkbox_group'][0]); $custom_repeatable = unserialize($post_meta_data['custom_repeatable'][0]);
unserialize()
函数是一个基本的PHP函数,它将我们的数据转换为更易于使用的数组。上面的代码会给我两个如下所示的数组:
Array ( [0] => one [1] => three ) Array ( [0] => text from a repeatable [1] => more text from a repeatable [2] => repeatable text fields are great! )
现在我可以循环遍历数组,但是我想在输出中使用它们。需要注意的是,在可重复字段中,如果您也像自定义元框模板教程第 3 部分中的示例那样使其可排序,则数组中的键将自动按 0、1、2、3 的顺序存储等,而不是按照它们在排序之前最初输入的顺序。
echo '<ul class="custom_repeatable">'; foreach ($custom_repeatable as $string) { echo '<li>'.$string.'</li>'; } echo '</ul>';
此示例将输出保存在 $custom_repeatable
get_post_meta()
. Ini ialah cara mudah untuk mencari medan tertentu dan menyimpannya dalam pembolehubah yang boleh digunakan kemudian. $custom_post_id = $post_meta_data['custom_post_id'][0]; echo '<a href="'.get_permalink($custom_post_id).'">'.get_the_title($custom_post_id).'</a>'; $custom_image = $post_meta_data['custom_image'][0]; echo wp_get_attachment_image($custom_image, 'thumbnail');
Menggunakan kod ini dalam satu gelung jawatan akan meletakkan teks "beberapa teks daripada input teks asas" ke dalam pembolehubah $custom_text
yang kemudiannya boleh digemakan atau ditapis atau apa sahaja yang anda mahu Sebarang operasi dilakukan pada rentetan. Ini mungkin pendekatan yang betul apabila anda hanya berurusan dengan beberapa bidang, tetapi dalam contoh kami, kami berurusan dengan 11 bidang yang berbeza. Memanggil mereka secara individu menggunakan fungsi ini akan membebankan kod anda secara tidak perlu kerana terdapat cara untuk mendapatkan semua data sekaligus.
get_post_custom()
. Dengan fungsi ini kita boleh menyimpan semua medan meta pos tersuai dalam tatasusunan dan kemudian mendapatkan semula data yang kita mahu menggunakan kekunci tatasusunan.
$post_meta_data = get_post_custom($post->ID);
akan memberi kami tatasusunan seperti yang ditunjukkan di bawah:
rrreee
🎜Seperti yang anda lihat daripada tatasusunan ini, WordPress menyimpan setiap medan sebagai tatasusunan kerana mungkin terdapat berbilang nilai untuk medan yang sama. Anda juga mungkin melihat bahawa beberapa medan bersiri. Mari kita lihat dengan lebih mendalam bagaimana setiap data medan diproses dan bincangkan cara menyelesaikan masalah ini. 🎜
🎜
🎜Medan input ringkas🎜
🎜Bekerja dengan medan teks dan textarea adalah sangat mudah. Anda boleh membalasnya menggunakan salah satu contoh berikut: 🎜
rrreee
🎜Baris pertama hanya akan mengeluarkan rentetan seperti sedia ada, baris kedua akan menggunakan penapis the_content
WordPress untuk menukar pemisah baris kepada perenggan. Anda juga boleh menggunakan kaedah yang sama dengan medan pilih, radio, tarikh dan peluncur. 🎜
🎜Barisan terakhir menunjukkan cara untuk menguji sama ada kotak semak ditandakan. Jika ya, anda boleh melaksanakan pelbagai fungsi atau beberapa perkara. 🎜
🎜
🎜Data bersiri🎜
🎜Medan kumpulan kotak semak kami dan medan boleh ulang disimpan dalam tatasusunan bersiri dalam pangkalan data. Sebelum mengeluarkan data ini, kita mesti menyahsirikannya. 🎜
rrreee
Fungsi 🎜unserialize()
ialah fungsi PHP asas yang menukar data kami kepada tatasusunan yang lebih mudah digunakan. Kod di atas akan memberi saya dua tatasusunan yang kelihatan seperti ini: 🎜
rrreee
🎜Kini saya boleh mengulang tatasusunan, tetapi saya mahu menggunakannya dalam output. Satu perkara yang perlu diambil perhatian ialah dalam medan yang boleh diulang, jika anda juga menjadikannya boleh disusun seperti contoh dalam Bahagian 3 Tutorial Templat Kotak Meta Tersuai, kekunci dalam tatasusunan secara automatik akan berada dalam susunan 0, 1, 2, 3 dsb. ., dan bukannya mengikut susunan asalnya sebelum mengisih. 🎜
rrreee
🎜Contoh ini akan mengeluarkan senarai tidak tertib bagi setiap rentetan yang disimpan dalam tatasusunan $custom_repeatable
. 🎜
🎜
🎜Data profesional🎜
🎜Untuk senarai siaran dan medan imej kami, kami menyimpan ID. Dalam kes yang jarang berlaku, anda mungkin hanya mahu mengeluarkan ID, tetapi kemungkinan besar anda akan mahu menggunakan ID untuk mendapatkan maklumat lanjut. 🎜
rrreee
🎜
🎜Kesimpulan🎜
🎜Tutorial ini menunjukkan cara paling asas untuk menggunakan data yang kami simpan melalui kotak meta tersuai yang boleh diguna semula. Mampu menyimpan data tambahan dan menggunakannya dalam tema dan pemalam membuka peluang dunia yang baharu untuk WordPress. Untuk apa anda akan menggunakannya? 🎜
🎜Atas ialah kandungan terperinci Metabox tersuai boleh diguna semula menggunakan data Bahagian 4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!