Поддержка Плагины Изменение add_filter плагина в functions.php шаблона

  • Есть плагин в файле которого есть фильтр:
    add_filter(‘the_content’, ‘irp_the_content’, 99999);
    function irp_the_content($content) {..}
    Который выводить в контенте: «текст, текст, текст»

    Мне же нужно этот фильтр изменить в functions.php шаблона таким образом что бы текст выводился в div-e:
    «<div>текст, текст, текст</div>»

Просмотр 15 ответов — с 1 по 15 (всего 15)
  • Модератор Yuri

    (@yube)

    Мне же нужно этот фильтр изменить в functions.php шаблона

    Не шаблона, а темы. См. ЧАВО/Терминология « WordPress Codex.

    таким образом что бы текст выводился в div-e:

    Поскольку Вы решили спрятать от нас то, что собственно и формирует «текст, текст, текст» — содержимое функции irp_the_content(), можно дать только самую общую рекомендацию: там, где в теле функции "текст, текст, текст", сделать "<div>текст, текст, текст</div>".

    p.s. Простите, но писать трактат про замещаемые функции, фильтры и прочие различные варианты использования API и трюки в ответ на спрятанную функцию нет ни малейшего желания.

    • Ответ изменён 6 лет, 1 месяц назад пользователем Yuri. Причина: p.s

    Без проблем, вот вся функция, это функция плагина «Inline Related Posts (v.2.2.0)»
    Просто в самом плагине поправить можно, но если плагин обновится соответственно и модификация пропадет, а в теме она даже после обновления плагина работать будет!

    add_filter('the_content', 'irp_the_content', 99999);
    function irp_the_content($content) {
        global $irp, $post;
    
        if($irp->Plugin->isActive(IRP_PLUGINS_INTELLY_RELATED_POSTS_PRO)) {
            return $content;
        }
    
        $irp->Log->startTime('irp_the_content');
        if(!$post || trim($content)=='') {
            return $content;
        }
    
        if($irp->Options->getPostShown()===FALSE || is_null($irp->Options->getPostShown())) {
            $irp->Options->initRelatedPostsIds(NULL);
            $irp->Options->setPostShown(NULL);
            if($post && isset($post->ID) && is_single($post->ID)) {
                $irp->Options->setPostShown($post);
                $args=array('postId'=>$post->ID, 'shuffle'=>TRUE, 'count'=>-1);
                $ids=$irp->Manager->getRelatedPostsIds($args);
                $irp->Options->initRelatedPostsIds($ids);
                //$irp->Log->info('POST ID=%s IS SHOWN, RELATED POSTS=%s', $post->ID, $ids);
            }
        } else {
            $irp->Options->refreshRelatedPostsIds();
        }
    
        if($irp->Options->isPostShownExcluded()) {
            $irp->Log->error('TheContent: POST UNDEFINED OR POST EXCLUDED');
            return $content;
        }
    
        if(!$irp->Options->isActive() || !$irp->Options->isRewriteActive()) {
            $irp->Log->error('TheContent: NOT ACTIVE NOT REWRITE ACTIVE');
            return $content;
        }
        if($irp->Options->isShortcodeUsed()) {
            $irp->Log->error('TheContent: NOT ACTIVE DUE TO SHORTCODE USED');
            return $content;
        }
        if(!$irp->Options->hasRelatedPostsIds()) {
            $irp->Log->error('TheContent: NOT ACTIVE DUE TO WITHOUT RELATED POSTS');
            return $content;
        }
    
        $body=$content;
        /*if(strpos($body, '[irp')!==FALSE) {
            $irp->Log->error('TheContent: SHORTCODE DETECTED');
            $irp->Options->setShortcodeUsed(TRUE);
            return;
        }*/
    
        $context=new IRP_HTMLContext();
        $irp->Options->setRewriteBoxesWritten(0);
        $body=$context->execute($body);
        $irp->Log->pauseTime();
        $irp->Log->info('TheContent: BODY SUCCESSULLY CREATED');
        //$body=apply_filters('the_content', $body);
        //$post->post_content=$body;
        return $body;
    }
    • Ответ изменён 6 лет, 1 месяц назад пользователем rudoy24.

    Отключить в functions.php темы можно простым способом:
    remove_filter('the_content', 'irp_the_content', 99999);

    А как обратно подключить что бы содержание вывелось в блоке между тегами <div>…</div> ?

    • Ответ изменён 6 лет, 1 месяц назад пользователем rudoy24.
    Модератор Yuri

    (@yube)

    Другое ж дело! 🙂

    Количество комментов в функции заставляет задуматься.

    Это стандартный код из плагина «Inline Related Posts (v.2.2.0)», никаких правок в него не вносилось!

    • Ответ изменён 6 лет, 1 месяц назад пользователем rudoy24.
    • Ответ изменён 6 лет, 1 месяц назад пользователем rudoy24.
    Модератор Yuri

    (@yube)

    Отключить и переподключить — не проблема. И вызвать отдельно от фильтра тоже. Вопрос в том, как отделить «мух от котлет».

    Как вариант — вызвать всю эту байду на пустой контент, результат обернуть в div и присобачить к реальному контенту.

    Я еще не успел осознать, что этот монстр делает, поэтому могу написать глупость 🙂

    По факту он добавляет в контент ссылку перелинковки на другие записи — https://ru.wordpress.org/plugins/intelly-related-posts/
    В разные места контента в зависимости от настроек.

    А нужно что бы эти ссылки выводились между тегами div.

    • Ответ изменён 6 лет, 1 месяц назад пользователем rudoy24.
    Модератор Yuri

    (@yube)

    В разные места контента в зависимости от настроек.

    Вот это плохо.

    Как бы не пришлось делать свой класс, наследующий irp, и в нем делать функцию, которая формирует это бла-бла-бла. Ждать, что автор этого чудо-кода использовал фильтры, боюсь, не приходится.

    Формирование бла-бла-бла находится где-то глубоко, глубже чем $context->execute(), которая его использует.

    Модератор Yuri

    (@yube)

    А он вообще во что-то оборачивает свои добавки к контенту?

    Намекаете что проще будет через replace сделать?
    Да добавляет уже 1 div, но у него нету класса или id.
    А div-ы в контенте могут и другие встречаться!

    • Ответ изменён 6 лет, 1 месяц назад пользователем rudoy24.
    Модератор Yuri

    (@yube)

    Намекаете что проще будет через replace сделать?

    Ага 🙂

    Да добавляет уже 1 div, но у него нету класса или id.

    🙁

    Модератор Yuri

    (@yube)

    Зато у него внутри есть <!-- INLINE RELATED POSTS 1/3 //-->. Можно ловить div регуляркой по нему. А еще можно включить Display «Powered by» text (and show us some love 🙂 и ловить по тексту Inline Related Posts. Как по мне, то это менее заморочливо, чем создавать класс-наследник (ненавижу ООП).

    Модератор Yuri

    (@yube)

    Еще лучше придумал!
    В настройках ставим CSS margin-bottom: 666XXX
    Чудище порождает

    <div style="clear:both; margin-top:0em; margin-bottom:666XXX;">
    

    А дальше регуляркой меняем 6666XXX; на 0;" class="irp
    Profit!

    Ок, спасибо, попробую.

Просмотр 15 ответов — с 1 по 15 (всего 15)
  • Тема «Изменение add_filter плагина в functions.php шаблона» закрыта для новых ответов.