Шпаргалка по программированию для WordPress

Это статья-шпаргалка с примерами по программированию для WordPress. Здесь для удобства я собрал приемы и часто используемые мной функции при программировании. Статья будет пополняться по мере необходимости.

 

Оглавление

 

Раздел

Шорткоды (add_shortcode)

// Чтобы шорткод работал, нужно добавить его функцию в файл functions.php в директории темы Wordpress
// шорткод без параметров [dload_but1]
function dload_but_shkd1($atts) {
 return '<a href="https://google.com">Google</a>';
}
add_shortcode('dload_but1', 'dload_but_shkd1');

// шорткод с параметрами [dload_but2 lnk="" tlt=""] все параметры необязательные, если параметра нет, то используется значение по умолчанию, заданное в функции шорткода
function dload_but_shkd2($atts) {
 extract(shortcode_atts(array("lnk" => '', "tlt" => '',), $atts));
 return '<a href="' . $lnk . '">' . $tlt . '</a>';
}
add_shortcode('dload_but2', 'dload_but_shkd2');

// закрывающийся шорткод с параметрами [dload_but3 lnk=""]Текст на кнопке[/dload_but3] если внутреннего текста нет, то используется значение по умолчанию, заданное в функции шорткода
function dload_but_shkd3($atts, $shortcode_content = null) {
 extract(shortcode_atts(array("lnk" => '',), $atts));
 return '<a href="' . $lnk . '">' . $shortcode_content . '</a>';
}
add_shortcode('dload_but3', 'dload_but_shkd3');

Выполнить шорткод в php (do_shortcode)

$tx = do_shortcode('[dload_but1]'); // присвоит переменной html-код - результат выполнения шорткода

$tx2 = do_shortcode('[dload_but3 lnk="https://google.com"]Текст на кнопке[/dload_but3]'); // закрывающийся шорткод тоже можно

Показать все поля формы комментариев для залогиненного пользователя (comment_form, logged_in_as, comment_form_logged_in, wp_get_current_commenter)

// Вызов стандартной Wordpress функции формы комментариев в файле comments.php, здесь параметр 'logged_in_as' => '' отключает вывод надписи "Вы вошли как Имя Пользователя" для залогиненного пользователя
<?php comment_form(array('comment_notes_after' => '', 'logged_in_as' => '')); ?>

// следующий хук прописываем в файле functions.php
// если пользователь (администратор) залогинен, то принудительно отобразить поля ввода: Автор, email, Сайт и др.
add_filter('comment_form_logged_in', 'filter_function_name_9868', 10, 3) ; 
function filter_function_name_9868 ($args_logged_in,  $commenter,  $user_identity) { 
 $commenter = wp_get_current_commenter();
 $args_logged_in = '
<p class="comment-notes"><span id="email-notes">Ваш адрес email не будет опубликован.</span> Обязательные поля помечены <span class="required">*</span></p>

<p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" maxlength="245" required="required" /></p>

<p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30" maxlength="100" aria-describedby="email-notes" required="required" /></p>

<p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" maxlength="200" /></p>

<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Сохранить моё имя, email и адрес сайта в этом браузере для последующих моих комментариев.</label></p>
 ';
 return $args_logged_in; 
}

Подключить разметку Open Graph в Wordpress

// Картинка ogimage добавляется через произвольное поле Wordpress названное ogimage для каждой статьи или страницы сайта отдельно.

<html xmlns="https://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">

<?php 
if(is_category()) {$ogt = 'object';}
if(is_single() || is_page()) {$ogt = 'article';}
if(is_front_page()) {$ogt = 'website'; $frontp = true;}
if($ogt == '') {$ogt = 'website';}
$blogname = get_bloginfo('name');
?>
<meta property="og:type" content="<?php echo $ogt;?>" />
<meta property="og:title" content="<?php echo wp_get_document_title(); ?>" />
<meta property="og:url" content="<?php echo echo home_url($_SERVER['REQUEST_URI']); ?>" />
<meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="<?php echo $blogname; ?>" />
<?php
if($frontp) {$ogim = 'https://site.ru/logo.png';} // здесь задается ogimage для главной страницы сайта
else {$ogim = trim(get_post_meta($post->ID, 'ogimage', true));}
if (strlen($ogim) > 0) { echo '<meta property="og:image" content="' . $ogim . '"/>'; }
?>

Скрыть email-адрес от спам-ботов (antispambot)

echo antispambot('mymail@site.ru'); // функция заменит буквы адреса html-сущностями так, что спам-боты не смогут разобрать email-адрес.

Путь к корневому каталогу WordPress (ABSPATH)

ABSPATH // путь к корневому каталогу WordPress со слэшем на конце, например: /web/site.ru/www/

Проверить принадлежит ли пост категории (рубрике) (in_category)

