Como mostrar o conteúdo da página no feed?

13

Quero mostrar todo o conteúdo de todas as páginas do feed. Procurei e encontrei algum plugin, mas não consegui resolver o meu problema.

Quero que, ao entrar http://swissaudio.com/craftsmanship/feed, forneça o conteúdo da página no feed. Como eu posso fazer isso?

raxa
fonte
só para ter certeza, você está perguntando se deseja mostrar todo o conteúdo de suas postagens no feed, em vez de apenas um resumo, ou adicionar todas as páginas (post_type da página) ao feed também?
1919
@majick eu quero mostrar todo o conteúdo da página na alimentação .I usar este código também mas a mudança resultado ocorrer add_filter('request', 'feed_request'); function feed_request($qv){ $rss_post_types = array('post', 'page'); if(isset($qv['feed']) && !isset($qv['post_type'])) $qv['post_type'] = $rss_post_types; return $qv; }
Raxa
À primeira vista, parece que deve funcionar bem, verifique se você desabilitou qualquer um dos plug-ins que estava testando e também desabilitou os caches durante o teste.
Majick
@majick devido a trabalhos de alimentação de código acima para home page .please verificar este site http://swissaudio.com/feed/Quero mostrar o conteúdo de cada página na alimentação ou seja, para craftsmanshipa página que eu gostaria de fazer algo assim http://swissaudio.com/craftsmanship/feed/, mas ele não mostra nenhum resultado
Raxa
3
isso provou ser muito complicado. Eu testei mais algumas coisas sem sorte, então abri uma recompensa por isso, pois eu mesmo gostaria de conhecer a solução. :-)
majick

Respostas:

7

Primeiro, defina o tipo de postagem para exibir na página principal do feed, ou seja, /feedusando o pre_get_postsgancho

$q->set('post_type', array('post', 'page'));

Na página individual, o WordPress mostra o feed de comentários, defina-o falsee exiba o conteúdo da página no feed.

$q->is_comment_feed = false;

No modelo de feed, as chamadas do WordPress the_excerpt_rss()que chamam get_the_excerpt()usando excerpt_lengthfiltro alteram o tamanho para no máximo.

Exemplo completo: -

add_action('pre_get_posts', 'wpse_227136_feed_content');
/**
 * Set post type in feed content and remove comment feed
 * @param type $q WP Query
 */
function wpse_227136_feed_content($q) {
    //Check if it main query and for feed
    if ($q->is_main_query() && $q->is_feed()) {
        //Set the post types which you want default is post
        $q->set('post_type', array('post', 'page'));
    }

    //Check if it feed request and for single page 
    if ($q->is_main_query() && $q->is_feed() && $q->is_page()) {
        //Set the comment feed to false
        $q->is_comment_feed = false;
    }
}

add_filter( 'excerpt_length', 'wpse_227136_excerpt_length', 999 );
/**
 * Filter the except length to full content.
 *
 * @param int $length Excerpt length.
 * @return int $length modified excerpt length.
 */
function wpse_227136_excerpt_length( $length ) {
    if (is_feed() && !get_option('rss_use_excerpt')) {
        return PHP_INT_MAX;
    }

    return $length;
}
Sumit
fonte
ahh os comentários são padronizados como true. Então é isso..! bem, parece que faria sentido se, ao fazer isso /page/comments/feed/, realmente mostrasse os comentários, alguma idéia de como fazer isso?
Majick 21/05
Bem, acho que para isso precisamos adicionar novas regras de reescrita. Como o WP não o suporta por padrão, ele suporta a string de consulta withoutcomments=1conforme respondida por cjbj. Não sou bom em reescrever URLs: D
Sumit 21/05
1
também não é bom com a reescrita de URLs, decidiu revertê-lo e adicionar suporte para withcomments=1minha resposta.
majick 22/05
para o filtro de comprimento trecho, caso não verificar get_option('rss_use_excerpt')não !get_option('rss_use_excerpt)porque se ele já é falsa um filtro de comprimento trecho não seria necessária, seria exibir o conteúdo completo já. O_o
majick
Bem, eu não sei por que, mas se você verificar esta linha no modelo, core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/… no modelo, isso não afeta essa configuração, é por isso que estou apenas corrigindo o que ele supõe fazer.
Sumit 23/05
4

Isso pode não ser o ideal, mas é um começo. Primeiro, verifique se o conteúdo completo está no feed:

function fullcontentfeed($content) {
    global $post;
    $content = $post->post_content;
    return $content;
    }
add_filter('the_excerpt_rss', 'fullcontentfeed');

Você deverá ver o feed completo neste URL

http://swissaudio.com/craftsmanship/feed/?withoutcomments=1

Você pode usar add_rewrite_rulepara redirecionar visitantes de / feed /. Longe do ideal, mas talvez seja um começo para alguém trabalhar.

cjbj
fonte
usar return get_the_content_feed()seria melhor porque também aplica the_contentfiltros ... mas, infelizmente, isso gera o conteúdo completo no campo de descrição do feed, e não no campo de conteúdo.
majick 21/05
3

Como mencionado pelo @Sumit, você precisa desativar o feed de comentários de uma página (o que eu acho realmente estranho, já que os comentários padrão estão desativados nas páginas?) ... foi isso que eu acabei (permitindo obter os comentários da página) alimente com, ?withcomments=1se desejar):

add_action('pre_get_posts', 'rss_page_feed_full_content');

function rss_page_feed_full_content($q) {
    // Check if it feed request and for single page
    if ($q->is_main_query() && $q->is_feed() && $q->is_page()) {
        //Set the comment feed to false
        $q->set('post_type', array('page'));
        // allow for page comments feed via ?withcomments=1
        if ( (isset($_GET['withcomments'])) && ($_GET['withcomments'] == '1') ) {return;}
        $q->is_comment_feed = false;
    }
}

Mas, para exibir o conteúdo da página, como o modelo do feed realmente verifica rss_use_excerptse é necessário exibir texto completo ou resumo (definido em Configurações -> Página de leitura), isso precisa ser substituído se você deseja que o conteúdo completo seja exibido para um feed de página ( para que você possa ter a opção principal definida como desejar para as postagens.) Caso contrário, o que você fizer o conteúdo poderá acabar no campo de descrição do feed em vez do campo de conteúdo.

add_filter('pre_option_rss_use_excerpt', 'page_rss_excerpt_option');

function page_rss_excerpt_option($option) {
    // force full content output for pages
    if (is_page()) {return '0';}
    return $option;
}

E, finalmente, para obter o campo de descrição do RSS para exibir um trecho da página, você pode fazer isso (que é basicamente uma cópia do wp_trim_excerptsem strip_shortcodes) - bem, eu fiz assim mesmo, mas pode ser devido a algum comportamento estranho de código de acesso na página estava testando:

add_filter('the_excerpt_rss','rss_page_excerpt');

function rss_page_excerpt($excerpt) {
    if (is_page()) {
        global $post; $text = $post->post_content;
        // removed this line otherwise got blank
        // $text = strip_shortcodes( $text );
        $text = apply_filters( 'the_content', $text );
        $text = str_replace(']]>', ']]>', $text);
        $excerpt_length = apply_filters( 'excerpt_length', 55 );
        $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
        $excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return $excerpt;
}
majick
fonte
Oh, eu sinto muito: DI perdi minha mente eu estava lendo withoutcommentsagora eu vejo é withcomment: D LOL apagar meus comentários;)
Sumit
nenhum probs este dobrou minha mente fora de forma, com certeza.
majick 23/05