如何在 WordPress 中使用條件標籤
已發表: 2020-06-09我最喜歡 WordPress 的一件事是它包含許多功能,這些功能大大簡化了我們作為開發人員的工作。 例如,考慮像esc_attr這樣的函數,它對文本進行轉義以便可以安全地將其添加到 HTML 標記屬性中,或者esc_html對文本進行轉義以便可以安全地包含在 HTML 頁面中。 或者看看我們必須清理從用戶那裡收到的數據的一些函數: sanitize_text_field 、 sanitize_textarea_field或sanitize_email 。 您已經習慣了這些定義明確的功能,以至於當您必須在 WordPress 領域之外開發任何東西並發現它們不再可用時,您真的會想念它們!
當我們在 WordPress 上開發時,我們可以使用的功能集合非常大。 而且我們對它們越熟悉,就越容易編寫高質量的代碼。
今天我想告訴你關於 WordPress 中的條件標籤:它們是什麼,如何使用它們,它們可能會誤導什麼,以及它們為什麼如此有用。 如果您是插件或主題開發人員,但您還不認識他們,請不要錯過這篇文章。
什麼是 WordPress 的條件標籤?
條件標籤是在 WordPress 中定義的函數,其結果是一個布爾值(即它是true或false )。 這些是我們可以在我們的插件和主題中使用的功能,以根據我們即將呈現的內容做出有條件的決定。
條件標籤之所以出色的原因在於,一般來說,它們的名稱是不言自明的,並且生成的代碼非常容易理解。 例如,如果您在插件中使用條件標籤is_sticky ,如果在 WordPress 循環中,我們正在處理置頂帖子,它將清楚地返回true 。 毫無疑問它的語義,對吧?
在我們開始舉幾個例子之前,請記住,條件標籤只有在 WordPress 確定訪問者請求的內容後才可用。 如果我們之前嘗試使用它們,它們的結果將始終為false 。 換句話說,我們只能在posts_selection操作運行後使用它們。
最常見的條件標籤
WordPress 中的大多數條件標籤都以is_開頭,因為諸如“is blah blah?”之類的問題的答案。 是一個布爾值:“是”或“否”。 但是,不幸的是,並不總是遵循這個標準(我們將在下面看到)。
WordPress中有許多條件標籤,您會在需要時熟悉它們。 但是有不少是非常常見的,你越早了解它們越好。 因此,讓我們仔細看看這些:
-
is_single。 它檢查當前元素是 WordPress 帖子還是任何其他自定義帖子類型的實例(例如 WooCommerce產品)。 -
is_page。 它檢查當前元素是否是 WordPress 頁面。 -
is_attachment。 它檢查當前元素是否是附件。 附件是您上傳到媒體庫的那些文件,例如圖像、視頻、文件等。 -
is_singular。 它檢查前面三個函數中的任何一個是否為true。 也就是說,它檢查當前元素是否是帖子、頁面、附件或任何其他帖子類型。 -
comments_open。 如果訪問者可以評論當前元素,則返回true。 看? 在這裡,您有一個條件標記不以is_開頭的示例。 -
is_category。 它檢查我們當前是否正在查看類別存檔頁面。 -
in_category。 如果當前帖子屬於給定類別,則返回 true。 -
is_tag。 它檢查我們當前是否正在查看標籤存檔頁面。 -
has_tag。 它檢查當前帖子是否使用指定的標籤進行了標記。 -
is_main_query。 它檢查我們是否在 WordPress 的主循環中。
您是否知道有些條件標籤可能會產生誤導?
在某些情況下,條件標籤的名稱可能會讓我們感到困惑,因為它們似乎評估的內容和實際評估的內容是不同的:
-
is_admin。 你可能會認為這個函數會檢查當前用戶是否是管理員,對吧? 錯誤的! 它檢查我們是在 WordPress 儀表板中的頁面中(然後它的結果將是true)還是在前端(即false)。 -
is_home。 我曾經認為這個功能檢查當前頁面是否是您的主頁。 例如,在我們的網站中,它是https://neliosoftware.com。 但不幸的是,事實並非如此。 WordPress 是作為一個博客平台誕生的,我認為這是一些“遺留代碼”的一個例子。is_home是一個條件函數,用於檢查當前頁面是否是您的博客頁面。 因此,例如,如果您使用 WordPress 的默認設置,當訪問者位於主頁 (https://yourweb.com) 時,is_home確實會返回true,因為該頁面顯示您最新的博客文章。 但是,如果您將博客頁面設置為其他內容(例如https://yourweb.com/blog),那麼當訪問者請求https://yourweb.com/blog時is_home將為true,否則為false。 -
is_front_page。 這是一個條件標籤,當訪問者在“主頁”時,它會讓你知道。 -
is_dynamic_sidebar。 此函數檢查您的主題是否有一個或多個小部件側邊欄,如果有,如果其中至少一個側邊欄不為空,它將返回true。
參數化條件標籤
儘管大多數條件標記都是可以不帶參數調用的函數,但其中許多都支持參數。 如果我們使用它們,我們可以更具體地了解當前帖子應滿足的標準。 他們以非常合乎邏輯的方式做到這一點。

