如何在 WordPress 中使用条件标签

已发表: 2020-06-09

我最喜欢 WordPress 的一件事是它包含许多功能,这些功能大大简化了我们作为开发人员的工作。 例如,考虑像esc_attr这样的函数,它对文本进行转义以便可以安全地将其添加到 HTML 标记属性中,或者esc_html对文本进行转义以便可以安全地包含在 HTML 页面中。 或者看看我们必须清理从用户那里收到的数据的一些函数: sanitize_text_fieldsanitize_textarea_fieldsanitize_email 。 您已经习惯了这些定义明确的功能,以至于当您必须在 WordPress 领域之外开发任何东西并发现它们不再可用时,您真的会想念它们!

当我们在 WordPress 上开发时,我们可以使用的功能集合非常大。 而且我们对它们越熟悉,就越容易编写高质量的代码。

今天我想告诉你关于 WordPress 中的条件标签:它们是什么,如何使用它们,它们可能会误导什么,以及它们为什么如此有用。 如果您是插件或主题开发人员,但您还不认识他们,请不要错过这篇文章。

什么是 WordPress 的条件标签?

条件标签是在 WordPress 中定义的函数,其结果是一个布尔值(即它是truefalse )。 这些是我们可以在我们的插件和主题中使用的功能,以根据我们即将呈现的内容做出有条件的决定。

条件标签之所以出色的原因在于,一般来说,它们的名称是不言自明的,并且生成的代码非常容易理解。 例如,如果您在插件中使用条件标签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/blogis_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 上的特色图片。