Полезные WordPress хуки
Полезные хуки по работе с WordPress: фильтры, события и просто полезный PHP-код при разработке сайта на WordPress.
Отключить редакции WP
# Отключить редакции WP
add_filter("wp_revisions_to_keep", "my_revisions_to_keep");
function my_revisions_to_keep($revisions)
{
return 0;
}
Ограничение количества редакций до 4-х.
# Ограничение редакций WP
add_filter("wp_revisions_to_keep", "my_revisions_to_keep");
function my_revisions_to_keep($revisions)
{
return 4;
}
Отключение RSS-ленты
# Удаление ссылки RSS-ленты записей, комментариев, категорий и архивов
remove_action("wp_head", "feed_links", 2);
remove_action("wp_head", "feed_links_extra", 3);
Отключение dns-prefetch
# Удаление dns-prefetch
remove_action("wp_head", "wp_resource_hints", 2);
Будут удалены следующие строки:
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
<link rel="dns-prefetch" href="//s.w.org" />
Удаление wlwmanifest
Используется для программы Windows Live Writer. Для удаления wlwmanifest используйте следующий код:
# Удаление wlwmanifest
remove_action("wp_head", "wlwmanifest_link");
Удаление ссылки на RSD
Для удаления ссылки на сервис RSD (Really Simple Discovery) используйте следующий код:
# Удаление ссылки на RSD
remove_filter("wp_head", "rsd_link");
Удаление ссылки REST API
# Удаление ссылки на REST API
remove_action("wp_head", "rest_output_link_wp_head", 10);
Удалим из head следующую ссылку:
<link rel="https://api.w.org/" href="http://sitename/wp-json/" />
Удаление rel=’shortlink’
Чтобы удалить <link rel=’shortlink’ href=’https://site.ru/?p=734′ />, используйте следующий код:
// Удаление rel="shortlink"
remove_action('wp_head', 'wp_shortlink_wp_head');
Удаление max-image-preview:large
# Удаление <meta name='robots' content='max-image-preview:large' />
remove_filter('wp_robots', 'wp_robots_max_image_preview_large');
Удаление html { margin-top: 32px !important; }
Удаление блока кода, который добавляет отступ сверху из-за админ-бара.
// Удаление «html { margin-top: 32px !important; }» из header
add_action('get_header', 'remove_admin_bar_margin');
function remove_admin_bar_margin()
{
remove_action('wp_head', '_admin_bar_bump_cb');
}
Отключить/включить админ-бар
Чтобы отключить админ-бар или включить, используйте код в function.php:
add_filter('show_admin_bar', '__return_true'); # Включить
// if (!is_user_logged_in()) {
add_filter('show_admin_bar', '__return_false'); # Отключить
// }
Отключение Emojii
# Отключение Emojii
remove_action("wp_head", "print_emoji_detection_script", 7);
remove_action("admin_print_scripts", "print_emoji_detection_script");
remove_action("wp_print_styles", "print_emoji_styles");
remove_action("admin_print_styles", "print_emoji_styles");
remove_filter("the_content_feed", "wp_staticize_emoji");
remove_filter("comment_text_rss", "wp_staticize_emoji");
remove_filter("wp_mail", "wp_staticize_emoji_for_email");
add_filter("tiny_mce_plugins", "disable_wp_emojis_in_tinymce");
function disable_wp_emojis_in_tinymce($plugins)
{
if (is_array($plugins)) {
return array_diff($plugins, array("wpemoji"));
} else {
return array();
}
}
Отключение wp-block-library-css
Для удаления подключения Gutenberg CSS используйте следующий код:
# Отключение wp-block-library-css
wp_dequeue_style("wp-block-library");
wp_dequeue_style("wp-block-library-theme");
Изменить почту в админке WordPress без подтверждения
# Изменить почту в админке WordPress без подтверждения
remove_action("add_option_new_admin_email", "update_option_new_admin_email");
remove_action("update_option_new_admin_email", "update_option_new_admin_email");
function wpdocs_update_option_new_admin_email($old_value, $value)
{
update_option("admin_email", $value);
}
add_action("add_option_new_admin_email", "wpdocs_update_option_new_admin_email", 10, 2);
add_action("update_option_new_admin_email", "wpdocs_update_option_new_admin_email", 10, 2);
Подтверждать новый e-mail будет не нужно. На почту лишь придёт уведомление о смене почты.
Убрать (скрыть) версию WordPress
# Удалить версии CSS и JS файлов
add_filter("style_loader_src", "vc_remove_wp_ver_css_js", 9999);
add_filter("script_loader_src", "vc_remove_wp_ver_css_js", 9999);
function vc_remove_wp_ver_css_js($src)
{
if (strpos($src, "ver="))
$src = remove_query_arg("ver", $src);
return $src;
}
# Удалить <meta name="generator" content="WordPress 1.2.3" />
add_filter("the_generator", "__return_empty_string");
Удалить иконку комментариев из админ бара WordPress
# Удаление иконки комментариев из админ бара
add_action("admin_bar_menu", "clean_admin_bar", 999);
function clean_admin_bar($wp_admin_bar)
{
$wp_admin_bar->remove_node("comments");
}
Изменить текст в подвале админки
# Изменяем текст в подвале админки
add_filter("admin_footer_text", "footer_admin_func");
function footer_admin_func () {
echo 'Разработка темы: <a href="https://only-to-top.ru" target="_blank">YourName</a>.';
}
Длина обрезки отрывка и изменение последних символов — excerpt_length(), excerpt_more()
Чтобы задать число выводимых слов статьи (по дефолту — 55), существует фильтр excerpt_length а для замены конструкции […] на конце — фильтр excerpt_more.
Код для functions.php
# Длина excerpt
add_filter("excerpt_length", function () {
return 20;
});
# Символы на конце excerpt
add_filter("excerpt_more", function ($more) {
return "...";
});
Обрезать длину the_content()
Чтобы задать число выводимых символов заголовка, нам нужно создать функцию в functions.php и использовать её в файле шаблона.
function trim_title_chars($count, $after)
{
$title = get_the_title();
if (mb_strlen($title) > $count) $title = mb_substr($title, 0, $count);
else $after = "";
echo $title . $after;
}
Использовать так:
<?php trim_title_chars(55, "..."); ?>
Второй способ:
# Обрезаем the_content
# Выводить echo content(80); вместо the_content()
function content($limit)
{
$content = explode(" ", get_the_content(), $limit);
if (count($content) >= $limit) {
array_pop($content);
$content = implode(" ", $content) . ".";
} else {
$content = implode(" ", $content);
}
$content = preg_replace("/[.+]/", "", $content);
$content = apply_filters("the_content", $content);
$content = str_replace("]]>", "]]>", $content);
return $content;
}
Для вывода использовать:
<?= content(38); ?>
Показать используемый шаблон $template
Для того чтобы вывести какой шаблон используется на странице, добавим следующий PHP-код в functions.php:
add_action("wp_head", "show_template");
function show_template()
{
global $template;
echo '<div style="padding:20px;background:#1b5e20;color:#fff;text-align:center;">👉 ' . basename($template) . ' 👈</div>';
}
Показать текущий шаблон WP в консоли JavaScript:
add_action("wp_head", "show_template");
function show_template()
{
global $template;
echo '<script>console.log("👉 ' . basename($template) . ' 👈")</script>';
}
Показать текущий шаблон в админ баре WordPress:
add_action('admin_bar_menu', 'tpl_in_admin_bar');
function tpl_in_admin_bar()
{
global $wp_admin_bar, $template;
$wp_admin_bar->add_menu(array(
'id' => 'wpse-form-in-admin-bar',
'parent' => 'top-secondary',
'title' => '👉 ' . basename($template) . ' 👈'
));
}
Какой тип записи (post_type) используется — get_post_type()
Пример: если тип записи collections — то выполнить необходимый PHP-код.
<?php $post_type = get_post_type($post_id);
if ($post_type == "collections") {
// code
}; ?>
Ссылки на предыдущий/следующий пост
Данный код будет также отлично выводить ссылки на предыдущую/следующую страницу и для произвольных типов записей.
<?php
$prev_page = get_previous_post(); # Получаем объект предыдущего поста
$next_page = get_next_post(); # Получаем объект следующего поста
if ($prev_page->post_title) { # Если существует предыдущий пост
echo '<a href="' . get_permalink($prev_page) . '" title="К посту: "' . esc_attr($prev_page->post_title) . '" class="prev-page">Back</a>';
};
if ($next_page->post_title) { # Если существует следующий пост
echo '<a href="' . get_permalink($next_page) . '" title="К посту: "' . esc_attr($next_page->post_title) . '" class="next-page">Next</a>';
};
?>
Метки для страниц — фильтр display_post_states()
Рассмотрим, как добавить свои метки для страниц / записей при помощи фильтра display_post_states.
add_filter("display_post_states", "admin_post_description", 10, 2);
function admin_post_description($post_states, $post)
{
if ($post->post_type === "page") {
if ($post->post_name === "video") { // Ярлык (slug) страницы
$post_states[] = "Страница 'Преимущества'";
}
if ($post->ID === 293) { // id страницы
$post_states[] = "Страница 'Публикации'";
}
// множественный выбор страниц
if (in_array($post->ID, ["292", "25", "295"])) {
$post_states[] = "Страница ...";
}
}
return $post_states;
}
Дополнительные плюшки:
- Шпаргалка по работе с WordPress.
- Шпаргалка по работе с WooCommerce.
- Шпаргалка по работе с ACF.
- Как скрыть пункты меню в админке WordPress, изменить их порядок — статья.
- Как установить свой логотип при входе в админку WordPress вместо стандартного.
- Подборка лучших плагинов для WordPress на 2021 год.
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Поделиться с друзьями: