- Автор темы
 - #1
 
В данном разделе обсуждается все, что касается модификации, усовершенствование и оптимизации CMS WordPress-а.
Отключение автоматического создания картинок при загрузке через медиатеку
При загрузке картинке через встроенный меда загрузчик (медиафайлы) по-умолчанию wordpress создает аж 4 копии загружаемой картинки разного размера, что писец как не круто, особенно когда это не нужно.

Что можно сделать, а делаем следующие можно отключить данную опцию в админке.

Но бывает, что в шаблоне прописаны свои размеры и генерация картинок происходит все равно, тогда в футоре вставляем следующий код для того чтобы узнать какие размеры зарегистрированы в системе.
Код для вставки в footer:
	
	
	
		
(после того как получите названия зарегистрированных размеров вышеуказанный код удалить)
Код вернет ответ вот такого вида:
	
	
	
		
Отсюда нам нужны те размеры, что хотим удалить ну допустим (medium, medium_large, large).
ВНИМАНИЕ: Размер thumbnail (миниатюра) нужно оставить, этот размер нужен при создании стандартной галереи и в превью загруженных файлов в админ-панели.
Если уберете, то ст. галерея не будет работать нормально, медиатека будет грузить оригиналы файлови тормозить админку.
Далее вставляем код указанный ниже в functions.php
	
	
	
		
В итоге на выходе вы получите 2 файла пример: img.jpg и img-150x150.jpg вместо 4 копий и оригинала картинки то есть вместо 5 файлов 2, что есть круто!
Автоматически заполняем атрибут title на основе заголовка изображения при его вставки в контент поста.

Для этого необходимо вставить следующий код в functions.php
	
	
	
		
На выходе получите автоматическое добавление title при вставке картинки в статье или посте:

Заполняет поле для атрибута alt на основе заголовка изображения при его вставки в контент поста.

Для этого необходимо вставить следующий код в functions.php
	
	
	
		
На выходе получите автоматическое добавление title при вставке картинки в статье или посте:

Удаление авто-добавления тегов P и BR
У Wordpress есть такая дебильная штука добавлять теги br и p где то удобно но в большинстве случаев они мешают, вот классное решение.
Для этого необходимо вставить следующий код в functions.php
	
	
	
		
Авто обновление ядра/тем/плагинов/перевода
параметр __return_true - включает автоматическое обнавление
параметр __return_false - отключает автоматическое обнавление
Для этого необходимо вставить следующий код в functions.php
	
	
	
		
Удаление файлов license.txt, readme.html и т.д. по списку
При установке WP создаются txt и html файлы которые могу дать злоумышленнику информацию
о версии WP, плагине, что может помочь быстро выявить уязвимость и т.д. да и вообще меньше знает крепче спит)
Список можно дополнить, если есть необходимость, данный скрипт при заде в админку удалит файлы если они существуют на автомате.
Для этого необходимо вставить следующий код в functions.php
	
	
	
		
Удаляем логин админа в стилях «comment-author-» при коментариях от администратора
При коментариях от учетки админа, в html палится админская учетка в стилях «comment-author-» , что упростит работы для любителей брута так как админку они узнают и останется сбрутить пароль.
Для этого необходимо вставить следующий код в functions.php
	
	
	
		
Редирект с запроса ?author на главную
Скрытие логина админа через запрос ?author
В скрипте нужно указать небходимое количество учеток ?author=1, ?author=2 и т.д.
Для этого необходимо вставить следующий код в functions.php
	
	
	
		
Пилим .htaccess
вставляем полсе # END WordPress
RedirectMatch Permanent ^/author/
RedirectMatch Permanent ^/feed/ запрещаем фиды если не используем RSS
# Модифицируем .htaccess против MySQL-инъекций и других хаков
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
# Закрываем доступ к файлам
<files wp-config.php>
order allow,deny
deny from all
</files>
<Files wp-config-sample.php>
Order deny,allow
Deny from all
</Files>
<FilesMatch "xmlrpc.php">
Order Deny,Allow
Deny from all
</FilesMatch>
Двойная авторизация
Так как при бруте бот делает кучу обращений к файлу wp-login.php что грузит саму cms, может вызвать нагрузку на сервер после чего хостер заблочит сайт ну или в конце концов могут сбрутить пароль от сайта. Данный скрипт не дает обратится к файлу wp-login.php пока не авторизуются через данный скрипт, очь крутая штука!
вставляем полсе в .htaccess после # END WordPress
<Files wp-login.php>
AuthName "Access Denied"
AuthType Basic
AuthUserFile /home/c/test/website/public_html/.htpasswd //абсолютный путь к файлу .htpasswd
require valid-user
</Files>
# END WordPress
Создаем в корне сайта файл с именем .htpasswd в той же папке, где и файл .htaccess и потом в .htpasswd добавляем строку
пример:
admin:$aepr1$f3dVaHch40$ZvIWhiYS0MngH7NJ14wyK0 //пароль сгенерировать нужно свой
для генерации закодированного пароля Для просмотра ссылки Войдиили  Зарегистрируйся
Если не знаете абсолютного пути то можно вот такой штукой воспользоваться
в корне сайта создаем файл test.php и добаляем туда код:
	
	
	
		
Функция для вставки PHP кода в тело статьи
В теле статьи вот в [exec] таких тегах [/exec] можно вставить любой PHP скрипт
Для этого необходимо вставить следующий код в functions.php
	
	
	
		
Если любите плагины то есть замечателный плагин Для просмотра ссылки Войдиили  Зарегистрируйся он может многое из данного списка и есть еще свои хорошие фишки.
	
		
			
		
		
	
				
			Отключение автоматического создания картинок при загрузке через медиатеку
