Статьи

Пошаговое руководство по условным тегам в WordPress: от 27 до 39

В этой серии статей мы рассмотрим одну из основных функций WordPress: условные теги. В этой четвертой части мы продолжим знакомство с условными тегами. Не забудьте проверить предыдущие части, если вы еще не сделали.

Давайте начнем!

В WordPress наиболее часто используемым типом архивов на основе дат, вероятно, являются ежемесячные архивы. Когда вам нужно определить, выполняется ли ваш код на странице ежемесячного архива, вам поможет is_month() тег is_month() .

Этот условный тег не принимает никаких параметров.

При разработке плагинов вам может понадобиться проверить, поддерживает ли активная тема миниатюры, форматы сообщений, пользовательские заголовки или даже виджеты. С помощью current_theme_supports() вы можете проверить, поддерживает ли используемая тема указанную вами функцию.

Этот условный тег имеет только один параметр:

  • $feature (строка, необязательно): имя функции. (По умолчанию: нет)

Названия функций:

  • «пост-миниатюра»
  • «пост-форматы»
  • «Пользовательского заголовок»
  • «Заказ фона»
  • «меню»
  • «автоматические облучатели ссылка»
  • «Редактор стиля»
  • «виджеты»
  • ‘Html5’

Допустим, вы разрабатываете плагин специально для тем WordPress с функцией «пользовательских фонов». Ваш плагин будет бесполезен для тем, которые не поддерживают пользовательские фоны, поэтому вам нужно отобразить сообщение об ошибке в панели администрирования, чтобы проинформировать пользователя. Вот что вы делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?php
 
add_action( ‘admin_notices’, ‘custom_bg_feature_warning’ );
 
function custom_bg_feature_warning() {
 
    if ( ! current_theme_supports( ‘custom-background’ ) ) {
     
    echo ‘<div class=»error»>
              <p>’ .
          </div>’;
     
    }
 
}
 
?>

Работая только в панели администрирования, is_plugin_active() тег is_plugin_active() помогает вашему коду узнать, активен ли данный плагин. Этот условный тег может быть полезен, если вы пишете «плагины аддонов» для популярных плагинов (например, WooCommerce) или базовых платформ, установленных как плагины (например, Redux Framework).

Этот условный тег имеет только один параметр:

  • $plugin (строка, обязательно): имя плагина или подкаталога. (По умолчанию: нет)

Вложения WordPress — это благословение при правильном использовании, но как узнать, является ли URL-адрес вложением? Если вы работаете с URL-адресами во время разработки, is_local_attachment() тег is_local_attachment() может быть очень полезен для вас: он проверяет, загружен ли данный URL-адрес в ту же установку WordPress, что и вложение.

Этот условный тег имеет только один параметр:

  • $url (строка, обязательная): URL для проверки. (По умолчанию: нет)

Поскольку этот условный тег довольно прост, пример также будет простым. Представьте, что вы разрабатываете плагин, и вам нужно проверить URL (созданные другой функцией, которую вы создали), чтобы увидеть, являются ли они локальными вложениями или нет:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
 
$url = some_url_generator_function();
 
if ( is_local_attachment( $url ) ) {
 
    _e( ‘Yep, this is a local attachment!’, ‘translation-domain’ );
 
} else {
 
    _e( ‘Nope, this is not a local attachment.’, ‘translation-domain’ );
 
}
 
?>

Знаете ли вы, что WordPress имеет часовые, минутные и даже вторые архивы? (Если честно, я не знал, что вы могли бы создавать такие архивы до написания этой серии. Писать в Tuts + тоже можно в образовательном путешествии!)

Это не из коробки, что означает, что вы не можете набрать mywebsite.com/2014/02/22/18/30/ и получить архивы на 18:30 22 февраля 2014 года; но вы можете создать его с помощью класса WP_Query . В любом случае: если вы хотите обнаруживать подобные архивы на основе времени, вы можете использовать is_time() тег is_time() .

Этот условный тег не принимает никаких параметров.

На некоторых языках, в основном в странах Ближнего Востока, текст пишется справа налево, а не слева направо. Как разработчик WordPress, вы должны учитывать всех пользователей WordPress, и если вы хотите, чтобы ваша тема или плагин хорошо работали с сайтами WordPress с текстом RTL, вы должны использовать is_rtl() чтобы определить, является ли локаль RTL.

Этот условный тег не принимает никаких параметров.

Большинство веб-дизайнеров создают отдельные таблицы стилей для локали RTL — это обычная практика. И если вы хотите загрузить свою таблицу стилей RTL условно, вот что вы делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
 
add_action( ‘wp_enqueue_scripts’, ‘mytheme_enqueue_styles’ );
 
function mytheme_enqueue_styles() {
 
    if ( is_rtl() ) {
     
        wp_enqueue_style( ‘style-rtl’, plugins_url( ‘/css/style-rtl.css’, __FILE__ ) );
     
    }
 
}
 
?>

