10 хуков для Вордпресс
Страницы: 1 2 3 4 5 След.
10 хуков для Вордпресс, Небольшой список полезных хуков для Вордресс
Всем привет. Подготовил небольшой список рабочих хуков для Вордпресс. Все решения не мои, взяты из открытых компетентных источников. Сам лично их внедрил на все свои сайты и все ГУД. Чем полезно? Многие решения позволяют обходиться без плагинов - это я считаю важно! Может для кого-то ниже перечисленное не будет новостью, но тем не менее найдутся нуждающиеся. Чтобы не повторяться в каждом комментарии, представленные коды необходимо вставлять в файл function.php Вашей темы. 

Итак, поехали...

1) Чистим хедер ВП от лишнего хлама

Код
remove_action('wp_head','feed_links_extra', 3); // Убираем ссылки на RSS категорий
remove_action('wp_head','feed_links', 2); // Убираем ссылки на основной RSS и комментарии
remove_action('wp_head','rsd_link');  // Really Simple Discovery
remove_action('wp_head','wlwmanifest_link'); // Windows Live Writer
remove_action('wp_head','wp_generator');  // Скрываем версию Wordpress
remove_action('wp_head', 'print_emoji_detection_script', 7); // Скрываем хуки эмоджи
remove_action('wp_print_styles', 'print_emoji_styles'); // Скрываем хуки эмоджи
remove_action( 'wp_head', 'rest_output_link_wp_head'); // Удаление JSON API ссылок
remove_action( 'wp_head', 'wp_oembed_add_discovery_links'); // Удаление JSON API ссылок
remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 ); // Удаление JSON API ссылок
remove_action('wp_head', 'plugin_function_here'); // Скрываем хуки плагинов
remove_action( 'wp_head','wp_syntax_head'); // Скрываем подсветку синтаксиса кода
remove_action('wp_head','wp_shortlink_wp_head', 10, 0 ); // Скрываем короткую ссылку
 

2) Закрываем доступ к RSS

В предыдущем коде мы спрятали RSS из хедера, но тем не менее не закрыли к нему доступ вида http://ваш_домен.ru/feed/. Может кто-то предпочтет, чтобы сайт не сканировался и так далее, для этого внедряем следующее:

Код
function fb_disable_feed() {
wp_redirect(get_option('siteurl')); //будет осуществляться редирект на главную страницу Вашего сайта
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
add_action('do_feed_rss2_comments', 'fb_disable_feed', 1);
add_action('do_feed_atom_comments', 'fb_disable_feed', 1);
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'rsd_link' );

3) Регистрируем метки для страниц без плагина (опциональная штука, мне пригодилась)

Код
function true_apply_tags_for_pages(){
add_meta_box( 'tagsdiv-post_tag', 'Теги', 'post_tags_meta_box', 'page', 'side', 'normal' ); // сначала добавляем метабокс меток
register_taxonomy_for_object_type('post_tag', 'page'); // затем включаем их поддержку страницами wp
}
add_action('admin_init','true_apply_tags_for_pages');

function true_expanded_request_post_tags($q) {
if (isset($q['tag'])) // если в запросе присутствует параметр метки
$q['post_type'] = array('post', 'page');
return $q;
}
add_filter('request', 'true_expanded_request_post_tags');
 

4) Регистрируем рубрики для страниц без плагина (опциональная штука, мне пригодилась)

Код
function true_apply_categories_for_pages(){
add_meta_box( 'categorydiv', 'Категории', 'post_categories_meta_box', 'page', 'side', 'normal'); // добавляем метабокс категорий для страниц
register_taxonomy_for_object_type('category', 'page'); // регистрируем рубрики для страниц
}
// обязательно вешаем на admin_init
add_action('admin_init','true_apply_categories_for_pages');
function true_expanded_request_category($q) {
if (isset($q['category_name'])) // если в запросе присутствует параметр рубрики
$q['post_type'] = array('post', 'page'); // то, помимо записей, выводим также и страницы
return $q;
}
add_filter('request', 'true_expanded_request_category');
 

