Полезные WordPress хуки

Полезные хуки по работе с WordPress: фильтры, события и просто полезный PHP-код при разработке сайта на WordPress

Отключение редакций WordPress

Иерархия шаблонов WordPress
// Отключить редакции WP

function my_revisions_to_keep( $revisions ) {
return 0;
}
add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep' );

Отключение 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();
    }
}

Отключение RSS-ленты

// Удаление ссылки RSS-ленты записей, комментариев, категорий и архивов

remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );

Изменить почту в админке WordPress без подтверждения

Иерархия шаблонов 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 файлов

function vc_remove_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'vc_remove_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'vc_remove_wp_ver_css_js', 9999 );

// удаляем <meta name="generator" content="WordPress 1.2.3" />

add_filter('the_generator', '__return_empty_string');

Изменить текст в подвале админки

// изменяем текст в подвале админки

add_filter('admin_footer_text', 'footer_admin_func');
function footer_admin_func () {
    echo 'Разработка темы: <a href="https://only-to-top.ru" target="_blank">Солдатов Николай</a>. Работает на <a href="http://wordpress.org" target="_blank">WordPress</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, '...'); ?>

Второй способ

В functions.php пишем

// Обрезаем 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(']]>', ']]&gt;', $content);
    return $content;
}

Для вывода использовать

<?php echo content(38); ?>

Показать используемый шаблон

Для того чтобы вывести какой шаблон используется на странице, добавим следующий 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;'>👉 $template 👈</div>";
}

Выполнение кода для определенного шаблона страниц - is_page_template

Пример: выполнить код на странице, использующий шаблон collections

<?php if ( is_page_template('page-collections.php') ){ ?>
    // code
<?php } ?>

Пример: выполнить код на всех страницах, кроме kitchens

<?php if ( !is_page_template('page-kitchens.php') ){ ?>
    // code
<?php } ?>

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

<?php if( is_front_page() ) { ?>
    // code
<?php } ?>

Какой тип записи (post_type) используется - get_post_type

Пример: если тип записи collections - то выполнить необходимый PHP-код

<?php
$post_type = get_post_type( $post_id );
if ( $post_type == 'collections' ) {
    // code

};
?>

Ссылки на предыдущий/следующий пост

Данный код будет также отлично выводить ссылки на предыдущую/следующую страницу и для произвольных типов записей

$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>';
} else {
    echo '<div class="prev-page--disable">Back</div>';
};

echo "<span>|</span>";

if ( $next_page->post_title ) { // если существует следующий пост

    echo '<a href="' . get_permalink( $next_page ) . '" title="К посту: ' . esc_attr( $next_page->post_title ) . '" class="next-page">Next</a>';
} else {
    echo '<div class="next-page--disable">Next</div>';
};

Метки для страниц - фильтр display_post_states

Рассмотрим, как добавить свои метки для страниц / записей при помощи фильтра display_post_states

Добавить метку странице post_state
add_filter( 'display_post_states', 'page_descr', 10, 2 );
function page_descr( $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
  • Как скрыть пункты меню в админке WordPress, изменить их порядок - статья
  • Как установить свой логотип при входе в админку WordPress вместо стандартного
Николай
16/10/2019 20:29