Статьи

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

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

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

Если вы разрабатываете для WordPress Multisite, в конце концов наступит момент, когда вам нужно будет определить основной сайт. Условный тег is_main_site поможет вам в этом: Он определяет, является ли данный идентификатор сайта основным сайтом сети.

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

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

При создании пользовательского меню навигации вам необходимо указать «местоположение меню» с двумя параметрами функции (ей) register_nav_menu(s) (s). Условный тег has_nav_menu() проверяет, есть ли пользовательское меню, назначенное пользователю для данного местоположения.

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

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

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

1
2
3
4
5
6
7
8
9
<?php
 
if ( has_nav_menu( ‘mytheme-footer-menu’ ) ) {
 
    wp_enqueue_script( ‘mytheme-footer-menu-js’, ‘path/to/mytheme-footer-menu.js’, array( ‘jquery’ ) );
     
}
 
?>

Подобно is_plugin_active() , is_plugin_active_for_network() тег is_plugin_active_for_network() определит, является ли данный плагин активным … в установке с несколькими сайтами. Это может быть полезно, если ваш код должен знать, активен ли другой плагин по всей сети, а не по одному сайту.

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

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

Один из наиболее часто используемых условных тегов — comments_open() . С помощью этой функции в вашем операторе if вы можете определить, включены ли комментарии в текущем сообщении.

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

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

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

1
2
3
4
5
6
7
8
9
<?php
 
if ( comments_open() ) {
 
    echo ‘<div class=»comments-warning»><strong>’ .
 
}
 
?>

Многие темы WordPress используют боковые панели для отображения содержимого виджета. Но если вы разрабатываете плагин или тему и хотите определить неиспользуемые боковые панели, вы можете использовать is_dynamic_sidebar() тег is_dynamic_sidebar() — он проверяет, активна ли боковая панель и используются ли в ней какие-либо виджеты.

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

Я думаю, что большинство сайтов WordPress работают только с одним пользователем. Корпоративным веб-сайтам обычно не требуется более одного пользователя, а в Интернете полно «личных блогов» (что хорошо, не поймите меня неправильно). Однако вы можете проверить, опубликовали ли сообщения более одного автора. Если это так, is_multi_author() может помочь вам обнаружить установки WordPress с несколькими авторами.

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

Допустим, вы создаете плагин только для блогов с несколькими авторами и хотите предупредить отдельных авторов, что этот плагин не будет работать для них. Вот что вы делаете:

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

Если вы по- прежнему используете трекбэки по какой-либо причине (или вам нужен плагин для работы с действительно старыми блогами), вы можете определить, включены ли трекбэки и эхо-запросы в конкретном посте (или отображаемом посте) с помощью pings_open() Условный тег.

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

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

Я до сих пор люблю каналы, но в настоящее время они являются устаревшей частью Интернета. И WordPress использует их тоже: в своей основе он поддерживает четыре разных типа каналов. Если вы хотите, чтобы ваша функция знала, когда она работает в фиде, вы можете использовать is_feed() тег is_feed() — он проверяет, является ли текущий запрос фидом.

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

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<?php
 
// Usage: [feedonly]Hey there, feed readers![/feedonly]
// Source: http://www.wpbeginner.com/wp-tutorials/how-to-create-feed-only-content-in-wordpress-with-shortcode/
 
add_shortcode( ‘feedonly’, ‘feedonly_shortcode’ );
 
function feedonly_shortcode( $atts, $content = null ) {
 
    if ( is_feed() ) {
         
        return $content;
         
    }
 
}
 
?>

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

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

Обычно для вошедших в систему пользователей запускается другой код: это может быть новый пункт меню, это может быть дополнительное поле для комментариев или совершенно другой дизайн веб-сайта. В любом случае, вы можете обнаружить вошедших в систему пользователей с помощью is_user_logged_in() .

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

Допустим, вы хотите приветствовать своих пользователей не так, как посетители. Вот что вы делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
 
if ( is_user_logged_in() ) {
 
    $current_user = wp_get_current_user();
 
    echo __( ‘Good to see you’, ‘translation-domain’ ) .
     
} else {
 
    _e( ‘Welcome to our website!’, ‘translation-domain’ );
 
}
 
?>

Работа с этим условным тегом очень проста: вы передаете идентификатор записи в качестве параметра, а условный тег возвращает значение TRUE если вложение сообщения является файлом JPG, JPEG, GIF или PNG (и FALSE если это не так).

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

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

Почему «фактически требуется» и «технически необязательно»? Поскольку по умолчанию он равен 0, это означает, что если вы используете этот условный тег без его параметра, он попытается вернуть сообщение, которое не существует.

В некоторых сценариях было бы неплохо проверить, используется ли определенный пользовательский тип записи. (Например, если вы создаете плагин для портфолио, вы можете попытаться скопировать записи из часто используемого имени типа записи для портфелей.) Для этого вы можете использовать post_type_exists() тег post_type_exists() .

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

  • $post_type (string, обязательный): имя типа записи. (По умолчанию: нет)

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

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

Некоторые функции WordPress решают is_new_day() проблемы, и is_new_day() является одной из них: этот конкретный is_new_day() тег возвращает TRUE если день текущего сообщения отличается от предыдущего.

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

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

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