問題描述

讓我説我有一個主題選項或自定義 postmeta 文本區域。現在我要執行多個短碼,一般文字,圖像等

什麼是最佳實踐,為什麼?

選項 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

選項二:

$content = //my text area data;
echo do_shortcode($content);

請説明哪一個是最佳實踐,為什麼。

編輯

讓我詳細描述這種情況。我根據自己的要求為客户開發主題。有時,我需要在 post /pages /custom post 類型中添加 post meta,這樣他們可以添加短節數 (滑塊,聯繫表單等) 或者只是一個簡單的文本。這是一個文本文件。

為了使短碼工作,我使用選項 1. 現在,我聽到有人説這是一個錯誤的方式,我應該使用 do_shortcode 。但是他們沒有給我解釋為什麼這是錯誤的方式。這就是為什麼我問。

這個整個過程可以在 wp 的默認文本編輯器中完成。但是,我需要為模板特定的使用創建這些選項,這就是我的客户想要的。

最佳解決方案

問題和答案修改

有時候,這些問題有時候會讓你失望,再次在生活中追捕你,這就是一個這樣的問題。

這個問題讓我想到了解決這個問題的另一種解決方案。正如我已經説過的那樣,自定義字段和元框存儲小數據元數據,而不是作為擴展內容的擴展,您可以在其中執行短代碼和函數。另外,正如我已經説過的,你的方法不正確,不應該使用

我發現在您的帖子中發現有趣的是,您使用自定義字段和元框無意中顯示用户輸入中的自定義內容。所以我坐下來思考一個可能的方式來做這個工作,並正確地使用自定義的字段數據和元框數據

這是我的想法:

場景:

注意:可以根據需要進行修改

在單個帖子上,用户希望/要求在帖子後動態顯示自定義內容以滿足他的需要。這應該是動態的。內容應該是一個自定義查詢,用户需要選擇什麼,他想要什麼,他想要什麼

可能的解決方案:

短信碼在這裏不起作用,因為在自定義字段中不能執行短碼。 do_shortcode 也不會工作,因為它不是動態的,是硬編碼的,我們不想要的。在您的問題中,我們將使用自定義字段。再次強調,不要使用自定義字段來執行自定義查詢或縮寫

計劃:

我們將使用自定義字段來僅保存我們的查詢參數,即全部。那麼我們所做的就是創建一個名為 custom_query_arguments 的自定義字段。在您的帖子編輯器屏幕中,您將看到您的自定義字段,隨時可以使用

下一步是將我們的自定義查詢參數添加到我們的字段中。讓我們説,我們需要顯示 3 個標題排序的帖子。所以我們的查詢參數應該如下所示:(以字符串格式)

'posts_per_page=3&cat=1&orderby=title'

這是您現在應該在自定義字段中輸入的內容。輸入後,保存自定義字段的值

接下來將在您的 single.php 中構建自定義查詢。這裏需要什麼,我們需要從我們的自定義字段獲取值,這實際上是我們的查詢參數,並將其提供給 WP_Query 的新實例來檢索帖子。我們還需要檢查,如果自定義字段為空,我們實際上是否保存在該自定義字段中的值,不顯示任何內容

代碼:

在單個帖子之後,你可以在 single.php 中嘗試這樣的東西。

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

}

如果用户想要刪除自定義查詢,他可以簡單地刪除自定義字段的值,並將自定義字段留空。如果他需要顯示相同的查詢,但是從第 10 類和總共 5 個帖子,他可以用以下替換原始值

'posts_per_page=5&cat=10&orderby=title'

請注意:

在此自定義字段和元框中輸入信息時,使用正確的 synatx 和格式非常重要。語法錯誤或不正確的信息將導致不希望的輸出甚至致命的錯誤。讓客户知道這些信息很重要

原始答案

我不明白你正在試圖完成什麼,但是從我可以告訴你的那些,這是兩件事情

選項 1

apply_filters('the_content', $content); 用於將內容過濾器應用於原始未過濾的帖子內容,通常來自使用 $post->post_content 。這些過濾器包括着名的過濾器 wp_autop,它將 P 標籤添加到 the_content()

apply_filters('the_content', $content); 通常與 get_posts 結合使用,其中可直接與 WP_Post 對象一起使用,而不使用 setup_postdata( $post ),使得可以使用 the_content()等模板標籤

選項 2

do_shortcode 用於在頁面編輯器屏幕後端的文本編輯器外部的模板文件的任何位置添加一個短碼,基本上通過鈎子來過濾短碼。

正確的用法如下

示例:將圖庫短代碼添加到模板文件中

echo do_shortcode( '' )

編輯 1

從你的意見,我不會使用一個短碼。

如果您不通過文本編輯器添加一個短碼,並直接通過 do_shortcode 在模板文件中添加它 (硬編碼),那麼我寧願將該功能添加到模板中

例:

如果您有以下短代碼功能

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

您可以直接在模板中直接調用函數

echo footag_func();

它的速度要快得多,因為短碼不需要解析

編輯 2

説實話,你從編輯中完全錯了。這就是為什麼我不明白你的初步問題

Sometimes, I need to add post meta on post/pages/custom post types, so that they can add shortcodes (slider, contact form etc) or just a simple text. It’s a text filed.

To make the shortcode working, I use option 1…..

Custom fields 不是文本字段,肯定不是用於執行快捷鍵和滑塊或聯繫表單。不應該使用自定義字段來替換文章和頁面中的文本編輯器。

如前所述,apply_filters('the_content', $content); 旨在用於將原始帖子內容應用於格式。

你有兩個選擇

  • 使用 do_shortcode 直接在模板文件中,我不建議使用該功能更快,因為短代碼不需要解析

  • 在文本編輯器中直接使用短代碼進行特定的頁面/帖子

我會認真地建議您重新整理您的結構以及您想要實現的目標。自定義字段不是文本編輯器,不能執行縮寫或滑塊。

我的建議是看看可能是自定義小工具或可以與自定義字段一起使用的系統

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。