28 октября 2019

Хуки, которые необходимо вставить в functions.php после установки сайта


1. Склонение дат на сайте



function true_russian_date_forms($the_date = '') {
 if ( substr_count($the_date , '---') > 0 ) {
  return str_replace('---', '', $the_date);
 }
 // массив замен для русской локализации движка и для английской
 $replacements = array(
  "Январь" => "января", // "Jan" => "января"
  "Февраль" => "февраля", // "Feb" => "февраля"
  "Март" => "марта", // "Mar" => "марта"
  "Апрель" => "апреля", // "Apr" => "апреля"
  "Май" => "мая", // "May" => "мая"
  "Июнь" => "июня", // "Jun" => "июня"
  "Июль" => "июля", // "Jul" => "июля"
  "Август" => "августа", // "Aug" => "августа"
  "Сентябрь" => "сентября", // "Sep" => "сентября"
  "Октябрь" => "октября", // "Oct" => "октября"
  "Ноябрь" => "ноября", // "Nov" => "ноября"
  "Декабрь" => "декабря" // "Dec" => "декабря"
 );
 return strtr($the_date, $replacements);
}
 
// если хотите, вы можете приминить только некоторые из фильтров
add_filter('the_time', 'true_russian_date_forms');
add_filter('get_the_time', 'true_russian_date_forms');
add_filter('the_date', 'true_russian_date_forms');
add_filter('get_the_date', 'true_russian_date_forms');
add_filter('the_modified_time', 'true_russian_date_forms');
add_filter('get_the_modified_date', 'true_russian_date_forms');
add_filter('get_post_time', 'true_russian_date_forms');
add_filter('get_comment_date', 'true_russian_date_forms');

2. Сообщения об ошибках при попытке авторизации пользователя на сайте



function true_change_default_login_errors(){
 return '<strong>ОШИБКА</strong>: Вы ошиблись при вводе логина или пароля.';
}
 
add_filter( 'login_errors', 'true_change_default_login_errors' );

3. Защита от вредоносных URL-запросов



if (strpos($_SERVER['REQUEST_URI'], "eval(") || strpos($_SERVER['REQUEST_URI'], "CONCAT") || strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") || strpos($_SERVER['REQUEST_URI'], "base64")) {
 @header("HTTP/1.1 400 Bad Request");
 @header("Status: 400 Bad Request");
 @header("Connection: Close");
 @exit;
}

4. Защита от автоматического спама



function true_stop_spam( $commentdata ) {
 $fake = trim($_POST['comment']); // обычное поле комментирования мы скроем через CSS
 if(!empty($fake)) // заполнение его роботами будет приводить к ошибке, комментарий отправляться не будет
  wp_die('Спамный коммент!'); 
 $_POST['comment'] = trim($_POST['true_comment']); // затем мы присвоим ему значение поля комментария, которое для людей
 return $commentdata;
}
 
add_filter('pre_comment_on_post', 'true_stop_spam');

5. Скрываем имена пользователей из HTML-кода комментариев



function true_remove_css_class( $classes ) {
 foreach( $classes as $key => $class ) {
  if(strstr($class, "comment-author-")) {
   unset( $classes[$key] );
  }
 }
 return $classes;
}
add_filter('comment_class', 'true_remove_css_class');

6. Запрет пингбэков и трэкбэков на самого себя



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

7. Скрываем версию WordPress

 
function true_remove_wp_version_wp_head_feed() {
 return '';
}
 
add_filter('the_generator', 'true_remove_wp_version_wp_head_feed');

Как определить текущий язык страницы wordpress

<?php echo $lang=get_bloginfo("language"); ?>

27 октября 2019

Добавить контент в описание товара WooCommerce

Кастомный вывод краткого описания