При загрузке картинке через встроенный меда загрузчик (медиафайлы) по-умолчанию wordpress создает аж 4 копии загружаемой картинки разного размера, что писец как не круто, особенно когда это не нужно.

Что можно сделать, а делаем следующие можно отключить данную опцию в админке.

Но бывает, что в шаблоне прописаны свои размеры и генерация картинок происходит все равно, тогда в футоре вставляем следующий код для того чтобы узнать какие размеры зарегистрированы в системе.
Код для вставки в footer:
		PHP:
	
	<?
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() ) );
?>
	Код вернет ответ вот такого вида:
		PHP:
	
	Array
(
    [thumbnail] => Array
        (
            [width] => 150
            [height] => 150
            [crop] => 1
        )
    [medium] => Array
        (
            [width] => 250
            [height] => 250
            [crop] =>
        )
    [medium_large] => Array
        (
            [width] => 768
            [height] => 0
            [crop] =>
        )
    [large] => Array
        (
            [width] => 350
            [height] => 350
            [crop] =>
        )
)
	ВНИМАНИЕ: Размер thumbnail (миниатюра) нужно оставить, этот размер нужен при создании стандартной галереи и в превью загруженных файлов в админ-панели.
Если уберете, то ст. галерея не будет работать нормально, медиатека будет грузить оригиналы файлови тормозить админку.
Далее вставляем код указанный ниже в functions.php
		PHP:
	
	add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ){
    // размеры которые хотим удалить
    return array_diff( $sizes, array(
        'medium',
        'medium_large',
        'large'
    ) );
}
	Автоматически заполняем атрибут title на основе заголовка изображения при его вставки в контент поста.

Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	function lcb_restore_image_title( $html, $id ) {
    $attachment = get_post($id);
    if (strpos($html, "title=")) {
        return $html;
        }
    else {
        $mytitle = esc_attr($attachment->post_title);
        return str_replace('<img', '<img title="' . $mytitle . '" '  , $html);
}
}
add_filter( 'media_send_to_editor', 'lcb_restore_image_title', 15, 2 );
function lcb_restore_title_to_gallery( $content, $id ) {
    $thumb_title = get_the_title($id);
    return str_replace('<a', '<a title="' . esc_attr($thumb_title) . '" ', $content);
}
add_filter('wp_get_attachment_link', 'lcb_restore_title_to_gallery', 10, 4);
	
Заполняет поле для атрибута alt на основе заголовка изображения при его вставки в контент поста.

Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	function change_empty_alt_to_title( $response ) {
    if ( ! $response['alt'] ) {
        $response['alt'] = sanitize_text_field( $response['title'] );
    }
    return $response;
}
add_filter( 'wp_prepare_attachment_for_js', 'change_empty_alt_to_title' );
	
Удаление авто-добавления тегов P и BR
У Wordpress есть такая дебильная штука добавлять теги br и p где то удобно но в большинстве случаев они мешают, вот классное решение.
Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	remove_filter( 'the_content', 'wpautop' );// для контента
remove_filter( 'the_excerpt', 'wpautop' );// для анонсов
remove_filter( 'comment_text', 'wpautop' );// для комментарий
	параметр __return_true - включает автоматическое обнавление
параметр __return_false - отключает автоматическое обнавление
Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	// Обновления ядра (движка)
add_filter('auto_update_core', '__return_true');
// Авто-обновление минорных версий (версии внутри ветки)
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
//  Авто-обновление мажорных версий (версии между ветками)
add_filter( 'allow_major_auto_core_updates', '__return_true' );
// Авто-обновление версий разработчиков
add_filter( 'allow_dev_auto_core_updates', '__return_true' );
// Включение авто-обновлений для всех плагинов
add_filter( 'auto_update_plugin', '__return_true' );
// Включение авто-обновлений для всех тем
add_filter( 'auto_update_theme', '__return_true' );
// Включение авто-обновлений всех  файлов перевода
add_filter( 'auto_update_translation', '__return_true' );
	При установке WP создаются txt и html файлы которые могу дать злоумышленнику информацию
