Полезные хаки для файла functions.php

В данной статье мы рассмотрим полезные хаки для WordPress, которые позволяют выполнить интересные действия с темой. Весь код, представленный ниже, необходимо добавить в файл functions.php. Сразу хочу заметить: выполнять это лучше на локальном сервере, поскольку любая ошибка — и вам придется вручную редактировать файл functions.php через FTP.

Отключить уведомления о необходимости обновления WordPress для пользователей, не являющихся администраторами

Как только появляется новая версия WordPress, пользователи, не являющиеся администраторами, получают уведомление, в котором сообщается, что они должны оповестить администратора ресурса о необходимости обновления системы. Если вы по каким-либо причинам не хотите, чтобы это уведомление выводилось на экран для всех пользователей, за исключением администратора, вы можете легко удалить его с помощью следующего сниппета:

   global $user_login;
   get_currentuserinfo();
   if ($user_login !== "admin") { // измените admin на имя пользователя, который будет получать уведомления
    add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
    add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
   }

Удалить ненужный контент из wp_head

Тег шаблонов wp_head добавляет много всякой ерунды. Удалить этот мусор можно с помощью следующего сниппета:

remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);   

Отключить скачок при нажатии «Read more» («Читать далее»)

Когда вы щелкаете по «Read more», вы автоматически переходите к определенному участку статьи, на котором вы теоретически могли остановиться. Иногда это раздражает, особенно, если вы не читали анонс, а вам уже предлагают читать дальше с определенного места статьи. Чтобы убрать раздражающий скачок, достаточно разместить следующий сниппет:

function no_more_jumping($post) {
 return '<a href="'.get_permalink($post->ID).'" class="read-more">'.'Continue Reading'.'</a>';
}
add_filter('excerpt_more', 'no_more_jumping');  

Разрешить пользователям с ролью «contributor» загружать файлы

Резрешать пользователям загружать файлы — довольно рискованное действие, однако иногда это просто необходимо. Чтобы предоставить посетителям с ролью «contributor» эту возможность, достаточно разместить следующий код:

if ( current_user_can('contributor') && !current_user_can('upload_files') )
    add_action('admin_init', 'allow_contributor_uploads');
 
function allow_contributor_uploads() {
    $contributor = get_role('contributor');
    $contributor->add_cap('upload_files');

Автоматически включать древовидные комментарии

Древовидные комментарии по умолчанию выключены. Чтобы исправить это, достаточно добавить следующий код:

function enable_threaded_comments(){
 if (!is_admin()) {
  if (is_singular() AND comments_open() AND (get_option('thread_comments') == 1))
   wp_enqueue_script('comment-reply');
  }
}
add_action('get_header', 'enable_threaded_comments');

Настройка футера для секции администратора

Не нравится надпись «Powered by WordPress»? Измените ее! Сделать это можно с помощью следующего хака:

function custom_admin_footer() {
 echo 'Gotta love <a href="http://example.com">ссылка</a>';
}
add_filter('admin_footer_text', 'custom_admin_footer');

Открыть для поиска произвольные типы записей

Поиск, существующий в WordPress, не настолько хорош, как кажется: он не включает в себя по умолчанию пользовательские типы записей. Вы можете добавить собственные произвольные типы записей к поиску WordPress с помощью следующего хака:

function searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'site','plugin', 'theme','person' )); }
 return $query;
}
add_filter( 'the_search_query', 'searchAll' );

Отключить уведомления об обновлении неактивных плагинов

Ненавижу, когда в разделе обновления появляются цифры, указывающее на то, что необходимо обновить какой-нибудь плагин, а когда посещаешь соответствующую секцию, то видишь, что обновления требует плагин, который сейчас деактивирован! Вы можете легко подкорректировать вывод цифр для плагинов с помощью простого хака (выводиться будут уведомления об обновлении только для активных плагинов):