5) Выводим определенное кол-во записей в определенной рубрике без плагина (где 20 - это кол-во записей)

Код
function custom_posts_per_page($query){
if(is_archive()){
$query->set('posts_per_page',20);
}
}
add_action('pre_get_posts','custom_posts_per_page');

6) Скрываем отображение записей из определенных категорий с главной страницы (где -79 и -24 заменяем на ID нужных рубрик)
Код
function hidecategory($query) {
if ( $query->is_home ) {
$query->set('cat','-79,-24');
}
return $query;
}
add_filter('pre_get_posts', 'hidecategory');


7) Переносим библиотеку jQuery из хедера в футер (для тех. оптимизации)
Код
add_action('wp_enqueue_scripts', 'true_peremeshhaem_jquery_v_futer');  
function true_peremeshhaem_jquery_v_futer() {  
// снимаем стандартную регистрацию jQuery
wp_deregister_script('jquery');  
// регистрируем для подключения в футере
wp_register_script('jquery', includes_url('/js/jquery/jquery.js'), false, null, true);  
// подключаем
wp_enqueue_script('jquery'); 
}
 


8) Регистрируем шорткоды (можно выводить что угодно и где угодно при помощи шортиков через произвольные поля)

Код
add_shortcode('field', 'shortcode_field');
function shortcode_field($atts){
extract(shortcode_atts(array(
'post_id' => NULL,
), $atts));
if(!isset($atts[0])) return;
$field = esc_attr($atts[0]);
global $post;
$post_id = (NULL === $post_id) ? $post->ID : $post_id;
return get_post_meta($post_id, $field, true);
}




Для вывода через редактор используем:
Код
[field "название поля"]


Для вывода через шаблон используем:

Код
<? echo do_shortcode('[field "название поля"]'); ?>



9) Вывод похожих записей по рубрикам или меткам без плагина (дизайн для отображения можно под себя подогнать через css)

Код
<?php
$categories = get_the_category($post->ID);
if ($categories) {
 $category_ids = array();
 foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; 
 $args=array(
 'category__in' => $category_ids, // вывод по рубрикам
 'post__not_in' => array($post->ID), // исключаем текущую запись
 'showposts'=>8,  //количество выводимых ячеек
 'orderby'=>'rand', // в случайном порядке
 'ignore_sticky_posts'=>1); //исключаем закрепленные посты
 $my_query = new wp_query($args);
 if( $my_query->have_posts() ) {
 echo '<ul>';
 while ($my_query->have_posts()) {
 $my_query->the_post();
?>
<li><a href="<?php the_permalink() ?>"><?php the_post_thumbnail('thumbnail'); ?><br /><?php the_title(); ?></a></li>
<?php
}
echo '</ul>';
}
wp_reset_query();
}
?>

Если Вы хотите сортировать статьи по меткам, то замените строчки:

Код
'category__in' => $category_ids,
на
Код
'tag__in' => $tag_ids,



10) Выводим похожие страницы по меткам (опциональная штука, может пригодиться)

Код
<?
function wpb_related_pages() { 
$orig_post = $post;
global $post;
$tags = wp_get_post_tags($post->ID);
if ($tags) {
$tag_ids = array();
foreach($tags as $individual_tag)
$tag_ids[] = $individual_tag->term_id;
$args=array(
'post_type' => 'page',
'tag__in' => $tag_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=>5 // кол-во похожих страниц
);
$my_query = new WP_Query( $args );
if( $my_query->have_posts() ) {
echo 'Похожие страницы<ul>';
while( $my_query->have_posts() ) {
$my_query->the_post(); ?>
<li><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail('thumb'); ?></a>
<a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</li>
<? }
echo '</ul>';
} else { 
echo "Похожие страницы не найдены";
}
}
$post = $orig_post;
wp_reset_query(); 
}
?>  



