X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Удаление картинки только из первых 100 знаков поста
Aborigen
Aborigen
Topic Starter сообщение 25.12.2015, 19:00; Ответить: Aborigen
Сообщение #1


Участник
***

Группа: User
Сообщений: 146
Регистрация: 10.7.2013
Из: Ахтырка
Поблагодарили: 12 раз
Репутация:   3  


Доброго времени суток! После смены шаблона на WP сайте в начале каждого опубликованного ранее поста появились картинки (до этого они обрабатывались шаблоном как миниатюры). Чтобы исправить это, я прописал в functions.php следующий скрипт:
Развернуть/Свернуть
function deleteFirstImages($content) {
$content = preg_replace("/<img[^>]+\\>/i", "", $content, 1);
return $content;
}
add_filter ('the_content', 'deleteFirstImages');
Теперь удаляется любая первая картинка. Как можно поставить условие для удаления картинки, находящейся только в пределах первых 100 знаков? Заранее благодарен!

Сообщение отредактировал Aborigen - 25.12.2015, 19:02


--------------------
Качественный перевод статей и новостей для сайтов тематики IT, софт, игры, Android, Photoshop.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SpaceX
SpaceX
сообщение 25.12.2015, 20:00; Ответить: SpaceX
Сообщение #2


Участник
***

Группа: User
Сообщений: 205
Регистрация: 13.3.2011
Поблагодарили: 66 раз
Репутация:   18  


как вариант поставить проверку..

Код
$pos=STRPOS($content, "<img");
IF(($pos !== FALSE) AND ($pos <= 100)){
    ...
}


вот так правильно...

Сообщение отредактировал SpaceX - 25.12.2015, 20:05


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Aborigen
Aborigen
Topic Starter сообщение 26.12.2015, 13:42; Ответить: Aborigen
Сообщение #3


Участник
***

Группа: User
Сообщений: 146
Регистрация: 10.7.2013
Из: Ахтырка
Поблагодарили: 12 раз
Репутация:   3  


SpaceX, Я так понял, что нужно ставить мой код туда, где три точки? Но тогда код не работает.


--------------------
Качественный перевод статей и новостей для сайтов тематики IT, софт, игры, Android, Photoshop.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
mmkulikov
mmkulikov
сообщение 26.12.2015, 14:18; Ответить: mmkulikov
Сообщение #4


Старожил
******

Группа: Active User
Сообщений: 2023
Регистрация: 21.9.2012
Из: СССР
Поблагодарили: 587 раз
Репутация:   68  


Код
function deleteFirstImages($content) {
$pos=STRPOS($content, "<img");
IF(($pos !== FALSE) AND ($pos <= 100)){
   $content = preg_replace("/<img[^>]+\\>/i", "", $content, 1);
}
return $content;
}
add_filter ('the_content', 'deleteFirstImages');

Где-то так. На синтаксические/грамматические ошибки не проверял :pardon:


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
IQ_Крым
IQ_Крым
сообщение 30.12.2015, 0:13; Ответить: IQ_Крым
Сообщение #5


Новичок
*

Группа: User
Сообщений: 48
Регистрация: 29.6.2015
Из: Крым
Поблагодарили: 6 раз
Репутация:   -2  


Я так понимаю, в переменной $content лежит ваш текст, из которого нужно убрать картинки? Но ведь первые 100 знаков включают в себя и html код? Если там html-кода будет очень много, то в первые 100 знаков могут войти всего несколько слов или даже ни одного. Я вижу тут только один алгоритм, у него есть минусы: он сложен и его выполнение программой будет занимать много времени. Описываю.
Можно написать цикл, который будет разделять текст контента на массив, содержащий html-части и текст. К примеру, у вас есть:
Код
<p>На днях <a href='//ru.ru/я'>я</a> посетил замечательный немецкий город. Делюсь впечатлениями:<img src='//ru.ru/img/1.png'></p>

в массив будет записываться:
Код
$arr = arrey(
1=> "<p>",
2=> "На днях ",
3=> "<a href='//ru.ru/я'>",
4=> "я",
5=> "</a>",
6=> " посетил замечательный немецкий город. Делюсь впечатлениями:",
7=> "<img src='//ru.ru/img/1.png'>",
8=> "</p>",
)

и т.д.
В процессе записи этого массива вы проверяете записываемый элемент. Когда попадается фрагмент текста, вы считаете кол-во символов и прибавляете его к переменной $num_characters. Если попадается html-фрагмент - удаляете из него все теги img перед записью в массив. При каждой итерации проверяете переменную $num_characters и когда её значение перейдёт за 100 - завершите цикл, загрузив всю оставшуюся необработанную часть кода в последний элемент массива. После этого снова собираете все элементы массива в одну переменную $content

Однако, я бы вам не рекомендовал использовать этот метод именно в шаблоне, он допустим разве что при записывании статей в БД. Можно попробовать другие методы решения, на front-end. Хотелось бы увидеть сам сайт, чтобы понять, с какой именно проблемой имеем дело.

Сообщение отредактировал IQ_Крым - 30.12.2015, 0:14
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Редирект только главной страницы
301 редирект
0 Gera 257 Вчера, 19:21
автор: Gera
Горячая тема (нет новых ответов) Juddy.biz - конвертация мобильного трафика на все 100
107 juddy 42639 Вчера, 16:19
автор: juddy
Открытая тема (нет новых ответов) Чем сжимать картинки для сайта без потери качества
1st-finstep.ru - Заработок в сети и методы продвижения сайта
12 komarik_vlad 1211 Вчера, 14:47
автор: myaltai
Горячая тема (нет новых ответов) Домены ru com net org ТИЦ10-100, ПР1-4, большой выбор
143 Profi 56569 12.12.2017, 0:48
автор: ponita
Открытая тема (нет новых ответов) Рутина и не только
6 ropique 1001 11.12.2017, 6:49
автор: Denis_ua


 



RSS Текстовая версия Сейчас: 15.12.2017, 1:21
Дизайн