о версии WP, плагине, что может помочь быстро выявить уязвимость и т.д. да и вообще меньше знает крепче спит)
Список можно дополнить, если есть необходимость, данный скрипт при заде в админку удалит файлы если они существуют на автомате.
Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	if( is_admin() && ! defined('DOING_AJAX') ){
    $license_file = ABSPATH .'/license.txt';
    $readme_file = ABSPATH .'/readme.html';
    $imglicense_file = ABSPATH .'/wp-includes/images/crystal/license.txt';
    $pllicense_file = ABSPATH .'/wp-includes/js/plupload/license.txt';
    $tinlicense_file = ABSPATH .'/wp-includes/js/tinymce/license.txt';
    $swlicense_file = ABSPATH .'/wp-includes/js/swfupload/license.txt';
    $idlicense_file = ABSPATH .'/wp-includes/ID3/license.txt';
    $idreadme_file = ABSPATH .'/wp-includes/ID3/readme.txt';
    $idcommercial_file = ABSPATH .'/wp-includes/ID3/license.commercial.txt';
    if( file_exists($license_file) && current_user_can('manage_options') ){
        $deleted = unlink($license_file) && unlink($readme_file) && unlink($imglicense_file) && unlink($pllicense_file) && unlink($tinlicense_file) && unlink($swlicense_file) && unlink($idlicense_file) && unlink($idreadme_file) && unlink($idcommercial_file);
        if( ! $deleted  )
            $GLOBALS['readmedel'] = 'Не удалось удалить файлы: license.txt и readme.html из папки `'. ABSPATH .'`. Удалите их вручную!';
        else
            $GLOBALS['readmedel'] = 'Файлы: license.txt и readme.html удалены из из папки `'. ABSPATH .'`.';
        add_action( 'admin_notices', function(){  echo '<div class="error is-dismissible"><p>'. $GLOBALS['readmedel'] .'</p></div>'; } );
    }
}
	При коментариях от учетки админа, в html палится админская учетка в стилях «comment-author-» , что упростит работы для любителей брута так как админку они узнают и останется сбрутить пароль.
Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	function remove_comment_author_class( $classes ) {
foreach( $classes as $key => $class ) {
if(strstr($class, "comment-author-")) {
unset( $classes[$key] );
}
}
return $classes;
}
add_filter( 'comment_class' , 'remove_comment_author_class' );
	Скрытие логина админа через запрос ?author
В скрипте нужно указать небходимое количество учеток ?author=1, ?author=2 и т.д.
Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	function redirect_author_page() {
    $page_viewed = basename($_SERVER['REQUEST_URI']);
    if( $page_viewed == "?author=1" || $page_viewed == "?author=2" || $page_viewed == "?author=3" || $page_viewed == "?author=4" || $page_viewed == "?author=5") {
        wp_redirect( '/' );
        exit;
    }
}
add_action('init','redirect_author_page');
	вставляем полсе # END WordPress
RedirectMatch Permanent ^/author/
RedirectMatch Permanent ^/feed/ запрещаем фиды если не используем RSS
# Модифицируем .htaccess против MySQL-инъекций и других хаков
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
# Закрываем доступ к файлам
<files wp-config.php>
order allow,deny
deny from all
</files>
<Files wp-config-sample.php>
Order deny,allow
Deny from all
</Files>
<FilesMatch "xmlrpc.php">
Order Deny,Allow
Deny from all
</FilesMatch>
Двойная авторизация
Так как при бруте бот делает кучу обращений к файлу wp-login.php что грузит саму cms, может вызвать нагрузку на сервер после чего хостер заблочит сайт ну или в конце концов могут сбрутить пароль от сайта. Данный скрипт не дает обратится к файлу wp-login.php пока не авторизуются через данный скрипт, очь крутая штука!
вставляем полсе в .htaccess после # END WordPress
<Files wp-login.php>
AuthName "Access Denied"
AuthType Basic
AuthUserFile /home/c/test/website/public_html/.htpasswd //абсолютный путь к файлу .htpasswd
require valid-user
</Files>
# END WordPress
Создаем в корне сайта файл с именем .htpasswd в той же папке, где и файл .htaccess и потом в .htpasswd добавляем строку
пример:
admin:$aepr1$f3dVaHch40$ZvIWhiYS0MngH7NJ14wyK0 //пароль сгенерировать нужно свой
для генерации закодированного пароля Для просмотра ссылки Войди
Если не знаете абсолютного пути то можно вот такой штукой воспользоваться
в корне сайта создаем файл test.php и добаляем туда код:
		PHP:
	
	<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
	В теле статьи вот в [exec] таких тегах [/exec] можно вставить любой PHP скрипт
Для этого необходимо вставить следующий код в functions.php
		PHP:
	
	function exec_php($matches){
    eval('ob_start();'.$matches[1].'$inline_execute_output = ob_get_contents();ob_end_clean();');
    return $inline_execute_output;
}
function inline_php($content){
    $content = preg_replace_callback('/\[exec\]((.|\n)*?)\[\/exec\]/', 'exec_php', $content);
    $content = preg_replace('/\[exec off\]((.|\n)*?)\[\/exec\]/', '$1', $content);
    return $content;
}
add_filter('the_content', 'inline_php', 0);
	Если любите плагины то есть замечателный плагин Для просмотра ссылки Войди
			
				Последнее редактирование: 
			
		
	
								
								
									
	
		
			
		
		
	
	
	
		
			
		
		
	
								
							
							
				