Модератор
Yui
(@fierevere)
永子
в следующем релизе wordpress будет исправлено
https://core.trac.wordpress.org/ticket/37989
Сам движок не обновлял
автообновление 4.6.0 до 4.6.1 сработало
ошибка была внесена исправлением безопасности, так что, пока поисправляйте вручную
и/или используйте предложенный в тикете патч, если планируется загружать много картинок
-
Ответ изменён 8 лет, 6 месяцев назад пользователем
Yui.
Yui, спасибо!
Смущает одно, у меня текущая версия WP 4.4.5
Возможно поэтому workaround от @sergeybiryukov валит сайт с 500-й ошибкой, а 3 diff’а от joemcgill выглядят иначе нежели мой текущий код…
Смущает одно, у меня текущая версия WP 4.4.5
обновления безопасности затрагивают все линейки версий движка.
у меня текущая версия WP 4.4.5
Там та же самая проблема: https://core.trac.wordpress.org/ticket/37989#comment:3
workaround от @sergeybiryukov валит сайт с 500-й ошибкой
Что-то не так вставили, нужно смотреть логи.
@sergeybiryukov, вставляю в самый конец файла functions.php используемой темы вот этот код:
function wp37989_fix_encoded_attachment_titles( $data, $postarr ) {
$basename = pathinfo( $postarr['file'], PATHINFO_BASENAME );
$data['post_title'] = sanitize_text_field( $basename );
return $data;
}
add_filter( 'wp_insert_attachment_data', 'wp37989_fix_encoded_attachment_titles', 10, 2 );
Сайт падает с 500-й ошибкой, в логах это:
[Wed Sep 21 15:49:43.796824 2016] [:error] [pid 8962] [client 5.35.81.65:49697] PHP Fatal error: Cannot redeclare wp37989_fix_encoded_attachment_titles() (previously declared in /home/u440037/ddd.com/www/wp-content/themes/ddd/functions.php:393) in /home/u440037/ddd.com/www/wp-content/themes/ddd/functions.php on line 393, referer: http://www.ddd.com/wp-admin/post.php?post=9086&action=edit
@flector, спасибо!
Не знал…
PHP Fatal error: Cannot redeclare wp37989_fix_encoded_attachment_titles() (previously declared in /home/u440037/ddd.com/www/wp-content/themes/ddd/functions.php:393)
Судя по логам, функция вставлена два раза — достаточно одного 🙂
@sergeybiryukov, я не тупее паровоза 🙂
Этот код вставляется только один раз.
На всякий случай прошелся поиском по содержимому всех файлов сайта, может она где затесалась — нет, никаких упоминаний о «wp37989_fix» нет.
Может functions.php где-то подхватывается несколько раз ?…
Хотя искал я напрасно, из ошибки видно что она возникает в строке 393 и ругается что функция уже объявлена на той же 393 строке.
Змея жрет сама себя…
Может functions.php где-то подхватывается несколько раз ?…
Это возможно, хотя в общем случае такого быть не должно. Вероятно, дочерняя тема подключает файл функций родительской, несмотря на то, что он и так подключается?
Попробуйте обернуть код в условие if ( ! function_exists() )
:
if ( ! function_exists( 'wp37989_fix_encoded_attachment_titles' ) ) :
function wp37989_fix_encoded_attachment_titles( $data, $postarr ) {
$basename = pathinfo( $postarr['file'], PATHINFO_BASENAME );
$data['post_title'] = sanitize_text_field( $basename );
return $data;
}
add_filter( 'wp_insert_attachment_data', 'wp37989_fix_encoded_attachment_titles', 10, 2 );
endif;
@sergeybiryukov, сложно сказать, я с внутренностями WP недавно столкнулся, тема писалась на заказ, всё может быть.
Ваше решение от fatal errer’а избавило. спасибо! 🙂
Только обнаружилась проблемка, закачиваю файл с именем «привет тест.jpg», в post_title пишется «-test.jpg»
В файловую систему файл ложится в виде «привет-тест.jpg»…
Что-то обрезает текст слева от «-«.
Когда закачивал файл «тест.jpg», создался новый «тест-2.jpg» и отобразился как «-2.jpg».
Опечатка, post_title пишется «-test.jpg» = post_title пишется «-тест.jpg»
@sergeybiryukov, пробовал играться со значением параметров add_filter(); в лучшем случае получал тот же результат — стирается первое слово.
В чем может быть проблема?
Не знаю, может я один такой, у кого фикс от @sergeybiryukov не работает до конца…
Считал что лезть в код движка недопустимо, но работать как-то нужно.
В итоге убрал из functions.php темы «workaround» и заменил в /wp-admin/inclides/media.php строка 289
$title = sanitize_title( $name );
на
$title = sanitize_text_field( $name );
Всё отлично заработало.