Информация Плюшки файла functions.PHP от 24 ноября 2016 для Wordpress: 4.7 и выше

DzSoft

3T
Регистрация
13 Сен 2007
Сообщения
357
Реакции
293
Думаю старые функции уже можно закрывать. Ибо, что-то не работает уже с изменением и усовершенствованием WordPress (хорошо сказал :D).
Не много правил:
Тут выкладываются только плюшки
ВНИМАНИЕ!
все обсуждения, вопросы будут удалены и расценены, как спам.
БАН ДАЮ БЕЗ ПРЕДУПРЕЖДЕНИЯ СОГЛАСНО ПРАВИЛАМ ФОРУМА
Приступим.
 
Последнее редактирование:

DzSoft

3T
Регистрация
13 Сен 2007
Сообщения
357
Реакции
293
Я долго искал/выбирал решение, как освободить/сэкономить место на хостинге при парсинге/создание новостей
и вот решение:


Отключаем создание ненужных превью картинок в WordPress


1 выясняем какие картинки создаются у нас при создании/парсинге новостей
Чтобы узнать какие размеры зарегистрированы на сайте, добавьте следующий код в темы header.php или footer.php. Так вы увидите какие на сайте существуют размеры и как они называются.
PHP:
<?
/**
* Получает информацию обо всех зарегистрированных размерах картинок.
*
* @global $_wp_additional_image_sizes
* @uses   get_intermediate_image_sizes()
*
* @param  boolean [$unset_disabled = true] Удалить из списка размеры с 0 высотой и шириной?
* @return array Данные всех размеров.
*/
function get_image_sizes( $unset_disabled = true ) {
    $wais = & $GLOBALS['_wp_additional_image_sizes'];

    $sizes = array();

    foreach ( get_intermediate_image_sizes() as $_size ) {
        if ( in_array( $_size, array('thumbnail', 'medium', 'medium_large', 'large') ) ) {
            $sizes[ $_size ] = array(
                'width'  => get_option( "{$_size}_size_w" ),
                'height' => get_option( "{$_size}_size_h" ),
                'crop'   => (bool) get_option( "{$_size}_crop" ),
            );
        }
        elseif ( isset( $wais[$_size] ) ) {
            $sizes[ $_size ] = array(
                'width'  => $wais[ $_size ]['width'],
                'height' => $wais[ $_size ]['height'],
                'crop'   => $wais[ $_size ]['crop'],
            );
        }

        // size registered, but has 0 width and height
        if( $unset_disabled && ($sizes[ $_size ]['width'] == 0) && ($sizes[ $_size ]['height'] == 0) )
            unset( $sizes[ $_size ] );
    }

    return $sizes;
}

die( print_r( get_image_sizes() ) );
?>
Теперь зайдите на сайт и вы увидите такой массив:
Array
(
[thumbnail] => Array
(
[width] => 150
[height] => 150
[crop] => 1
)

[medium] => Array
(
[width] => 300
[height] => 300
[crop] =>
)

[medium_large] => Array
(
[width] => 768
[height] => 0
[crop] =>
)

[large] => Array
(
[width] => 1024
[height] => 1024
[crop] =>
)

[shop_thumbnail] => Array
(
[width] => 180
[height] => 180
[crop] => 1
)

[shop_catalog] => Array
(
[width] => 300
[height] => 300
[crop] => 1
)

[shop_single] => Array
(
[width] => 600
[height] => 600
[crop] => 1
)

[pw-page-box] => Array
(
[width] => 360
[height] => 240
[crop] => 1
)

[pw-inline] => Array
(
[width] => 100
[height] => 70
[crop] => 1
)

[pw-latest-news] => Array
(
[width] => 360
[height] => 204
[crop] => 1
)

)
1

2. открываем functions.php и вставляем туда код.
Этот вариант более полный, потому что он выключает размеры в нескольких местах, а не только во время загрузки изображения в папку uploads.
PHP:
## отключаем создание миниатюр файлов для указанных размеров
add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ){
    // размеры которые нужно удалить
    return array_diff( $sizes, array(
        'thumbnail',
        'medium',
        'medium_large',
        'large',
        'shop_thumbnail',
        'shop_catalog',
        'shop_single',
        'pw-page-box',
        'pw-inline',
        'pw-latest-news',
    ) );
}
}

