noindex
Ответы в темах
-
Ида. Регулярки — и есть «рутиная работа со строками» 🙂
@sevlad, факт:) Но одно дело выполнить поиск с подстановкой по мегабайту данных, а другое дело воткнуть нужный кусок данных в процессе сборки… На глаз разницы можно не увидеть, но на более менее посещаемом проекте это уже может начать давать о себе знать.
Но я понял что процесса сборки в моём случае нет, по-крайней мере на выходе.Но самое главное — нужно всё же определиться когда менять. На входе или на выходе? Или поменять уже существующее?
И почему, если на входе, то почему невозможно это делать одновременно с ручной заменой тайтла?
Если не возможно, но нужно, то в wp_update_post передавать уже обработанный контент.@sevlad, я исхожу из того что есть сотни статей, а в них тысячи картинок, которые нужно начать выводить по новым правилам.
Исходя из того что массовой правки по каким либо поводам не предвидится, обработка на выходе была для меня предпочтительной.
Но с учетом услышанного я теперь смотрю в сторону замены в базе + обработки на входе.И да, у картинок в ВП есть ещё параметр caption. Можно его использовать для «вывода текста под картинкой».
@sevlad, знаю я про
caption
😉
Несколько дней назад я даже задавал тут вопрос, почти такой же, по поводу caption, но не получил ни одного ответа. После чего решил всё упростить.В теле записи хранится уже готовый HTML-код, поменять в нём что-то можно только до вставки изображения в запись. А после — только через the_content.
@sergeybiryukov, да, видимо ступил.
Сбило с толку отличие кода картинки в админке от кода во фронте, но видимо это как раз регулярками и делается…Админка:
<a href="/wp-content/uploads/2016/11/91_image2.jpeg" rel="attachment wp-att-10442"><img class="alignleft wp-image-10442 size-full" title="Заголовок" src="/wp-content/uploads/2016/11/91_image2_s.jpeg" alt="91_image2_s" width="300" height="200" /></a>
Фронт:
<a href="/wp-content/uploads/2016/11/91_image2.jpeg" rel="attachment wp-att-10442"><img class="alignleft wp-image-10442 size-full" title="Заголовок" src="/wp-content/uploads/2016/11/91_image2_s.jpeg" alt="91_image2_s" width="300" height="200" srcset="/wp-content/uploads/2016/11/91_image2_s.jpeg 300w, /wp-content/uploads/2016/11/91_image2_s-271x181.jpeg 271w" sizes="(max-width: 300px) 100vw, 300px" /></a>
- Ответ изменён 7 лет, 11 месяцев назад пользователем noindex.
Хук на вывод, не применяя вышеизложеное — это:
прогонять через регулярки каждый пост при каждой загрузке не очень хороший вариант…
@sevlad, проблема в том что я с хуками раньше не работал и представляю их структуру и возможности в общих чертах. Когда Вы предложили как вариант работать через the_content именно так (регулярками через весь текст поста делать поиск/подстановку) мне это всё и представилось, и эта картина мене не порадовала.
Поэтому я начал спрашивать о более локальных функциях, на которые можно повесить хук.
Я имел в виду функции сборки изображений в теле поста.
Перед тем как слить все составляющие в итоговый HTML, на этапе сборки
<img class="alignleft wp-image-10445 size-full" title="Заголовок" src="/wp-content/uploads/2016/11/97_image3_s.jpeg" alt="97_image3_s" width="200" height="300">
Докинуть в конец
<p>Заголовок</p>
Соответственно никаких регулярок не предполагается, рутиная работа со строками…
Или я что-то не понимаю и по каким-то соображениям это сделать невозможно?Можно ещё одно решение собрать «на коленке» с помощью jQuery:
@denisco, такой способ приходил в голову и он очень удобен, если клиентская честь не перегружена, но есть один момент — SEO, с точки зрения которого все нужные надписи должны быть на странице без манипуляций на клиенте…
Движок и так делает ряд преобразований при выводе контента (расстановка тегов абзаца, автозамена символов типографики и т.д.), поэтому ещё одна-две замены вряд ли существенно появлияют на производительность.
@sergeybiryukov, то что движок перед тем как вывести страницу делает массу в той или иной степени ресурсоёмких телодвижений понятно, просто глубоко в голове заноза «если можно сделать так что бы работало быстрее, при схожих трудозатратах — делай так что бы работало быстрее».
К тому же сайт и так работает не особо быстро, в силу приложения рук различных товарищей, в т.ч. и меня 😉@sevlad, не хочу плодить кучу букв ради призрачной надежды доказать что что-то подразумевалось:)
Просто мы с Вами работаем с WP по-разному и по-разному трактуем задачи.Делать что нужно сразу в посте мешает количество уже готовых постов, а задача поставлена не при наполнении, а после.
На апдейт поста вешать хук смысла особого нет по той же причине, идти по сотням постов и пересохранять их не лучший вариант.
the_content в принципе подходит, т.е. сделать то что нужно можно, только есть предположение что вместо того чтобы вешать хук сразу на весь контент поста, можно повесить на функцию вывода картинок, что было бы правильнее, нет?
Я хуков для WP ни разу не писал, только читал общие описания и примеры.
Возможно поэтому задаю и глупый вопрос…@sevlad, сорри, был уверен что опущенные подробности не уведут в совсем другую сторону.
То что у картинки может измениться title через админку и то что его может не быть, считал само самим разумеющимся.the_content не слишком большое поле для деятельности?
Натыкался на упоминание wp_get_attachment_image и т.д., или подобные функции не подойдут?@sevlad, без php тут наверное не обойтись.
Смотрите, есть картинка, у неё есть title (а может и не быть).
При выводе этой картинки мне нужно под ней вывести этот title, точнее кусок статики + этот title.
В любой момент у картинки могут поменять этот title, соответственно динамически должна смениться и подпись под ней.
Соответственно если title пустой вообще ничего не выводим.Т.е. подход когда данные меняются в базе изначально не подходит, ну если конечно не идти на компромисс и извращения через крон например, чего не хотелось бы.
@sevlad, честно говоря пока не встречался с плагинами, которые меняют post_content, обычно все работают в онлайне, не думал что этот исключение 🙂
Есть только один нюанс, который я опустил дабы упростить задачу, но тем самым её исказил — добавляется не статичный контент, а содержимое атрибута TITLE тэга IMG, т.е. предполагается php код…
@sevlad, тысячи картинок на сотни постов 🙂
Что-то мне подсказывает что прогонять через регулярки каждый пост при каждой загрузке не очень хороший вариант…
Может через хук это сделать будет проще и првильнее?Не знаю, может я один такой, у кого фикс от @sergeybiryukov не работает до конца…
Считал что лезть в код движка недопустимо, но работать как-то нужно.
В итоге убрал из functions.php темы «workaround» и заменил в /wp-admin/inclides/media.php строка 289$title = sanitize_title( $name );
на
$title = sanitize_text_field( $name );
Всё отлично заработало.
@sergeybiryukov, пробовал играться со значением параметров add_filter(); в лучшем случае получал тот же результат — стирается первое слово.
В чем может быть проблема?Опечатка, post_title пишется «-test.jpg» = post_title пишется «-тест.jpg»
@sergeybiryukov, сложно сказать, я с внутренностями WP недавно столкнулся, тема писалась на заказ, всё может быть.
Ваше решение от fatal errer’а избавило. спасибо! 🙂
Только обнаружилась проблемка, закачиваю файл с именем «привет тест.jpg», в post_title пишется «-test.jpg»
В файловую систему файл ложится в виде «привет-тест.jpg»…
Что-то обрезает текст слева от «-«.
Когда закачивал файл «тест.jpg», создался новый «тест-2.jpg» и отобразился как «-2.jpg».Хотя искал я напрасно, из ошибки видно что она возникает в строке 393 и ругается что функция уже объявлена на той же 393 строке.
Змея жрет сама себя…@sergeybiryukov, я не тупее паровоза 🙂
Этот код вставляется только один раз.
На всякий случай прошелся поиском по содержимому всех файлов сайта, может она где затесалась — нет, никаких упоминаний о «wp37989_fix» нет.
Может functions.php где-то подхватывается несколько раз ?…@flector, спасибо!
Не знал…@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