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

DzSoft

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

DzSoft

3T
Регистрация
13 Сен 2007
Сообщения
357
Реакции
293
Решил перенести не очень большую плюшечку (от @Panadina) с Для просмотра ссылки Войди или Зарегистрируйсясюда.
Заменяем стоимость нулевой цены словом.
PHP:
add_filter( 'woocommerce_get_price_html', 'product_price_free_zero_empty', 100, 2 );

function product_price_free_zero_empty( $price, $product ){
if ( '' === $product->get_price() || 0 == $product->get_price() ) {
    $price = '<span class="woocommerce-Price-amount amount">Цену уточняйте</span>';
}
return $price;
}
 
Последнее редактирование:

Kleindberg

Создатель
Регистрация
8 Май 2012
Сообщения
11
Реакции
14
Большинство описанных плюшек интегрировано в плагин Для просмотра ссылки Войди или Зарегистрируйся. Хотелось бы поделиться интересными наработками.

1. Отключение всех обновлений (полезно на сайтах, где не планируется поддержка, например, сдавая проект заказчику)
PHP:
function remove_core_updates(){
    global $wp_version;return(object) array('last_checked'=> time(),'version_checked'=> $wp_version,);
}
add_filter('pre_site_transient_update_core','remove_core_updates');
add_filter('pre_site_transient_update_plugins','remove_core_updates');
add_filter('pre_site_transient_update_themes','remove_core_updates');

2. Добавить поддержку новой галереи товаров от WooCommerce в старую тему:
PHP:
add_action( 'after_setup_theme', 'krutygolov_thumbs' );
function krutygolov_thumbs() {
add_theme_support( 'wc-product-gallery-zoom' );
add_theme_support( 'wc-product-gallery-lightbox' );
add_theme_support( 'wc-product-gallery-slider' );
}

3. Отключаем мусорную разметку srcset
PHP:
add_filter('max_srcset_image_width', create_function('', 'return 1;'));

4. Отключаем создание мусорных 768px изображений
PHP:
function unset_medium_large($sizes) {
    unset($sizes['medium_large']);
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'unset_medium_large');

5. Товары которых нет в наличии в WooCommerce показывать в конце списка:
PHP:
class iWC_Orderby_Stock_Status {
public function __construct() {
    if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
        add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
    }
}
public function order_by_stock_status($posts_clauses) {
    global $wpdb;
    if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
        $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
        $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
        $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
    }
    return $posts_clauses;
    }
}
new iWC_Orderby_Stock_Status;

Приведённые коды никак не навредят сайту, можно смело использовать.
 

Pike

Создатель
Регистрация
6 Янв 2014
Сообщения
17
Реакции
10
1. Подтверждение E-Mail администратора

В последних версиях WP сделали подтверждение на смену емайла администратора.
Если не удается достучаться, до бывшего админа или у вас нет доступа в phpMyAdmin, то:

1. Добавляем код в начало functions.PHP

Код:
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 );

2. меняем мыло и удаляем код.

Если запрос уже был выслан, выходим из админки и логинимся снова.
Опля, емайл гл.администраторва сменён.

•••


2. Удаление обновлений, которые невозможно обновить.

Если WordPress включил уведомление, что вышло обновление, но самого обновления не видно.
На это есть 2 причины:

— плагин, либо тема имеет в себе встроенный моудль, который и требует обновления, но сама тема, включает игнор;

— плагин, скрыт и его не видно;

чтобы узнать, какой плагин вызывает уведомление, добавть код в functions.php твоей темы:

Код:
function debug_pending_updates() {
    if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) return;
    if ( ! isset( $_GET['debug_updates'] ) ) return;
    $output = "";
    $plugin_updates = get_site_transient( 'update_plugins' );
    if ( $plugin_updates && ! empty( $plugin_updates->response ) ) {
        foreach ( $plugin_updates->response as $plugin => $details ) {
            $output .= "<p><strong>Плагин: </strong> <u>".$plugin."</u> желает обновиться</p>";
        }
    }
    wp_update_themes();
    $theme_updates = get_site_transient( 'update_themes' );
    if ( $theme_updates && ! empty( $theme_updates->response ) ) {
        foreach ( $theme_updates->response as $theme => $details ) {
            $output .= "<p><strong>Тема: </strong> <u>".$theme."</u> желает обновиться</p>";
        }
    }
    if ( empty( $output ) ) $output = "Странно, но обновления не найдены";
    wp_die( $output );
}
add_action( 'init', 'debug_pending_updates' );


чтобы плагин проявился, заадминься концом в путь: ../wp-admin?debug_updates
 

