Поддержка Проблемы и решения Помогите написать небольшую функцию

  • Всем доброго времени суток!
    Требуется создать функцию по выводу обновленного (видоизменённого) содержания the_content();.
    Функцию должна носить такое название function get_the_content_dzen()
    При этом, она должна получать оригинальный текст с оформлением (p,div,span и тд), а затем менять некоторые из этих классов на другие. Так, например, класс span должен автоматически меняться на нужный мне, который я сам выберу.
    Нужно мне все это для создания собственной RSS-ленты под очень редкий сервис.

    Большое Спасибо!

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • и в чем именно заключается ваша проблема?
    не умеете пользоваться регулярками или что?

    Моя проблема в том, что я не мону добиться замены тегов p на другие. Они просто не меняются, ни через str_replace, ни через preg_replace.

    теги p добавляются контенту через фильтр autop. если вам вообще надо убрать теги p, то отключите этот фильтр. если заменить только некоторые p — то обрабатывайте контент в последнюю очередь (укажите приоритет фильтра), чтобы он срабатывал уже после autop.

    Сейчас я вывожу текст в RSS через get_the_content_dzen();
    На выходе получаю отображение <p>, <div>, *img* и другие теги. Мне нужно, чтобы *img* обрамлялись в теги <figure>, то есть заместо <p>*img* было <figure>*img*.
    Вот код функции get_the_content_dzen(); (Позаимствовал и подредактировал у одного из плагинов)

    function get_the_content_dzen() {
    	    
    		$post = get_post();
    		$content = $post->post_content;
    		
    		if(get_option('layf_remove_teaser_from_fulltext', '')) {
    		    if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) {
    		        $content_parts = explode( $matches[0], $content, 2 );
    		        if(count($content_parts) > 1 && !empty($content_parts[1])) {
    		            $content = $content_parts[1];
    		        }
    		    }
    		}
    		$content = str_replace(']]>', ']]>', $content);
    		
    		add_filter('img_caption_shortcode', 'layf_filter_image_caption', 20, 3); //filter caption text
    		add_filter( 'layf_content_feed', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 ); //embed media to HTML
    		
    		add_filter( 'layf_content_feed', 'wptexturize'        );
    		add_filter( 'layf_content_feed', 'convert_smilies'    );
    		add_filter( 'layf_content_feed', 'convert_chars'      );
    		add_filter( 'layf_content_feed', 'wpautop'            );
    		add_filter( 'layf_content_feed', 'shortcode_unautop'  );
    		add_filter( 'layf_content_feed', 'do_shortcode'       );
    		
    		if(get_option('layf_remove_shortcodes', '')) {
    		    add_filter( 'layf_content_feed', 'strip_all_shortcodes'   );
    		}
    		
    		return apply_filters('layf_content_feed', $content);		
    }

    Вот так…

    • Ответ изменён 6 лет, 11 месяцев назад пользователем AppleStage.

    Как сделать вывод краткого описания, чтобы выводился только один текст?
    если использовать
    function dzen_the_excerpt_rss() {
    the_excerpt_rss();
    }
    То перед текстом идет большое количество различных p, div и т.д.

    
    function fb_unautop_4_img( $content )
    { 
        $content = preg_replace( 
            '/<p>\\s*?(<a rel=\"attachment.*?><img.*?><\\/a>|<img.*?>)?\\s*<\\/p>/s', 
            '<figure>$1</figure>', 
            $content 
        ); 
        return $content; 
    } 
    add_filter( 'the_content', 'fb_unautop_4_img', 99 );
    
Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Помогите написать небольшую функцию» закрыта для новых ответов.