Класс... теперь у вас не будут создаваться ненужные миниатюры.

И самое сочное: Плагин (не используйте плагин без выше указанного кода, а то потрёт всё)
Если вы вносите изменения на уже рабочем сайте с загруженными картинками. То можно воспользоваться плагином Для просмотра ссылки Войди или Зарегистрируйся, чтобы удалить все копии и оставить только оригиналы и создать копии заново, на основе новых настроек.
29320dba98.jpg
Как видно на скрине размеры которые были заявлены в functions.php не создаются, а удаляются.
в конце всей операции выдаст сообщение:
Все готово! Для 3097 изображения(ий) были созданы миниатюры за 3815 сек. Не удалось создать миниатюры для 166 изображения(ий). Чтобы попробовать пересоздать неудавшиеся миниатюры
p.s.: В моём случаи я выиграл 2,5 ГБ :)
 
Последнее редактирование:

DzSoft

3T
Регистрация
13 Сен 2007
Сообщения
357
Реакции
293
Задался вопросом о том, что когда приходит письмо через плагин CF7 отправитель является wordpress@mysite.ru
Порылся в интернете, нашёл занятное решение.

Изменить данное поведение движка можно, добавив следующий код в файл functions.php вашей темы:

PHP:
//изменение имени и email писем start
function change_fromemail($email){return 'noreply@mysite.ru';}
function change_fromname($name){return 'New name';}
add_filter('wp_mail_from', 'change_fromemail');
add_filter('wp_mail_from_name', 'change_fromname');
//изменение имени и email писем end

Где "New name" это имя, а "noreply@mysite.ru" это email.
 

aniche42

Писатель
Регистрация
12 Янв 2015
Сообщения
2
Реакции
0
Вот недавно заметил, что когда создаешь sidebar, и в него вставляешь пустой Текстовый Виджет, например с номером телефона, wp добавляет много лишних пробелов (<a href:"tel: 555-555 "> 555-555 </a>), поэтому использую такую функцию

PHP:
function clean_widget($widget_name){
    ob_start();
    dynamic_sidebar($widget_name);
    $out = ob_get_contents();
    ob_end_clean();
    $clean_text_without_backspaces=trim($out);
    echo $clean_text_without_backspaces;
}

а выводится sidebar без пробелов примерно таким образом
PHP:
<?php echo clean_widget('phone'); ?>
 
Последнее редактирование модератором:

areshin71

Профессор
Регистрация
19 Сен 2015
Сообщения
109
Реакции
42
Выводим описание категорий woocommerce на всех страницах пагинации
Добавить в functions.php

PHP:
/* Display WooCommerce product category description on all category archive pages */

function my_theme_woocommerce_taxonomy_archive_description() {
  if ( is_tax( array( 'product_cat', 'product_tag' ) ) && get_query_var( 'paged' ) != 0 ) {
  $description = wc_format_content( term_description() );
  if ( $description ) {
  echo '<div class="term-description">' . $description . '</div>';
  }
  }
}
add_action( 'woocommerce_archive_description', 'my_theme_woocommerce_taxonomy_archive_description');
 
Последнее редактирование модератором:

betam

Создатель
Регистрация
4 Окт 2017
Сообщения
33
Реакции
16
Чтобы на странице checkout спрятать лишние поля, не обязательно ставить плагины, достаточно добавить в functions.php
PHP:
add_filter('woocommerce_checkout_fields','bp_rename_field');
function bp_rename_field ($fields){
    unset($fields['billing']['billing_first_name']);
        unset($fields['billing']['billing_last_name']);
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
        unset($fields['billing']['billing_phone']);
        unset($fields['order']['order_comments']);
        unset($fields['billing']['billing_email']);
        unset($fields['account']['account_username']);
        unset($fields['account']['account_password']);
        unset($fields['account']['account_password-2']);


    return $fields;
}

То что нужно оставить, комментируем или удаляем
 

betam