in_category(313); // вернет true, если текущий пост принадлежит категории с id равным 313
in_category(313, 202); // вернет true, если пост c id равным 202 принадлежит категории с id равным 313
in_category([1, 2, 3]); // вернет true, если текущий пост принадлежит одной из категорий с id равнымы 1, 2 или 3

Различные проверки

is_category(); // вернет true, если показывается страница категорий
is_category(5); // вернет true, если показывается страница категории с id равной 5
is_single(); // вернет true, если отображается страница записи любого типа записей кроме attachment и page
is_singular(); // вернет true, если отображается страница записи любого типа включая attachment и page
is_single(25); // вернет true, если, отображается запись с id равным 25
is_single(array(25, 27, 34)); // вернет true, если, отображается одна из записей с id равным 25, 27 или 34
is_page([1, 2, 3]); // вернет true, если, отображается одна из страниц с id равным 1, 2 или 3
is_front_page(); // вернет true, если отображается главная (домашняя) страница сайта
is_tag(); // вернет true, если отображается страница Меток
is_author(); // вернет true, если отображается страница с постами автора
is_ssl(); // вернет true, если на загружаемой странице используется защищенный протокол HTTPS (SSL)
has_excerpt(); // вернет true, если у текущего поста есть Отрывок (или в скобках можно указать id любой записи)

Вывод или возврат различной информации в переменную

$post->ID; // то же самое, что get_the_ID(); - возвращает id текущего поста в цикле
get_post_meta($post->ID, 'ogimage', true); // возвращает значение произвольного поля ogimage записи (поста)
get_bloginfo('name'); // возвращает информацию о блоге из настроек
bloginfo('charset'); // выводит на экран кодировку сайта, которая указывается в настройках сайта
bloginfo('description'); // выводит на экран описание сайта, которое указывается в настройках сайта
get_permalink(); // получает постоянную http ссылку на запись (работает только внутри цикла)
home_url($_SERVER['REQUEST_URI']); // получает постоянную http ссылку на открытую в браузере страницу
wp_get_document_title(); // выводит заголовок в формате: Название текущей страницы - Название сайта
wp_title(''); // возвращает заголовок страницы с пустым разделителем
wp_title('|', true, 'right'); // выводит заголовок страницы с разделителем | справа
language_attributes(); // выводит атрибуты для тега html со значениями текущего языка lang="ru-RU"
home_url( '/' ); // возвращает url главной страницы сайта с / в конце
home_url('/', 'https'); // возвращает url главной страницы сайта с протоколом https в начале, если он установлен
the_excerpt(); // выводит Отрывок текущего поста (при этом где нужно добавляет теги <p></p>)
get_the_excerpt(); // возвращает Отрывок текущего поста как есть

Проверить принадлежит ли пост категории (рубрике) и всем вложенным в неё категориям (post_is_in_descendant_category)

// эту функцию нужно добавить в function.php темы Wordpress
// проверка принадлежности поста к категории или любой вложенной в эту категорию категории
function post_is_in_descendant_category( $cats, $_post = null ){
 foreach ( (array) $cats as $cat ) {
  $descendants = get_term_children( (int) $cat, 'category');
  if( $descendants && in_category( $descendants, $_post ) ) {return true;}
 }
 return false;
}

// проверить принадлежит ли пост рубрике с id = 3 и всем вложенным в неё рубрикам
if (post_is_in_descendant_category(3)) {}

Получить данные категории (рубрики) (get_category)

$ctt = get_category(5); // получит данные категории с id = 5
$a1 = $ctt->term_id; // id категории
$a2 = $ctt->name; // имя категории
$a3 = $ctt->category_count; // количество постов принадлежащих категории (посты дочерних категорий не учитываются)
$a4 = $ctt->slug; // слаг категории, например: blyuda-iz-testa
$a5 = $ctt->description; // описание категории
$a6 = $ctt->parent; // id родительской категории

Определить файл шаблона страницы или записи (get_post_meta, _wp_page_template)

if (isset($post->ID)) {$psid = $post->ID;} else {$psid = 0;}
$pgtmpl = '';
// получить шаблон страницы из поля в БД (если у страницы задан шаблон по умолчанию, то поле шаблона в БД пустое)
if ($psid > 0) {$pgtmpl = get_post_meta($psid, '_wp_page_template', true);}
// проверить, является ли шаблон страницы одним из заданных
if ($pgtmpl=='page1.php' || $pgtmpl=='page2.php' || $pgtmpl=='page3.php') {} else {}

Получить все подкатегории у заданной категории (get_categories)

$ctt = get_categories(array('parent' => 7, 'hide_empty' => 1)); // получит все содержащие посты подкатегории принадлежащие родительской категории с id = 7 
$kpu = count($ctt); // количество подкатегорий
foreach ($ctt as $vl) {
 $id = $vl->term_id; // id подкатегории
}

Получить путь до категории, состоящий из предшествующих ей родительских категорий (get_category_parents)