Условный тег is_tag() может обнаруживать архивы тегов, но он не может работать с пользовательскими таксономиями. Чтобы определить, отображается ли страница архива таксономии, вы можете использовать is_tax() . По умолчанию он включает все страницы архива таксономии, включая обычные теги. Но у него есть два параметра, поэтому вы можете настроить таргетинг на отдельные страницы архива таксономии или даже на определенные термины.

Этот условный тег имеет только один параметр:

  • $taxonomy (массив / строка, необязательно): слаг таксономии или массив слагов. (По умолчанию: нет)
  • $term (массив / строка / целое число, необязательно): идентификатор термина, имя, слаг или их массив. (По умолчанию: нет)

При создании плагина (или темы) вы можете узнать, когда отображается страница вложения. Условный тег is_attachment() поможет вам: он возвращает TRUE на странице вложения и FALSE любом другом месте.

Этот условный тег не принимает никаких параметров.

Допустим, вы хотите отобразить ссылку «Вернуться к сообщению» над вложением. Вот что вы делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php
 
if ( is_attachment() ) {
 
    // Get attachment’s parent.
    $parent = get_post_field( ‘post_parent’, $id );
     
    // Get permalink of the parent post.
    $parent_link = get_permalink( $parent );
     
    // Echo the link.
    echo ‘<a href=»‘ . $parent_link . ‘» class=»parent-post-link»>’ .
 
}
 
?>

Это второй условный тег, который не возвращает TRUE и FALSE , но имеет более полезную информацию: term_exists() тег term_exists() проверяет, существует ли термин таксономии, и возвращает идентификатор термина (если таксономия не указана) или массив таксономии и спаривания терминов вместо TRUE . Если указанный термин не существует, он возвращает 0 или NULL .

Этот условный тег имеет три параметра:

  • $term (строка / целое число, обязательно): имя или идентификатор термина. (По умолчанию: нет)
  • $taxonomy (строка, необязательно): название таксономии. (По умолчанию: пусто)
  • $parent (integer, необязательный): идентификатор родительского термина (для ограничения поиска под ним). (По умолчанию: 0)

Мы увидели, что можем использовать has_tag() если хотим найти тег в сообщении. Что, если мы хотим сделать то же самое, но с условием таксономии? Легко: has_term() тег has_term() имеет третий параметр (второй по порядку), который позволяет нам указать пользовательскую таксономию.

has_tag() факт: даже has_tag() тег has_tag() использует has_term() для возврата TRUE или FALSE ! Как и в has_tag() функции has_tag() , has_term() также позволяет указывать более одного термина (но только в одной таксономии).

Этот условный тег имеет три параметра:

  • $term (массив / строка / целое число, необязательно): имя термина, идентификатор, слаг или их массив. (По умолчанию: пусто)
  • $taxonomy (строка обязательна): название таксономии. (По умолчанию: пусто)
  • $post (объект / целое число, необязательно): публикация для проверки. (По умолчанию: NULL )

Допустим, у вас есть веб-сайт электронной коммерции, и вы собираетесь сменить поставщика на ноутбуки Dell, поэтому вы хотите сообщить своим пользователям, что поставки будут отложены до следующей недели. Вот что вы делаете:

1
2
3
4
5
6
7
8
9
<?php
 
if ( has_term( ‘dell’, ‘laptops’ ) ) {
 
    echo ‘<div class=»above-product-warning»><strong>’ .
     
}
 
?>

Привет, старожил! Вы хотите узнать, является ли комментарий «трекбэком»? Условный тег is_trackback() поможет вам в этом!

Этот условный тег не принимает никаких параметров.

Будучи не очень популярной функцией WordPress, Multisite очень удобен при необходимости. Если вы хотите, чтобы ваш код работал в обычных установках WordPress и вел себя по-разному в установках с несколькими is_multisite() тег is_multisite() может помочь вам определить, включена ли поддержка нескольких is_multisite() .

Этот условный тег не принимает никаких параметров.

Допустим, вы разрабатываете плагин, и если Multisite включен, плагин требует другого класса от вашего плагина. Вот что вы делаете:

1
2
3
4
5
6
7
8
9
<?php
 
if ( is_multisite() ) {
 
    require_once( ‘path/to/multisite-class.php’ );
 
}
 
?>

Иногда вы можете захотеть, чтобы ваш код знал, отображается ли страница архива для пользовательского типа записи (или нескольких пользовательских типов публикации, или любого другого пользовательского типа записи). Условный тег is_post_type_archive() делает именно это: он проверяет, относится ли запрос к странице архива для пользовательского типа записи.

Этот условный тег имеет только один параметр:

  • $post_types (массив / строка, необязательно): имя типа записи или массив имен типов записей. (По умолчанию: нет)

В этой части мы рассмотрели еще один пакет из 65 задокументированных условных тегов в WordPress. В следующих частях мы рассмотрим оставшиеся 26. Если у вас есть какие-либо вопросы или комментарии, поделите их ниже — и если вам понравилась эта статья, не забудьте поделиться ею!

Увидимся в следующей части!