Вложения

  • Bildschirmfoto 2018-06-14 um 09.47.13.jpg
    Bildschirmfoto 2018-06-14 um 09.47.13.jpg
    31,3 KB · Просмотры: 20
Последнее редактирование:

areshin71

Профессор
Регистрация
19 Сен 2015
Сообщения
109
Реакции
42
Автоматическое прописывание атрибута alt к загружаемым через библиотеку картинкам.
Код:
//avtodobavlenie alt k zagruzhaemym kartinkam start
function wph_auto_alt_title_caption($attachment_ID) {
  $filename  = $_REQUEST['name'];
  $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $filename);
  $withoutExt = str_replace(array('-','_'), ' ', $withoutExt);
  $my_post = array(
  'ID'  => $attachment_ID,
  );
  wp_update_post($my_post);
  //alt
  update_post_meta($attachment_ID, '_wp_attachment_image_alt', $withoutExt);
}
add_action('add_attachment', 'wph_auto_alt_title_caption');
//avtodobavlenie alt k zagruzhaemym kartinkam end
 

metal-stroi-komplekt

Гуру форума
Регистрация
23 Дек 2012
Сообщения
187
Реакции
71
Для WooCommerce: надпись на кнопке "Добавить в корзину" -> "Заказать"
PHP:
add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_new_text_for_butt_cart' );
function woo_new_text_for_butt_cart() {
   return 'Заказать';
}
 

Chemistry1026

Создатель
Регистрация
12 Дек 2015
Сообщения
10
Реакции
1
Разрешаем загружать svg картинки через загрузку медиа файлов

PHP:
function add_file_types_to_uploads($file_types){
    $new_filetypes = array();
    $new_filetypes['svg'] = 'image/svg+xml';
    $file_types = array_merge($file_types, $new_filetypes );
    return $file_types;
}
add_action('upload_mimes', 'add_file_types_to_uploads');
 

vladeol

Писатель
Регистрация
22 Окт 2018
Сообщения
4
Реакции
3
Woocommerece:

1. Добавляем "грн" вместо "₴" для украинского рынка:

PHP:
add_filter( 'woocommerce_currencies', 'add_my_currency' );
function add_my_currency( $currencies ) {
     $currencies['UAH'] = __( 'Українська гривня', 'woocommerce' );
     return $currencies;
}

add_filter('woocommerce_currency_symbol', 'add_my_currency_symbol', 10, 2);
function add_my_currency_symbol( $currency_symbol, $currency ) {
     switch( $currency ) {
         case 'UAH': $currency_symbol = 'грн'; break;
     }
     return $currency_symbol;
}

2. Убираем выбор опции на странице товара (остаётся только если не установлен атрибут по умолчанию)

PHP:
add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'wc_remove_options_text');
function wc_remove_options_text( $args ){
    $args['show_option_none'] = false;
    return $args;
}

Источники уже не вспомню, копировал с собственного файла
 
Последнее редактирование:

vladeol

Писатель
Регистрация
22 Окт 2018
Сообщения
4
Реакции
3
Woccommerce - убираем страницу /shop/

1. 404 по url

PHP:
function woocommerce_disable_shop_page() {
    global $post;
    if (is_shop()):
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
    endif;
}
add_action( 'wp', 'woocommerce_disable_shop_page' );

2. В пустой корзине кнопка ведёт...на главную, например:

PHP:
function wc_empty_cart_redirect_url() {
    return '/'; //либо вставляете любую ссылку
}
add_filter( 'woocommerce_return_to_shop_redirect', 'wc_empty_cart_redirect_url' );

3. Кнопка "Продолжить покупки" в корзине возвращает на предыдущую страницу

PHP:
function my_woocommerce_continue_shopping_redirect( $return_to ) {
    return $_SERVER['HTTP_REFERER'];
}
add_filter( 'woocommerce_continue_shopping_redirect', 'my_woocommerce_continue_shopping_redirect', 20 );

Только вот не искал как отключить эту страницу в sitemap от yoast, search console выдаёт ошибку
 

tenderfog

Писатель
Регистрация
1 Окт 2012
Сообщения
6
Реакции
3
Оформляем страницу авторизации
Код для function.php. Часто использую для установки логотипы, смены фона.

PHP:
function my_custom_login_logo() {
    echo '<style type="text/css">
     body {background-image:url('.get_bloginfo('template_directory').'/images/king_hero.png) !important; background-size:cover;background-color:#0a0a0a}
        </style>';
}

add_action('login_head', 'my_custom_login_logo');
 
Сверху