在我們的自訂元框範本教學系列的第1 部分、第2 部分和第3 部分中,我們學習如何製作可重複使用的元框,該元框從易於閱讀、易於複製的陣列中取得所有欄位資訊。許多資料很容易使用,只需回顯模板中的元字段或通過函數即可,但某些字段更複雜,需要更多技巧才能正確使用。本教程將為您提供如何使用這些數據的基本概念,並可以透過無數種方式進行闡述。
WordPress 提供了多種獲取貼文元資料的方法。
顯示資料最簡單的方法是使用 使用資料的可重複使用自訂元框盒子第四部分()
函數。您可以將其直接放入您的 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
陣列中的每個字串的無序列表。
對於我們的帖子列表和圖像字段,我們保存了一個 ID。在極少數情況下,您可能只想輸出 ID,但很可能您希望使用 ID 來獲取更多資訊。
$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');
本教學展示了使用我們透過可重複使用的自訂元框儲存的資料的最基本方法。能夠保存額外的資料並在主題和外掛程式中使用它,為 WordPress 開闢了一個充滿可能性的全新世界。你會用它做什麼?
以上是使用資料的可重複使用自訂元框盒子第四部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!