Где хотим выводить, вставляем вот это в шаблон (наверняка в page.php)
Код
<?php wpb_related_pages(); ?>


Пока все самое необходимое, что удалось собрать в кучу. Может что-то забыл/пропустил - дополню. Надеюсь будет полезно!
Спасибо, кое-что буду внедрять.
Я как понимаю 3 и 10 пункт идут вместе?
То есть для 10 пункта обязателен 3 пункт?
span4bob, в принципе да. Если функцию для создания меток к страницам не зарегистрируем, то ничего не будет работать. Но кто-то для генерации меток к страницам использует плагин типа Simple Tags или что-то аналогичное. А пункт 3 как раз решение без плагинов.
Цитата
Egor2014 пишет:
5) Выводим определенное кол-во записей в определенной рубрике без плагина (где 20 - это кол-во записей)
is_archive() - будет по 20 во всех рубриках, а так же во всех архивах(теги, автор, дата).
Александр, Сам лично проверял только в рубриках и метках - работает. На счет авторов и так далее не могу сказать, не проверял. И еще: эта функция независима от настроек блога по кол-ву вывода записей на главной странице.
Спасибо 7 возможно пригодится
Цитата
WGN пишет:
Спасибо 7 возможно пригодится

А не проще открыть файл header.php, вырезать скрипты и вставитьв файл footer.php?)
Цитата
Иван пишет:
А не проще открыть файл header.php, вырезать скрипты и вставитьв файл footer.php?)
Возможно:confused:
Цитата
Иван пишет:
Цитата
WGN пишет:
Спасибо 7 возможно пригодится

А не проще открыть файл header.php, вырезать скрипты и вставитьв файл footer.php?)

Скрипты и стили в шаблонах не находятся на прямую в файле header.php, а подключаются при помощи функции 
Код
<?php wp_head(); ?> 
, находящейся до закрывающего тега </head>. А подключение идет из файла function.php. Просто так вырезать из этого файла не получится (можно накосячить и что-нибудь перестанет работать). Нужно сначала снимать регистрацию и перерегистрировать. Ну конечно если у Вас не самописный шаблон, где все в хедере напрямую лежит.
Кстати, вот еще хук для деригистрации скриптов и css стилей из хедера. 

Внимание, осторожно!!! 

Этой функцией можно круто напортачить, если Вы отключите важные файлы. Поэтому нужно четко понимать, что именно Вы хотите удалять. Стили точно нельзя и другие важные скрипты шаблона. Только методом эксперимента, если Вы подозреваете, что в хедере лежит не задействованная строка/строки кода и замедляет загрузку страницы. Узнать название скриптов и стилей можно через исходник фронтенда (лучше зайти с другого браузера, чтобы Вы были разлогинены, иначе у Вас все скрипты и стили админки засветятся). В скобках функции заменяем названия на Ваши. Мне помогло несколько раз, когда сквозняком проходили 2 строчки скриптов.

Код
//////прячем стили и скрипты из хедера 

