Шпаргалка по программированию для WordPress
30 марта 2018
Андрей Курпас
Это статья-шпаргалка с примерами по программированию для WordPress. Здесь для удобства я собрал приемы и часто используемые мной функции при программировании. Статья будет пополняться по мере необходимости.
Оглавление
Раздел
// Чтобы шорткод работал, нужно добавить его функцию в файл 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');
$tx = do_shortcode('[dload_but1]'); // присвоит переменной html-код - результат выполнения шорткода
$tx2 = do_shortcode('[dload_but3 lnk="https://google.com"]Текст на кнопке[/dload_but3]'); // закрывающийся шорткод тоже можно
// Вызов стандартной 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;
}
// Картинка 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 . '"/>'; }
?>
echo antispambot('mymail@site.ru'); // функция заменит буквы адреса html-сущностями так, что спам-боты не смогут разобрать email-адрес.
ABSPATH // путь к корневому каталогу WordPress со слэшем на конце, например: /web/site.ru/www/
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(); // возвращает Отрывок текущего поста как есть
// эту функцию нужно добавить в 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)) {}
$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 родительской категории
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 {}
$ctt = get_categories(array('parent' => 7, 'hide_empty' => 1)); // получит все содержащие посты подкатегории принадлежащие родительской категории с id = 7
$kpu = count($ctt); // количество подкатегорий
foreach ($ctt as $vl) {
$id = $vl->term_id; // id подкатегории
}
$a1 = get_category_parents($id, false, ' - '); // выведет для рубрики Алкогольные с $id, например: Рецепты - Напитки - Алкогольные
$a2 = get_category_parents($id, true, ' > '); // выведет для рубрики Алкогольные с $id, например: Рецепты > Напитки > Алкогольные - названия рубрик в виде ссылок на них
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 подкатегории
}
// при подсчете учитываются ситуации, когда один пост может принадлежать нескольким подкатегориям
$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; // количество комментариев у поста
}
// 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);
$lnk = get_category_link($mss[0]); // получит ссылку на категорию (начиная от https://... и т. д.)
$content = apply_filters('the_content', get_the_content()); // получить текст поста
$a = get_the_author(); // получить имя автора поста
$kl = wp_count_posts()->publish; // количество опубликованных постов
// вывод заданного кол-ва постов в заданных категориях
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');
if ($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');
Поделиться статьей: