Norske
Ответы в темах
-
Форум: Проблемы и решения
Тема: Как удалить автора из постов?Добрый день!
С этим, скорее всего, придётся немножко повозиться, поскольку в шаблоне фида нет фильтров для отдельных тегов и частей разметки. Элегантного решения я не вижу, но можно заменить шаблон целиком. Он хранится в файле
wp-includes/feed-rss2.php.Последовательность действий примерно такая:
1. Скопировать содержимое шаблона в отдельный php-файл.
2. Отредактировать шаблон под свои нужды. В данном случае удалить строчку с тегом автора:
<dc:creator><![CDATA[<?php the_author() ?>]]></dc:creator>.
3. Сохранить этот модифицированный файл где-нибудь в пределахwp-content/, чтобы не затёрся при обновлениях движка.
4. Отключить стандартный шаблон с помощью хука:
remove_action( 'do_feed_rss2', 'do_feed_rss2', 10 );.
5. Подключить с помощью того же хука свой шаблон:function my_override_do_feed_rss2( $for_comments ) { // Для комментариев используем стандартный шаблон из папки wp-includes if ( $for_comments ) { load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' ); // Для постов подтягиваем файл с модифицированным шаблоном (указать путь) } else { load_template( 'path/to/my-feed-rss2-template.php' ); } } add_action( 'do_feed_rss2', 'my_override_do_feed_rss2' );Желательно оформить всё это в виде плагина и, соответственно, хранить модифицированный шаблон в его папке. При этом путь к шаблону будет задаваться через
plugin_dir_path( __FILE__ ).Код теоретический, приблизительный, на основе документации. Я не тестировал этот метод на практике. Но по идее должно сработать.
Минус такого решения в том, что ваш файл не будет обновляться движком. Исходный шаблон со временем может измениться.
Успехов!
Форум: Проблемы и решения
Тема: WP-JSON палит логин администраторачто это вообще за фигня и стоит ли с ней бороться?
а wp-json вообще можно сделать Noindex или он имеет какоето значение?
Добрый день!
Адреса
wp-json/предназначены для поддержки REST API.Грубо говоря, это технология обмена данными с сайтом, которая позволяет управлять контентом удалённо. Например, искать или публиковать посты через собственное мобильное приложение, сделать нестандартную админку или какую-нибудь надстройку, типа системы учёта клиентов. То есть REST используется в основном там, где нужно расширить возможности сайта и превратить его в сервис, обслуживающий внешние запросы.
Формально, начиная с версии 5.x REST API является частью администраторского интерфейса и отключать его не рекомендуется (англ.). Потому что API используется новым блочным редактором.
Тем не менее, при желании можно закрыть доступ к API для незалогиненных пользователей. Подробности есть в официальной документации по ссылке выше или в неофициальной на русском.
Если вы не хотите возиться с фильтрами и вникать, можно попробовать плагин Disable REST API.
Да, запятые — это моя опечатка, конечно. Рад, что вы с Юрием уже разобрались и всё получилось 🙂 Успехов!
Отлично, теперь нужно восстановить настройки из админки. Меняем этот кусочек с заглушкой:
wp_localize_script( $handler, 'color_blogObject', array( 'menu_sticky' => 'on', 'wow_effect' => 'on' ) );…на вот такую примерно конструкцию:
wp_localize_script( 'color-blog-custom-scripts', 'color_blogObject', array( 'menu_sticky' => get_theme_mod( 'color_blog_enable_sticky_menu', true ) ? 'on' : 'off'; 'wow_effect' => get_theme_mod( 'color_blog_enable_wow_animation', true ) ? 'on' : 'off'; ) );Здесь мы по сути воспроизводим действия из родительской темы: получаем из админки две предусмотренные разработчиком настройки с помощью функции
get_theme_mod(). Если галочка включена, передаём в JS значение'on', иначе'off'. У меня нет возможности протестировать этот кусочек сейчас, но по идее настройки должны сработать.Не туда 🙂 Вот так:
function replace_parent_js_scripts() { $handler = 'color-blog-custom-scripts'; $version = null; // Отключаем вывод родительского скрипта (если он выводится) wp_dequeue_script( $handler ); // Отзываем регистрацию и освобождаем хэндлер wp_deregister_script( $handler ); // Регистрируем скрипт заново, уже со ссылкой на измененный файл wp_register_script( $handler, get_stylesheet_directory_uri() . '/mt-custom-scripts-fix.js', array( 'jquery' ), $version, true ); // Можно здесь же добавить и вывод скрипта, // хотя я бы вызывал его выборочно // в конкретных нужных шаблонах wp_enqueue_script( $handler ); // Передаём в JS скрипт объект с настройками слайдера wp_localize_script( $handler, 'color_blogObject', array( 'menu_sticky' => 'on', 'wow_effect' => 'on' ) ); } add_action( 'wp_enqueue_scripts', 'replace_parent_js_scripts', 11 );Суть в том, что после вывода скрипта туда нужно передать объект с настройками (видимо из админки). Поскольку мы отключили родительский скрипт, этот объект не передался в ваш дочерний вариант. Он пытается найти настройки (объект color_blogObject), котрых нет. Поэтому скрипт выдаёт ошибку (вы можете её увидеть в консоли).
Мы добавляем в код функцию wp_localize_script(), которая передаёт в JS объект «настроек» (временную заглушку). Если ошибка исчезнет и слайдер отобразится, можно будет добавить пару строк, чтобы туда передавались реальные настройки из админки.
- Ответ изменён 6 лет, 1 месяц назад пользователем Norske. Причина: разметка
Попробуйте добавить в мой код после
wp_enqueue_script( $handler );вот это:wp_localize_script( $handler, 'color_blogObject', array( 'menu_sticky' => 'on', 'wow_effect' => 'on' ) );- Ответ изменён 6 лет, 1 месяц назад пользователем Norske.
Форум: Проблемы и решения
Тема: Подключение сертификата безопасностиВ дополнение: если сайт не слишком нагруженный, возможно, есть смысл просто использовать плагин. Например, Really Simple SSL. Если вы не слишком увлечены администрированием серверов на уровне сертификатов и протоколов, это хороший вариант, из серии «включил и забыл».
Теоретически, должно хватить и первого — результат эквивалентный. Разница здесь только в том, что в первом случае вы «перезаписываете» родительский хендлер, а во втором сначала «удаляете» его, а потом «создаёте заново». Второй подход по идее слегка избыточен, но удобен для отладки при проблемах. Если первый код справляется, оставляйте его.
Форум: Проблемы и решения
Тема: Перестали работать ссылкиЭто похоже на фильтрацию тегов при выводе html. Посмотрите, разрешен ли у вас вывод ссылок в функциях kses.
<?php echo allowed_tags(); ?>Возможно, эти ссылки содержат какие-то дополнительные атрибуты, не разрешенные при фильтрации
wp_kses_post(). В этом случае весь тег<a ...></a>будет вырезаться при выводе. Тогда нужно либо удалить проблемные атрибуты в редакторе, либо разрешить их через фильтрpre_kses. (Либо выводить контент страницы без использованияthe_content(), с собственной фильрацией).Нужный вам хэндлер
'color-blog-custom-scripts'.Строчка вызова этого скрипта находится в файле inc/template-functions.php:
wp_enqueue_script( ‘color-blog-custom-scripts’, get_template_directory_uri() .’/assets/js/mt-custom-scripts.js’, array(‘jquery’), esc_attr( $color_blog_theme_version ), true );Добрый день!
Если вы хотите полностью исключить родительский файл, попробуйте отозвать его регистрацию с помощью функции
wp_deregister_script(). Что-то наподобие:function replace_parent_js_scripts() { $handler = 'mt-custom-scripts'; $version = null; // Отключаем вывод родительского скрипта (если он выводится) wp_dequeue_script( $handler ); // Отзываем регистрацию и освобождаем хэндлер wp_deregister_script( $handler ); // Регистрируем скрипт заново, уже со ссылкой на измененный файл wp_register_script( $handler, get_stylesheet_directory_uri() . '/mt-custom-scripts-fix.js', array( 'jquery' ), $version, true ); // Можно здесь же добавить и вывод скрипта, // хотя я бы вызывал его выборочно // в конкретных нужных шаблонах wp_enqueue_script( $handler ); } add_action( 'wp_enqueue_scripts', 'replace_parent_js_scripts', 11 );Это несколько избыточный подход, но в проблемных случаях лучше писать так.
Пара заметок:
- Иногда «отключенный» скрипт попросту зависает в кэше и в результате даже правильный код не даёт нужного результата. В таких случаях может помочь добавление версии скрипта в переменную $version.
- Часто проблемы возникают из-за путаницы с путями (пропущенный слэш, неправильный относительный путь внутри каталога — например, пропущенная подпапка скриптов «js/» и т.п.). Хорошо бы убедиться, что запрашиваемый файл лежит именно там, откуда вы его запрашиваете (в консоли).
- Юрий верно заметил, что нужно правильно подобрать приоритет add_action() (третий параметр должен быть выше, чем в родительской теме; по-умолчанию там 10, но может оказаться и больше).
- Ответ изменён 6 лет, 1 месяц назад пользователем Norske. Причина: разметка
Форум: Проблемы и решения
Тема: Обратный отсчётДобрый день!
Если пропал блок настроек, причин может быть много, самые простые такие:
а) Поле просто скрыто с экрана. Найдите в правом верхнем углу надпись «Настройки экрана», нажмите, посмотрите нет ли там галочки для вашей пропавшей настройки. Если есть, поставьте её и настройка появится на прежнем месте.
б) При восстановлении страницы изменились какие-то её настройки, которые соответствовали условиям показа произвольных полей (если, например, ваш счетчик был сделан с помощью плагина Advanced Custom Fields и настройка выводилась только для записей с определенным адресом, типом или рубрикой). Попробуйте найти в левом меню админки (обычно снизу) пункт «Группы полей» (или Custom Fields). Если он есть, зайдите туда и поищите группу полей, связанную с вашей настройкой. Она может назваться как по типу поля (счётчик, обратный отсчёт и т.п.), так и по типу страницы (главная, спецпредложения или как-то ещё). Если найдётся, то там нужно просмотреть условия показа поля. И настроить так, чтобы ваша страница со счетчиком им соответствовала.
в) случайно отключили/удалили какой-то плагин, который собственно и внедряд счётчик. Попробуйте перейти в настройки плагинов (Плагины -> Установленные) и найти там что-то похожее среди «Неактивных». Если найдётся — наведите мышку и нажмите ссылку «Активировать».
Могут быть и другие причины, разные, но их нужно искать с чуть более глубоким уровнем знаний, т.к. требуется лезть в файлы сайта. А варианты указанные выше чисто «пользовательские» — из тех, которые вы сможете определить и исправить своими силами. Самые простые случаи, если опция пропала «сама».
- Ответ изменён 6 лет, 1 месяц назад пользователем Norske. Причина: опечатки
Добрый день!
Интересный вопрос. Разобрался.
Вкратце:
1. Действительно, дополнительные размеры для больших картинок генерируются.
2. Оказалось, это новое штатное поведение. Оно появилось в версии 5.3, относительно недавно. Поэтому и «никто не замечал».
3. Можно отключить с помощью фильтров и напильника (теоретически, лично не тестировал).Теперь подробности.
Первоисточник
Новое поведение картинок описано в статье «Представляем обработку больших изображений в WordPress 5.3» (текст англоязычный). Обосновывается тем, что огромные изображения зачастую загружаются прямо с камер и нуждаются в подгонке под «веб-оптимальный максимальный размер». (Мнение авторов, не моё. Обсуждать само решение здесь не стоит, лучше сделать это в первоисточнике 🙂 Ниже выжимка из статьи и кое-какие заметки.
Как происходит обработка полноразмерных картинок
При загрузке нового изображения WordPresss проверяет его высоту и ширину. Если размер одной из сторон превышает порог
big_image(по умолчанию равный 2560px), изображение считается «большим». Порог можно переопределить новым фильтромbig_image_size_threshold.Если изображение «большое», автоматически создается его уменьшенная версия. Её максимальная ширина и высота ограничены значением порога. Такая уменьшенная версия используется в качестве наибольшего доступного формата изображения. Оригинал при этом сохраняется в папке загрузок и его имя хранится в массиве мета-данных изображения в ключе
original_image. Путь к оригиналу можно получить с помощью новой функцииwp_get_original_image_path().Как отключить всё это
а) [Официальная рекомендация авторов:] Использовать всё тот же фильтр
big_image_size_threshold, возвратив емуfalse.
add_filter( 'big_image_size_threshold', '__return_false' );
Пара нюансов есть в комментариях к первоисточнику. И ещё есть вот это замечание, о том, что может понадобиться отдельно вычистить и промежуточные форматы для ретинных изображений.function filter_image_sizes( $sizes) { unset( $sizes['1536x1536']); // disable 2x medium-large size unset( $sizes['2048x2048']); // disable 2x large size return $sizes; } add_filter('intermediate_image_sizes_advanced', 'filter_image_sizes');б) [«Ленивый» пользовательский вариант:] Использовать плагин Disable Big Image Treshold.
в) [Радикально, хардкор:] Перейти на ClassicPress. Тем самым, избавиться от всяких неожиданных сюрпризов, вроде Гутенберга в ядре, внезапно распухающих картинок и прочих сыроватых и неоднозначных идей, которые неконтролируемо навязываются с версии 5.0+.
Дополнительные заметки в помощь
1. Возможно, есть смысл просмотреть все зарегистрированные размеры изображений с помощью
get_intermediate_image_sizes(). Обычно я пользуюсь ей, чтобы исключить подобные сюрпризы (в том числе в ядре, т.к. в последнее время нововведения появляются быстрее, чем успевают нормально документироваться и читаться).2. В критичных проектах с большой базой картинок иногда проще использовать белый лист разрешенных изображений, примерно так:
function remove_unused_image_sizes() { $allowed_sizes = array( 'thumbnail', 'medium', 'large' ); $registered_sizes = get_intermediate_image_sizes(); foreach ( $registered_sizes as $size ) { if ( ! in_array( $size, $allowed_sizes ) ) { remove_image_size( $size ); } } } add_action('init', 'remove_unused_image_sizes');Это страхует от распухания папки загрузок, но требует внимательности при подключении плагинов, работающих с изображениями (например, ACF Image Crop и т.п.).
3. После всех манипуляций лучше пройтись по базе каким-нибудь чистильщиком, чтобы повырезать остатки от неиспользуемых форматов и битые ссылки. Плагинов море, я пользуюсь Media Cleaner Pro.
Успехов!
Форум: Переводы
Тема: Множественный перевод слова (POEdit)Добрый день!
Решение есть. Но чтобы строка поддерживала перевод с учетом форм множественного числа, она должна быть предварительно размечена в коде с помощью специальной функции _n().
Именно эта функция позволяет подменять перевод в зависимости от числа [отзывов] и указывает программам перевода, что для данной строки нужно выделить несколько отдельных полей. Таким образом, в первую очередь нужно убедиться, что вы пытаетесь перевести строку, которая правильно подготовлена для перевода.
Если строка размечена правильно, она попадает в соответствующий языковой файл (.po/.pot) именно как строка с учетом форм множественного числа (plural). И перевод файла с такими строками можно без проблем сделать практически любым профильным инструментом.
Настройка Poedit
Poedit тоже умеет работать со множественными числами. Режим работы зависит от языка и в случае WordPress может быть уже настроен по умолчанию. И даже если не настроен, это всегда можно сделать вручную следующим образом:
- Открыть меню «Каталог» > «Свойства»
- Найти на вкладке поле «Формы множественного числа» и переключить его в режим «Пользовательское выражение».
- Скопировать в него следующую строку:
nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
Пусть это выражение вас не пугает, оно всего лишь определяет нужную форму множественного числа с учетом норм русского языка.
Скриншот настроек Poedit:
https://habrastorage.org/webt/uj/o5/t4/ujo5t4qchfop02s30vzb_1up4ts.pngСкриншот результата (см. вкладки для разных форм числа в поле перевода):
https://habrastorage.org/webt/ge/ev/9z/geev9zra0argwap9f0bbbhg9dgo.pngКак правило, Poedit нормально настроен по умолчанию, так что скорее всего дело ваша строка просто неразмечена в коде. Нужно выяснить, откуда конкретно она возникает (плагин, тема, произвольное поле, ваш собственный код, ещё что-то?) и дальше решать по ситуации.
Добрый день!
Делал подобное пару лет назад. Точное решение навскидку не вспомню, но по ощущению надо копать куда-то в сторону эндпоинтов:
add_rewrite_endpoint()и смежных доков. Попробуйте начать отсюда: https://wp-kama.ru/function/add_rewrite_endpoint Типовой механизм преобразования GET-параметров в ЧПУ абсолютно точно существует и я почти уверен, что ответ где-то на расстоянии пары ссылок от эндпоинтов 🙂P.S. Если не сложится, напишите, постараюсь на неделе поискать исходники того проекта.