function update_active_plugins($value = '') {
    /*
    The $value array passed in contains the list of plugins with time
    marks when the last time the groups was checked for version match
    The $value->reponse node contains an array of the items that are
    out of date. This response node is use by the 'Plugins' menu
    for example to indicate there are updates. Also on the actual
    plugins listing to provide the yellow box below a given plugin
    to indicate action is needed by the user.
    */
    if ((isset($value->response)) && (count($value->response))) {
 
        // Get the list cut current active plugins
        $active_plugins = get_option('active_plugins');    
        if ($active_plugins) {
 
            //  Here we start to compare the $value->response
            //  items checking each against the active plugins list.
            foreach($value->response as $plugin_idx => $plugin_item) {
 
                // If the response item is not an active plugin then remove it.
                // This will prevent WordPress from indicating the plugin needs update actions.
                if (!in_array($plugin_idx, $active_plugins))
                    unset($value->response[$plugin_idx]);
            }
        }
        else {
             // If no active plugins then ignore the inactive out of date ones.
            foreach($value->response as $plugin_idx => $plugin_item) {
                unset($value->response);
            }          
        }
    }  
    return $value;
}
add_filter('transient_update_plugins', 'update_active_plugins');    // Hook for 2.8.+
//add_filter( 'option_update_plugins', 'update_active_plugins');    // Hook for 2.7.x

Запретить размещение обратных ссылок, указывающих на свой блог

Еще один ненавистный момент — появление обратных ссылок, когда вы ссылаетесь на что-либо, опубликованное на своем же сайте. Отключить это можно следующим кодом:

function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, $home ) )
            unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' ); 

Использование шорткодов в виджетах

В виджетах не могут использоваться шорткоды… до тех пор, пока вы не разместите следующий сниппет:

if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}

Примечание: сам я лично проверял только некоторые сниппеты, и после одного из них столкнулся с ошибкой, после чего мой сайт перестал открываться. А поскольку на календаре была пятница, да еще и вторая половина дня, добиться чего либо от службы поддержки хостинга мне не удалось (у меня не было доступа к FTP). В итоге блог был недоступен все выходные до понедельника. Так что экспериментируйте с умом! Считайте, что я вас предупредил.

Adding Functionality with functions.php, a Heart of WordPress Theme Development

Блог про WordPress
Комментарии: 7
  1. HotIce

    Про шорт-коды в виджетах не подозревал, что так легко можно это дело порешать. Городились таие огороды, что страшно теперь в function.php заходить. ;) Спасибо.

    ЗЫ: Техподдержка молодцы. Душить таких надо.

  2. Дмитрий (автор)

    Да, техподдержка, конечно, жесть… У них оказывается выходные есть, вот уж не думал. Но хорошо хоть вообще сделали что-то, еще и три дня мне добавили (правда, потому что я сам спросил, что они мне предложат в качестве компенсации). Сами бы они вряд ли хоть что-то бы мне предложили. Из всех парней только один оказался толковым, главный менеджер, он ответил на все мои вопросы, остальные какие-то деревья, просто игнорят то, на что не знают ответа. Еще предложили мне сбросить тему блога через панель клиента, придурки, я им пишу, что много правок вносил в файлы блога вручную, а они твердят — ничего не поменяется, все останется. Кретины, одним словом. Записи может и останутся, а вот мой труд окажется в глубокой заднице.

  3. Дмитрий (автор)

    Кстати, именно благодаря этой статье я и напортачил в функциях. Неполностью скопировал код, вставил, и все повисло. Ну люблю я ковыряться прямо в основном блоге, лень запускать этот wamp :)

  4. HotIce

    Я так и понял, что эта статья и была причиной. По живому я только в стили лажу, и то, если простые изменения. В основном на полигон, и там уже все проверяю.

    Я вот только не совсем понял, что подразумевается под "сбросить тему"? Поверху накатить оригинальный "Twenty Ten"?

  5. Дмитрий (автор)

    Сбросить до базового состояния все файлы темы Twenty Ten. То есть все, что хранится в базе данных, останется, а любые изменения в файлах сотрутся.

  6. 2web

    Хорошая статья, утащил себе.

    + ретвитнул

  7. HotIce

    Орлы, чего тут скажешь. Один вменяемый менеджер в окружении деревьев — это жесть. Вот так и познается реальная ценность хостинга, когда косяк наступает, и надо его победить..

    А говорящие пиломатериалы уверяют что если все позатирать, то будут ништяки. Скверно.

    Желаю больше с таким не сталкиваться.

Добавить комментарий для Architect Of Ruin Отменить ответ

Получать новые комментарии по электронной почте.