add_action( 'wp_enqueue_scripts', 'remove_some_stylesheet', 20 );
function remove_some_stylesheet() {
    wp_dequeue_style('flexslider'); // названия стилей в скобках как есть (без .css)
    wp_dequeue_style('owl-carousel');
    wp_dequeue_style('owl-theme');
    wp_dequeue_style('font-awesome');
    wp_dequeue_style('wp-pagenavi');
 
    wp_deregister_script('superfish.js'); // названия скриптов в скобках
    wp_deregister_script('googlemapapis');
    wp_deregister_script('easing');
    wp_deregister_script('jflickrfeed');
    wp_deregister_script('playlist');
    wp_deregister_script('jplayer');
}
О сколько лишних движух тудасюда.. в топку этот скрипт
До сих пор не решил проблему с 
Удалите код JavaScript и CSS, блокирующий отображение верхней части страницы ([COLOR=#212121]pagespeed/insights[/COLOR])
Но перенеся их, много чего ломается. У кого-нибудь получалось избавиться от этого уведомления без потери функциональности?
Цитата
Mamikonars пишет:
До сих пор не решил проблему с
Удалите код JavaScript и CSS, блокирующий отображение верхней части страницы ( [COLOR=#212121] pagespeed/insights [/COLOR] )
Но перенеся их, много чего ломается. У кого-нибудь получалось избавиться от этого уведомления без потери функциональности?
Не получится. Сервис гугл просит убрать, но как правило в хедере остаются жизненно-важные строки (стили, скрипты, шрифты) без никак. 100 раз пытался.
Еще один полезный хук. Многие на сайтах ВП используют плагин Contact Form 7. Как правило, форма размещается на какой-то определенной странице, например - контакты. Но, скрипт и стили идут сквозняком на всех страницах, даже если формы обратной связи на них нет. Зачем оно нужно? Правильно! Если это Ваш случай, то функция ниже в помощь. Все что нужно будет подключаться только на той странице, где стоит формочка.

Важно!!!

Если форма сквозная (где нибудь в шапке в виде кнопки и всплывающего окна), то это не подойдет.

Код
// Дерегистрация сквозных стилей и скриптов Contact Form 7
 
add_action( 'wp_print_styles', 'aa_deregister_styles', 100 );
function aa_deregister_styles() {
if ( ! is_page( get_theme_mod( "header_contacts") ) ) {
wp_deregister_style( 'contact-form-7' );
}
}
add_action( 'wp_print_scripts', 'aa_deregister_javascript', 100 );
function aa_deregister_javascript() {
if ( ! is_page( get_theme_mod( "header_contacts") ) ) {
wp_deregister_script( 'contact-form-7' );
}
}
if ( !is_admin() ) {  
wp_deregister_script('jquery'); 
}

//////Конец функции
Егор, спасибо за полезную инфу. Можно узнать, в каком файле нужно размещать 9 пункт?
Страницы: 1 2 3 4 5 След.
Похожие темы:
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)
Новые темыОбъявленияСвободное общение
12:53 где много готовых фавиконок 
07:52 Роскомнадзор отказал в регистрации трети блогеров-десятитысячников 
07:51 Как правильно покупать ссылки для поддомена? 
22:59 Webvork - международная товарная СРА сеть с сертифицированными офферами на Европу. 
12:32 «Хлебные крошки» в адресе сайтов исчезнут из результатов поиска Google 
23:27 Adfinity - Ваш надежный партнер в монетизации трафика 
16:55 Инструменты для массового постинга в WordPress 
16:39 Продам аккаунты Gmail USA IP | Gmail MIX IP | Outlook Old 
11:07 Мобильные и Резидентные Прокси Для Соц Сетей | 3 Гб Бесплатно 
11:01 Защитим твой ресурс от блокировки Роскомнадзора 
10:09 BestChange – обменивать электронную валюту можно быстро и выгодно 
06:50 Просто $0.04/IP 9PROXY.COM Резидентные прокси Неограниченная пропускная способность Уникальная политика замены Без чёрного списка 
03:42 A-Parser 1.1 - продвинутый парсер поисковых систем, Suggest, PR, DMOZ, Whois, etc 
22:23 BestX24 - быстрый и безопасный обменник криптовалют и электронных денежных средств 
07:48 США готовят закон для уничтожения пиратских сайтов во всех странах мира 
02:50 Точные прогнозы на футбол 
02:10 [Новая партнерка] Goldbet Partners — прямой рекламодатель одноименного казино Goldbet 
21:19 С юмором по жизни! 
18:15 Telegram уничтожил официальный канал легендарного российского торрент-трекера 
18:19 Уникальный сервис SEO продвижения 
14:45 (затёр сайт)