[Инфо] Wordpress: плюшки файла functions.PHP ))

Тема в разделе "Wordpress", создана пользователем Красавчег, 10 окт 2012.

Статус темы:
Закрыта.
Модераторы: DzSoft, Sorcus
  1. Красавчег

    Красавчег Завсегдатай

    Регистр.:
    15 мар 2010
    Сообщения:
    901
    Симпатии:
    297
    Собственно, при разработке шаблонов для Wordpress и сайтов на этой CMS собираются своеобразные плюшки, которые потом часто используются. Решил поделиться. Думаю для новичков это будет полезно, да и сам)) не забуду и не потеряю. Все коды вставляются в файл functions.php в папке установленной темы.

    Итак, что у нас сегодня:

    1. Удаляем всякую байду из хедера страницы, типа версии вашего вордпресса, дополнительных ссылок на RSS, ссылок для всяких сервисов типа Really Simple Discovery, программ Windows Live Writer и т.п. чепуху, которая нам не нужна и использоваться не будет.
    # удаляем всякую байду из head страницы
    remove_action( 'wp_head', 'feed_links_extra', 3 );
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'rsd_link' );
    remove_action( 'wp_head', 'wlwmanifest_link' );
    remove_action( 'wp_head', 'index_rel_link' );
    remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
    remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
    remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 );
    remove_action( 'wp_head', 'wp_generator' );


    2. Удаляем всплывающие подсказки (тег title="") типа: "Просмотреть все записи в рубрике…" из ссылок на категории и теги. Выглядят они достаточно глупо, особенно если мы делаем не блог, а например корпоративный сайт, портфолио и т.п.
    # удаляем title из ссылок категорий и тегов
    function removeTitle($str){
    $str = preg_replace("/title=\".*\"/", '', $str);
    return $str;
    }
    add_filter("wp_list_categories", "removeTitle");
    add_filter("wp_list_pages", "removeTitle");
    add_filter("the_category", "removeTitle");


    3. Удаляем все HTML теги из комментариев, пусть любители) втиснуть ссылку в комментарий отдохнут. Кстати, в интернете широко известен другой способ, но он html-код не удаляет, а тупо делает его в комментариях простым текстом. Меня это не прикалывает, этот вариант - удаляет все теги полностью.
    // удаляем HTML в комментариях при их добавлении.
    function preprocess_comment_striptags($commentdata) {
    $commentdata['comment_content'] = strip_tags($commentdata['comment_content']);
    return $commentdata;
    }
    add_filter('preprocess_comment', 'preprocess_comment_striptags');

    // удаляем HTML в комментариях при показе, если на сайте уже есть комменты с ссылками и т.п.
    function comment_text_striptags($string) {
    return strip_tags($string);
    }
    add_filter('comment_text', 'comment_text_striptags');
     
    MasterON, mischael1, Vitaliik и 14 другим нравится это.
  2. Wolfserker

    Wolfserker Постоялец

    Регистр.:
    23 май 2012
    Сообщения:
    140
    Симпатии:
    78
    думаю к отключаемой байде можно добавить еще такой элемент
    PHP:
    remove_action'wp_head','wp_shortlink_wp_head'10);
     
    Vitaliik, dmitrypro, spyplane и 2 другим нравится это.
  3. Красавчег

    Красавчег Завсегдатай

    Регистр.:
    15 мар 2010
    Сообщения:
    901
    Симпатии:
    297
    Новая партия)) плюшек:

    4. Убираем дурацкие символы [...] в конце кратких анонсов на главной, категориях, архивах, результатах поиска и т.п. (к слову, такие киксы даже у флагманов Перейти по ссылке - прокрутить страницу вниз.) Собственно, мы их не просто убиваем, а меняем на симпатичную ссылку "читать далее.."
    # удаляем дурацкие символы в конце кратких анонсов
    function new_excerpt_more($more) {
    global $post;
    return ' <a href="'. get_permalink($post->ID) . '">читать далее..</a>';
    }
    add_filter('excerpt_more', 'new_excerpt_more');


    5. При навешивании кучи плагинов и прочих свистелок & перделок, хорошо бы видеть, сколько времени занимает генерация страницы, а так же сколько при этом было запросов в базу и использовано памяти. Этот код выводит в футере страницы инфу о времени генерации, запросах и потреблении памяти.
    # выводим время генерации, запросы и потребление памяти
    function usage(){
    printf( ('SQL запросов:%d. Время генерации:%s сек. Потребление памяти:'), get_num_queries(), timer_stop(0, 3) );
    if ( function_exists('memory_get_usage') ) echo round( memory_get_usage()/1024/1024, 2 ) . ' mb ';
    }
    add_filter('admin_footer_text', 'usage');
    add_filter('wp_footer', 'usage');


    6. Удаляем поле "сайт" из формы комментариев. Еще один гвоздик в гроб любителей тискануть ссылку на свой гс. Да я и сам)) хоть и очень редко где-то что-то комментирую, но увидев поле "ваш сайт", как говорится, трудно пройти)) мимо. Так что убираем, нафиг, это искушение:
    # удаляем поле сайт из формы комментариев
    function remove_comment_fields($fields) {
    unset($fields['url']);
    return $fields;
    }
    add_filter('comment_form_default_fields', 'remove_comment_fields');
     
    MasterON, Didi, Varrcan и 3 другим нравится это.
  4. levati

    levati Постоялец

    Регистр.:
    2 апр 2007
    Сообщения:
    103
    Симпатии:
    22
    В плюшки от меня:
    Удаление конструкции
    HTML:
    <p><span id="more..."></span></p>
    из полной статьи.
    В живом виде проявляется в качестве уродливого отступа.
    Фиксим:
    PHP:
    <?php
    function no_more($content) {
    if ( !
    is_feed() && !is_page() && !is_home() && !is_search() && !is_archive() && !is_author() && !is_category() && !is_paged())
    $content preg_replace('(<p><span id=\"more[^>]*></span></p>)'''$content);
    return 
    $content;
    }
    add_filter('the_content''no_more'500);
    ?>
     
    Didi, kuzovbmw, alikk и ещё 1-му нравится это.
  5. 9139530

    9139530 Писатель

    Регистр.:
    11 авг 2011
    Сообщения:
    4
    Симпатии:
    0
    Если вам нужно скрыть некоторые рубрики из вывода на главной
    PHP:
    //Не выводить определенные Рубрики на главной странице сайта!
    function exclude_category($query) {
    if ( 
    $query->is_home ) {
    $query->set('category__not_in', array(81,83,82,85));}
    return 
    $query;
    }
    add_filter('pre_get_posts''exclude_category');

    Где, в моём случае 81,83,82,85 - это ID тех рубрик которые нужно скрыть. думаю как определить Id все знают))
     
  6. Soul.Web

    Soul.Web Писатель

    Регистр.:
    24 ноя 2012
    Сообщения:
    1
    Симпатии:
    4
    Немного плюшек, которые использую. (найдено на просторах интернета)

    PHP:
    // Отключение обновления темы
    remove_action('load-update-core.php','wp_update_themes');
    add_filter('pre_site_transient_update_themes',create_function('$a'"return null;"));
    wp_clear_scheduled_hook('wp_update_themes');

    // Отключение обновления плагинов
    remove_action'load-plugins.php''wp_update_plugins' );
    remove_action'load-update.php''wp_update_plugins' );
    remove_action'admin_init''_maybe_update_plugins' );
    remove_action'wp_update_plugins''wp_update_plugins' );
    add_filter'pre_transient_update_plugins'create_function'$a',
    "return null;" ) );

    // Отключение обновления движка
    remove_action'wp_version_check''wp_version_check' );
    remove_action'admin_init''_maybe_update_core' );
    add_filter'pre_transient_update_core'create_function'$a',
    "return null;" ) );

    // Убираем meta generator
    remove_action('wp_head''wp_generator');

    // Отключаем RSS
    function fb_disable_feed() {
    wp_die__('No feed available,please visit our <a href="'get_bloginfo('url') .'">homepage</a>!') );
    }
    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);


    // Удаляем лишние теги
    remove_filter‘the_content’‘wpautop’ );
    remove_filter‘the_excerpt’‘wpautop’ );

    // Избавляемся от ver в css/js
    function remove_cssjs_ver$src ) {
        if( 
    strpos$src'?ver=' ) )
            
    $src remove_query_arg'ver'$src );
        return 
    $src;
    }
    add_filter'style_loader_src''remove_cssjs_ver'10);
    add_filter'script_loader_src''remove_cssjs_ver'10);
     
    kachi, bravilor, JESUS и ещё 1-му нравится это.
  7. xbreaker

    xbreaker Вверх ногами

    Регистр.:
    15 авг 2007
    Сообщения:
    245
    Симпатии:
    52
    Слишком радикально, по мне - лучше всего использовать ВП Типограф, хотя бы Лайт - он отключит автоР и сам выпилит теги P, там где они не нужны (ох уж эти <p></p>) и оставит их там где они должны быть.

    Выпиливаем админ бар у всех пользователей:
    PHP:
    function disable_admin_bar() {
        
    add_filter'show_admin_bar''__return_false' );
        
    add_action'admin_print_scripts-profile.php',
            
    'hide_admin_bar_settings' );
    }
    add_action'init''disable_admin_bar' );

    В добавок к выше указанному удалению категории с главной, удаляем любую категорию из фида, где 1 - номер категории:
    PHP:
    function filter_feed_cat($query) {
    if (
    $query->is_feed) {
    $query->set('cat','-1');
    }
    return 
    $query;
    }
    add_filter('pre_get_posts','filter_feed_cat');

    Вообще, используя Conditional tags можно исключить любую запись или категорию, навешивая фильтр на pre_get_posts, по аналогии с is_feed.
     
  8. Avrora

    Avrora Постоялец

    Регистр.:
    12 фев 2010
    Сообщения:
    73
    Симпатии:
    48
    Редирект результатов поиска с /?s=query на /search/query/ и редирект на главную если параметр поиска empty
    PHP:
    //Редирект результатов поиска с /?s=query на /search/query/, конвертация %20% на +
    function nice_search_redirect() {
      global 
    $wp_rewrite;
      if (!isset(
    $wp_rewrite) || !is_object($wp_rewrite) || !$wp_rewrite->using_permalinks()) {
        return;
      }

      
    $search_base $wp_rewrite->search_base;
      if (
    is_search() && !is_admin() && strpos($_SERVER['REQUEST_URI'], "/{$search_base}/") === false) {
        
    wp_redirect(home_url("/{$search_base}/" urlencode(get_query_var('s'))));
        exit();
      }
    }

    if (
    current_theme_supports('nice-search')) {
      
    add_action('template_redirect''nice_search_redirect');
    }

    //Редирект на главную если параметр поиска empty
    function request_filter($query_vars) {
      if (isset(
    $_GET['s']) && empty($_GET['s'])) {
        
    $query_vars['s'] = ' ';
      }

      return 
    $query_vars;
    }

    add_filter('request''request_filter');
     
  9. felix0808

    felix0808 Создатель

    Регистр.:
    19 янв 2013
    Сообщения:
    16
    Симпатии:
    0
    народ а как удалить граватар, чтобы WP к нему не обращался?
    установил page speed и там один из пунктов
    Если возможно , удалите цепь переадресаций
    Перейти по ссылке
    Перейти по ссылке
    я этими граватарами не пользуюсь, коменты запрещены
    а как выглядит обращение к этому граватару хз
    вроде закоментил единственную подозрительную строку
    <?php //echo get_avatar( $comment, 40 ); ?>
    но он один фиг на главной и в записях к граватару обращается
     
  10. Avrora

    Avrora Постоялец

    Регистр.:
    12 фев 2010
    Сообщения:
    73
    Симпатии:
    48
    Идем в админку WP. Параметры > Обсуждение > Не показывать аватары
    [​IMG]
     
    felix0808 нравится это.
Статус темы:
Закрыта.