根據我們使用的特定函數,我們可能想要檢查當前元素是否具有特定 ID 或特定 slug,是否是特定帖子類型的實例,或者是否具有特定標題。 例如:
-
is_singular( 'product' )檢查當前元素是否為product 。 -
is_page( 'Contact Us' )檢查當前頁面的標題是否為“Contact Us”。 此函數接受不同類型的參數,並且根據您提供的內容,它會檢查一件事或另一件事。 例如,您可以檢查當前元素是否具有某個 ID 或某個標題或 slug。 很整潔吧? 您甚至可以使用列表作為參數! -
is_single( [ 5, 10, 11 ] )檢查當前元素的 ID 是否為 5、10 或 11。它與is_page非常相似,但正如我們之前所說,它適用於頁面以外的帖子。
如何使用條件標籤
讓我們看幾個條件標籤可能派上用場的例子。
自定義模板
正如您可能預見的那樣,條件標籤在主題中顯然很有用。 如果您希望主題根據在任何給定時間查看的內容類型顯示一個或另一個信息(這是我們經常想要做的事情),條件標籤是您的盟友:
<?php // ... if ( ! is_page() ) { echo '<span class="whatever">'; echo $something_relevant; echo '</span>'; } // ...這允許您對不同類型的內容使用相同的模板,並使用條件標籤自定義每個內容。
有條件地排隊資產
但是條件標籤對插件開發人員也非常有用。 具體來說,它們幫助我們有條件地加載插件的一部分,這取決於我們從條件標籤中獲得的結果。
例如,假設我們正在開發一個插件,為我們的博客文章添加某種功能。 假設此功能需要我們將腳本和样式表排入前端。 為了在 WordPress 中加入腳本和样式,我們有一個名為wp_enqueue_scripts的過濾器:
function nelio_plugin_fancy_feature() { wp_enqueue_script( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.js' ); wp_enqueue_style( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.css' ); } add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' ); 前面的代碼片段的問題在於,無論訪問者請求什麼,它總是將我們的資產排入隊列。 每當wp_enqueue_scripts運行時(它在每個前端請求中都會運行),我們的回調函數將被調用,我們的腳本和样式表將被添加。 但是我們說我們的功能只影響博客文章,所以……我們真的需要總是將這些資產排入隊列嗎? 當然不是! 我們可以通過使用適當的條件標籤來改進這一點:
function nelio_plugin_fancy_feature() { if ( ! is_single( 'post' ) ) { return; } wp_enqueue_script( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.js' ); wp_enqueue_style( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.css' ); } add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' );總之
WordPress 的條件標籤讓我們可以測試我們內容的不同標準,從而根據這些標準調整將要發生的事情。 儘管它們極其簡單,但它們是非常有用的函數,可以使我們的代碼更易於理解和更高效。
我希望您今天學到了一些東西,並且一如既往,如果您有任何問題或意見,請在下面的評論部分告訴我們。
Justin Luebke 在 Unsplash 上的特色圖片。
