Задать вопрос
Master of WordPress [ WooCommerce ], PHP, JavaScript [ Vue.js, Nuxt.js, Node.js, Express ]
Контакты
Местоположение
Россия, Иркутская обл., Иркутск

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (33)

Лучшие ответы пользователя

Все ответы (63)
  • Нагрузка на Wordpress?

    irtek
    @irtek
    Wordpress-addicted
    Вопросы будут и к хостингу (нужен VPS настроенный)
    И к Вордпрессу. В ситуации с 300 тыс записей 100% категоричный отказ от встроенных функций ВП. Даже не пытайтесь. Все фильтры писать вручную с оптимизированными запросами в базу. Стараться по максимуму сократить переборы базы, т.к. его meta_query и прочие встроенные фильтры делают многократные бессмысленные переборы таблиц.

    О цифрах по опыту
    При оптимизированном VPS на 1 ядре + 1 Гб ОЗУ спокойно работают встроенные фильтры ВП (140 тыс записей) + 7 параметров фильтрации. Но при более сложном фильтре, чем простой отбор параметров появились проблемы даже при росте мощностей до 4 ядер + 4 Гб ОЗУ. Тормоза ощутимые, особенно при одновременной пользовательской активности в 150-200 человек. Оптимизировали сложные запросы, сделали их вручную и все вернулось к прежним 1 ядро + 1 Гб ОЗУ.

    На сайте с 420 тысячами записей появились проблемы с фильтрами встроенными сразу. Переписали вручную и проблему сняли, для надежности работает на VPS 3 ядра + 2 Гб ОЗУ.
    Обязательное использование кэширования запросов, например сервера Memcache. Также использовать встроенное транзитное кэширование ВП. Эти два подхода снимут любую проблему нагрузки на базу и фильтры наполовину.

    Переход на php 7.0 в последнее время положительно сказался на работу ВП.

    Насчет серверной оптимизации
    При работе публично в обязательном порядке закрыть wp-login.php, xmlrpc.php, а также wp-json REST API. Данные мероприятия исключат любую лишнюю нагрузку от ботов. Отфильтровать доступ к папкам wp-admin и wp-includes, а также закрыть доступ к php кроме сервера к wp-content/plugins и папки темы.
    Ответ написан
    5 комментариев
  • Как разом удалить все медиа в wordpress?

    irtek
    @irtek
    Wordpress-addicted
    DELETE FROM `wp_posts` WHERE `post_type` = "attachment";
    DELETE FROM `wp_postmeta` WHERE `meta_key` = "_wp_attached_file";
    DELETE FROM `wp_postmeta` WHERE `meta_key` = "_wp_attachment_metadata";


    Эти 3 запроса в базе данных удалят все основные записи о медиа, если не создавали каких-то индивидуальных полей для изображений.
    Ответ написан
    1 комментарий
  • Как настроить поиск записей в админке WP?

    irtek
    @irtek
    Wordpress-addicted
    Этот поиск в админке ищет и по заголовку и по содержанию.
    Если вы хотите, чтобы данный поиск искал только по заголовкам, то добавьте данный код в файл functions.php вашей темы.

    function search_only_title_toster_q411859($search, &$wp_query) {
    	global $wpdb;
    	if (empty($search)) {
    		return $search;
    	}
    
    	$q = $wp_query->query_vars;
    	$n = !empty($q['exact']) ? '' : '%';
    	$search =
    	$searchand = '';
    	foreach ((array) $q['search_terms'] as $term) {
    		$term = esc_sql(like_escape($term));
    		$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
    		$searchand = ' AND ';
    	}
    	if (!empty($search)) {
    		$search = " AND ({$search}) ";
    		if (!is_user_logged_in()) {
    			$search .= " AND ($wpdb->posts.post_password = '') ";
    		}
    
    	}
    	return $search;
    }
    add_filter('posts_search', 'search_only_title_toster_q411859', 500, 2);
    Ответ написан
    1 комментарий
  • Как в wordpress перехватить get запрос?

    irtek
    @irtek
    Wordpress-addicted
    1. Грубый метод
    Создать папку sitemap в корне и создать там index.php
    Если нужны функции WordPress и доступ к базе, то включить в файл основной файл загрузки WP

    require '../wp-load.php';

    2. Если нужно прямо в WordPress
    Скрипт нужно повесить на хук "init", который происходит до передачи заголовков страницы.
    Данный код добавить в functions.php темы

    add_action( 'init', 'qna_habr_q_971257' );
    
    function qna_habr_q_971257() {
    
    	global $wp;
    
    	// Получить базовый url
    	$current_url = home_url();
    
    	// Получить текущий url
    	$current_url = $current_url . $_SERVER['REDIRECT_URL'];
    
    	// Получить ID поста/страницы
    	$id = url_to_postid( $current_url );
    
      // Получить массив get запроса
    	print_r( $_GET );
    
    
    	// Здесь ваш скрипт... //
    
    
    	// Завершить функцию выходом если не хотите продолжать загружать страницу
    	wp_die();
    
    }


    Для условия определения страницы, на которой находимся я привёл пример нескольких функций. Вы можете определить по данным из глобального $_SERVER, можете воспользоваться определением ID страницы по url и определять по ID на какой странице находитесь. Но учтите, что is_page() функция на данном этапе загрузки еще не работает.

    И завершить функцию можно выходом wp_die(); если вам не нужно продолжение загрузки страницы.
    Ответ написан
    1 комментарий
  • Вирус постоянно меняет права к файлам сайта на Wordpress?

    irtek
    @irtek
    Wordpress-addicted
    У вас где-то залит shell-скрипт. В идеале нужно все переустановить.
    Wordpress в обязательном порядке, тему и все плагины. Если на сервере под одним пользователем несколько сайтов, то такой враг может быть в любом из них.

    Если у вас есть доступ к серверу по SSH, то выполните команду

    find . -type f -name '*.php' | xargs grep -l "x63" --color


    или

    find . -type f -name '*.php' | xargs grep -l "x47" --color


    "точка" после find обозначает искать в папке, в которой находитесь, замените ее на путь к папке, где лежат ваш сайт или сайты или вообще заменить на слеш / тогда искать будет по всему серверу.

    Команда ищет файлы в содержании, которых есть текст "x63" или "x47". В 99% случаях из таких кодов состоит шифровка вражеских вирусов. Обратите внимание на файлы, которые найдет команда. Откройте их и посмотрите содержание. Код вируса вы сразу увидите, он весь шифрованный base64 и присутствуют команды eval. Чистите или восстановите данные файлы на чистые.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (6)