Модератор
Юрій
(@yube)
Как-то так
add_filter('the_content','my_dummy_function');
function my_dummy_function($content) {
if ( ! is_single() ) return $content;
$content = preg_replace("/<img .*>/mU", "РЕКЛАМА", $content);
return $content;
}
php.net в помощь по составлению регулярного выражения
спасибо большое! Но заменились все изображения в развёрнутой странице, не только те что в теге more, подскажите что поменять?
я так понимаю условие «/<img .*>/mU», выделяет все картинки в статье и заменяет на то что я задам, слово реклама и т.д.
как завязать что бы выделялись не все картинки в single а только те которые до тега more и не ниже.
Спасибо!
Юрий вот поглядите сайт «http://omelchuck.ru/category/domashnie-dela/bitovie-pribori/» на общей странице картинка, а при переходе там реклама. Никак не могу повторить(((((
https://codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_%D0%BF%D0%BE_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC/get_extended
// Fetch post content
$content = get_post_field( 'post_content', get_the_ID() );
// Get content parts
$content_parts = get_extended( $content );
// Output part before <!--more--> tag
echo $content_parts['main'];
а как его срастить с add_filter ?
Если честно я на 98% по выражениям туп ( Но обратиться некуда, нет ни друзей ни знакомых кто в этом шарит. Одна надежда на вас.
add_filter от Юрия работает так как нужно! Но заменяет все изображения на странице. и до и после тега more. как фильтр завязать с тегом? возможно ли это?
add_filter('the_content','my_dummy_function');
function my_dummy_function($content) {
if ( ! is_single() ) return $content;
$content_parts = get_extended( $content );
$content = preg_replace("/<img .*>/mU", "РЕКЛАМА", $content_parts['main']);
return $content;
}
не проверял, но вроде так.
а на указанном вами сайте никаких замен нет — там на главной выводятся миниатюры записей, а в single.php миниатюр нет, зато прописан код рекламы.
ааа вот оно что! спасибо за столь быстрый и разъеснённый ответ! Сейчас попробую фильтр
Модератор
Юрій
(@yube)
как завязать что бы выделялись не все картинки в single а только те которые до тега more и не ниже.
Подсказка: в том месте, где в исходном тексте было <!--more-->
, при выводе поста целиком обычно появляется <span id="more-NNN"></span>
(где NNN — ID поста). Можно разбить контент на две части по этому «маркеру», заменить в первой части картинку на рекламку, а затем обратно склеить эти две части.
Кстати, такую подмену в части контента можно делать не только фильтром, но и непосредственно в шаблоне, пользуясь глобальной переменной $more и аргументом stripteaser функций the_content/get_the_content.
Попробовал вашу замену, ничего не происходит и фотку не заменяет и на убирает её, не оперирует.
Попробовал вашу замену, ничего не происходит и фотку не заменяет и на убирает её, не оперирует.
оно работает при использовании more тега в записи.
как вы и просили.
сейчас проверил на тестовом сервере — все работает.
сейчас попробовал так:
add_filter('the_content', 'add_adv');
function add_adv($content) {
$BANNER = <<< BANNER
<div>
КОД рекламы
</div>
BANNER;
if (is_single()) $content = preg_replace('|<span id="more-\d+"></span>|', $BANNER, $content);
return $content;
}
сразу в расширенной статье где я обрезал статью тегом море появляется реклама, таким методом работает, но там она не нужна а нужна именно вместо картинки.
Flector забыл запятую, поправил, сработало, но опять на все картинки всего поста.