Сообщений: 447
Регистрация: Дек 2015
|
#1
16 Сентября 2017 15:04
Всем привет. Подготовил небольшой список рабочих хуков для Вордпресс. Все решения не мои, взяты из открытых компетентных источников. Сам лично их внедрил на все свои сайты и все ГУД. Чем полезно? Многие решения позволяют обходиться без плагинов - это я считаю важно! Может для кого-то ниже перечисленное не будет новостью, но тем не менее найдутся нуждающиеся. Чтобы не повторяться в каждом комментарии, представленные коды необходимо вставлять в файл 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(); ?> |
Пока все самое необходимое, что удалось собрать в кучу. Может что-то забыл/пропустил - дополню. Надеюсь будет полезно!
|