$a1 = get_category_parents($id, false, ' - '); // выведет для рубрики Алкогольные с $id, например: Рецепты - Напитки - Алкогольные
$a2 = get_category_parents($id, true, ' > '); // выведет для рубрики Алкогольные с $id, например: Рецепты > Напитки > Алкогольные - названия рубрик в виде ссылок на них

Получить все категории поста (get_the_category, the_category)

the_category(', '); // сразу выведет все категории поста через запятую со ссылками

$ctt1 = get_the_category($post->ID)[0]; // возвратит первую категорию поста
$a1 = $ctt1->term_id; // id первой категории поста

$ctt = get_the_category($post->ID); // возвратит все категории поста
$kpu = count($ctt); // количество категорий у поста
foreach ($ctt as $vl) {
 $id = $vl->term_id; // id подкатегории
}

Получить все посты категории с учетом дочерних категорий (get_posts)

// при подсчете учитываются ситуации, когда один пост может принадлежать нескольким подкатегориям

$arg = array(
'numberposts' => '-1', // сколько постов показать (-1 - значит все)
'post_status' => 'publish', // только опубликованные посты
'cat' => 8, // только по категории с id = 8 включая подкатегории
);
$mp = get_posts($arg); // получить посты
$a1 = count($mp); // количество постов

foreach($mp as $vl){
 $id = $vl->ID; // id поста
 $cn = $vl->post_content; // текст поста
 $tt = $vl->post_title; // title поста
 $tt = $vl->post_author; // id автора поста
 $tt = $vl->post_date; // дата публикации поста
 $tt = $vl->post_excerpt; // отрывок поста
 $tt = $vl->post_status; // статус поста, например publish для опубликованного поста
 $tt = $vl->comment_status; // открыты ли комментарии поста, open - если открыты
 $tt = $vl->post_name; // слаг поста, например: wordpress-shpargalka
 $tt = $vl->post_type; // тип материала, post - если это статья
 $tt = $vl->comment_count; // количество комментариев у поста
}

Запрос и вывод произвольных постов (get_posts, setup_postdata, wp_reset_postdata)

// setup_postdata($post) идущая первой записью внутри цикла и wp_reset_postdata() идущая после цикла - позволяют сразу выводить данные поста с помощью специальных функций, начинающихся на the_ также они позволяют выводить данные без нарушения хода основного цикла

$arg = array('numberposts' => '5', 'post_status' => 'publish');
$mp = get_posts($arg);
foreach($mp as $post){
 setup_postdata($post); // устанавливаем данные
 ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php the_author(); ?>"></p>
<?php the_content(); ?>
<?php
}
wp_reset_postdata(); // сброс
?>

// получить 2 поста из рубрики с id = 5 исключая пост с id = 7 отсортированных случайно
$arg2 = array('exclude' => '7', 'orderby' => 'rand', 'numberposts' => '2', 'category' => '5');
$mp2 = get_posts($arg2);

// получить пост с id = 9 (если id несколько, то писать так: 9,16,27)
$arg3 = array('include' => '9');
$mp3 = get_posts($arg3);

Получить ссылку на страницу категории по её id (get_category_link)

$lnk = get_category_link($mss[0]); // получит ссылку на категорию (начиная от https://... и т. д.)

Получить данные поста внутри основного цикла (apply_filters, get_the_content, get_the_author)

$content = apply_filters('the_content', get_the_content()); // получить текст поста
$a = get_the_author(); // получить имя автора поста

Узнать количество опубликованных постов (wp_count_posts)

$kl = wp_count_posts()->publish; // количество опубликованных постов

Задать количество выводимых постов в главном цикле только для определённых рубрик (posts_per_page)

// вывод заданного кол-ва постов в заданных категориях
function custom_posts_per_page($query) {
 if ($query->is_main_query()) { // будет применяться только к запросу главного цикла
  if (is_category() && !is_category(array(1,8))){ // все рубрики кроме рубрик с id = 1 или 8
    $query->set('posts_per_page',20); // выводить 20 постов на странице
  }
 }
}
add_action('pre_get_posts','custom_posts_per_page');

Проверить является ли запрос запросом главного цикла (is_main_query)

if ($query->is_main_query()) {
 // код для выполнения
}

Не выводить личные записи (посты) в главном цикле (is_main_query)

// изменяем главный цикл WordPress, чтобы показывать только опубликованные общедоступные записи
function mbm_show_only_publish($query){
 if (is_user_logged_in() && $query->is_main_query()) {
  $query->set( 'post_status', 'publish' );
 }
}
add_action('pre_get_posts','mbm_show_only_publish');

Поделиться статьей:  

Читайте также статьи из ITШпаргалки по программированию:

Поделитесь своим мнением

Правила сообщений

Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Хороший отзыв
Разумно · Дельно · Опытно · Идейно
Яндекс.Метрика
© 2016 - 2024 Хороший отзыв · Разумно · Дельно · Опытно · Идейно