add_filter( 'woocommerce_short_description', 'single_product_short_descriptions', 10, 1 ); function single_product_short_descriptions( $post_excerpt ){ global $product; if ( is_single( $product->id ) ) $post_excerpt = '
' . __( "Article only available in the store.", "woocommerce" ) . '
' . $post_excerpt; return $post_excerpt; }

Принудительно указывать описание продукта, если оно пустое (если вы хотите, чтобы этот пользовательский текст отображался):


add_filter( 'woocommerce_product_tabs', 'force_description_product_tabs' ); function force_description_product_tabs( $tabs ) { $tabs['description'] = array( 'title' => __( 'Description', 'woocommerce' ), 'priority' => 10, 'callback' => 'woocommerce_product_description_tab', ); return $tabs; }


function.php

25 октября 2019

Перевод строк в Wordpress

WPML

позволяет переводить тексты внутри темы и плагинов.




_e()

Переводит указанный текст, используя файл перевода и выводит его на экран.
Работает на основе: translate()

Использование

<?php _e( $text, $domain ) ?>
$text(строка) (обязательный)
Текст, который нужно перевести.
По умолчанию: нет
$domain(строка)
ID перевода. Область определения перевода, обозначается названием, которое затем станет идентификатором в PHP.
По умолчанию: default

Примеры

#1. Пример использования функции в базовой теме WordPress:

<?php _e( 'Comment: ' ); ?>
Если используется русский файл локализации, то вернет: "Комментарий:".
Используется русский файл значит: в wp-config.php константа WPLANG определена как ru_RU (define('WPLANG', 'ru_RU');), а значит для такого перевода (без указания параметра $domain) будет использоваться файл ru_RU.mo из каталога wp-content\languages.

#2 Пример перевода с доменом

Допустим мы переводим плагин и у нас есть файл перевода .mo и мы его подключили с помощью load_plugin_textdomain(), где в параметре $domain указали myplugin. Тогда для перевода строки "my super plugin" функцию нужно будет вызвать так:
<?php _e( 'my super plugin', 'myplugin' ); ?>
<?php _e( 'текст любой', 'название_темы' ); ?>

WordPress - Атрибуты миниатюры

title и alt из заголовка записи

Мы можем сделать, чтобы у миниатюры записи (когда мы внутри записи) title и alt прописывались из заголовка записи динамически. Для этого, добавляем следующий сниппет в functions.php
function titles_gallery($attr){
 if ( is_single() ) {  
  $title = get_the_title();
  $attr['title'] = trim(strip_tags( $title ));
  $attr['alt'] = trim(strip_tags( $title )); 
 }  
 return $attr;  
}
add_filter('wp_get_attachment_image_attributes','titles_gallery',10,2);
При использовании функции логотип темы (custom_logo) изображение логотипа принимает свойства миниатюры и в него могут подставится те же alt и title, это неправильно! Нужно изменить вывод логотипа:
<div id="logo"><a href="<?php echo get_site_url(); ?>">
 <?php $custom_logo_id = get_theme_mod( 'custom_logo' );
 $image = wp_get_attachment_image_src( $custom_logo_id , 'full' ); ?>
 <img src="<?php echo $image[0]; ?>" alt="site-logo" title="site-logo">
</a></div>

Микроразметка миниатюры

Добавление миниатюре атрибута itemprop=»image»
if ( !is_admin() ) {
 add_filter( 'wp_get_attachment_image_attributes', 'alter_att_attributes_wpse');
 function alter_att_attributes_wpse($attr) {
  $attr['itemprop'] = 'image';
  return $attr;
 }
}

Размеры миниатюры

add_filter( 'wp_get_attachment_image_attributes', 'alter_att_attributes_wpse');

function alter_att_attributes_wpse($attr) {
 $attr['srcset'] = ' '; // !Отключение вывода вариаций изображения
 return $attr;
}

Можно делать комбинацию атрибутов title и alt + itemprop и т.д. в одной функции

title и alt товара woocommerce

Добавить динамический alt и title в виде заголовка товара изображениям товаров в категории — используем следующую функцию:
add_filter('wp_get_attachment_image_attributes', 'change_attachement_image_attributes', 20, 2);

function change_attachement_image_attributes( $attr, $attachment ){
    // Get post parent
    $parent = get_post_field( 'post_parent', $attachment);

    // Get post type to check if it's product
    $type = get_post_field( 'post_type', $parent);
    if( $type != 'product' ){ return $attr; }

    /// Get title
    $title = get_post_field( 'post_title', $parent);

    $attr['alt'] = $title;
    $attr['title'] = $title;

    return $attr;
}
Эта функция добавляет атрибуты и в шаблоне карточки товара