Создатель
Регистрация
4 Окт 2017
Сообщения
33
Реакции
16
А еще вместо плагинов типа Cyr-to-Lat (если заголовок написан кириллицей, то и путь(slug) получается кириллицей. Данная функция заменяет в пути кириллицу на латиницу) я делаю так:
добавить в functions.php
PHP:
function rutranslit($title) {
    $chars = array(
//rus
        "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
        "Е"=>"E","Ё"=>"YO","Ж"=>"ZH",
        "З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L",
        "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
        "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"KH",
        "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"",
        "Ы"=>"Y","Ь"=>"","Э"=>"YE","Ю"=>"YU","Я"=>"YA",
        "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
        "е"=>"e","ё"=>"yo","ж"=>"zh",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"kh",
        "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
        "ы"=>"y","ь"=>"","э"=>"ye","ю"=>"yu","я"=>"ya",
//spec
        "—"=>"-","«"=>"","»"=>"","…"=>"","№"=>"N",
        "—"=>"-","«"=>"","»"=>"","…"=>"",
        "!"=>"","@"=>"","#"=>"","$"=>"","%"=>"","^"=>"","&"=>"",
//ukr
        "Ї"=>"Yi","ї"=>"i","Ґ"=>"G","ґ"=>"g",
        "Є"=>"Ye","є"=>"ie","І"=>"I","і"=>"i",
//kazakh
        //"Ә"=>"A","Ғ"=>"G","Қ"=>"K","Ң"=>"N","Ө"=>"O","Ұ"=>"U","Ү"=>"U","H"=>"H",
        //"ә"=>"a","ғ"=>"g","қ"=>"k","ң"=>"n","ө"=>"o", "ұ"=>"u","h"=>"h"
    );

        if (seems_utf8($title)) $title = urldecode($title);
        $title = preg_replace('/\.+/','.',$title);
        $r = strtr($title, $chars);
        return $r;
    }
    add_filter('sanitize_file_name','rutranslit');
    add_filter('sanitize_title','rutranslit');
<-------------- добавлено через 495 сек. -------------->
Ну и еще простой способ добавить кнопку "Поделиться" не прибегая к плагинам
PHP:
add_filter( 'the_content', 'grpd_post_sharing' );
function grpd_post_sharing($content) {
    $yashare = '<script src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js"></script>
    <script src="//yastatic.net/share2/share.js"></script>
    <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir,gplus,twitter,evernote,pocket,viber,whatsapp,skype,telegram" data-counter=""></div>';
    if (is_single())
        return $content . $yashare; // если нужно выводить кнопки в начале, поменяйте 2 переменные местами
        else return $content; // проверка для остальных типов страниц
}
 
Последнее редактирование:

DzSoft

3T
Регистрация
13 Сен 2007
Сообщения
357
Реакции
293
Как убрать сплит сообщение. Я воспользовался таким костылём
1 определил class данного сплит сообщения у меня это .error, .settings-error.
Все сплит сообщения у меня скрыты и не раздражают.
PHP:
function del_upgrade_nag() {
        echo '<style type="text/css">
                        .error, .settings-error {display: none}
                    </style>';
}
add_action('admin_head', 'del_upgrade_nag');
 

andmak

Создатель
Регистрация
13 Июн 2010
Сообщения
10
Реакции
1
Не всегда новомодные фишки :dead: нужны использую для полого отключения Emoji дзей

PHP:
    add_action('after_setup_theme', 'start_cleanup');
endif;
/**
* Clean up head.+
* ----------------------------------------------------------------------------
*/

if (!function_exists('cleanup_head')) :
    function cleanup_head()
    {

        /**
         * Disable Emoji
         */
            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();
                }
            }

    }
endif;
 

X78wh-i80

Постоялец
Регистрация
15 Фев 2018
Сообщения
64
Реакции
33
Небольшая функция для перенаправления поиска на другой сайт (т.е. вводите поисковый запрос на своем сайте,а функция перебрасывает вас на указанный в функции сайт(Для просмотра ссылки Войди или Зарегистрируйся) и выдает результат по запросу).
PHP:
function custom_redirect_search() {
    if (is_search() && !empty($_GET['s'])) {
        wp_redirect('http://example-точка-com'.("/search/").urlencode(get_query_var('s')));
        exit();
    }
}
add_action('template_redirect', 'custom_redirect_search' );
 
Сверху