¿Cómo mostrar el contenido de la página en el feed?

13

Quiero mostrar todo el contenido de cada página en el feed. Lo busqué y encontré algún complemento, pero no pude resolver mi problema.

Quiero cuando entro http://swissaudio.com/craftsmanship/feedme proporciona el contenido de la página en el feed. ¿Cómo puedo hacer eso?

raxa
fuente
solo para estar seguro, ¿está preguntando si mostrar todo el contenido de sus publicaciones en el feed en lugar de solo un resumen, o agregar todas las páginas (post_tipo de página) al feed también?
majick
@majick Quiero mostrar todo el contenido de la página en la alimentación .I utilizar este código también se produce el cambio, pero resultado 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
a primera vista parece que debería funcionar bien, asegúrese de haber deshabilitado cualquiera de los complementos que estaba probando y también deshabilite cualquier caché durante la prueba.
majick
@majick debido al trabajo de alimentación de código anterior para la página de inicio. Por favor revise este sitio http://swissaudio.com/feed/Quiero mostrar el contenido de cada página en la alimentación, es decir, para la craftsmanshippágina Me gustaría hacer algo como esto http://swissaudio.com/craftsmanship/feed/pero no muestra ningún resultado
raxa
3
Esto ha resultado ser muy complicado. He probado algunas cosas más sin suerte, así que abrí una recompensa por esto, ya que me gustaría conocer la solución por mí mismo. :-)
majick

Respuestas:

7

Primero configure el tipo de publicación para mostrar en la página de alimentación principal, es decir, /feedusando el pre_get_postsgancho

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

En una página individual, WordPress muestra un feed de comentarios, luego configúrelo falsey muestre el contenido de la página en el feed.

$q->is_comment_feed = false;

En la plantilla de feed, WordPress llama a the_excerpt_rss()qué llamadas, get_the_excerpt()por lo que con el excerpt_lengthfiltro cambia la longitud al máximo.

Ejemplo 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
fuente
ahh los comentarios predeterminados a verdadero. eso es todo..! bueno, parecería tener sentido si hacer esto /page/comments/feed/realmente mostrara los comentarios, ¿alguna idea de cómo hacerlo?
majick
Bueno, creo que para esto necesitamos agregar nuevas reglas de reescritura. Debido a que WP no lo admite de forma predeterminada, en su lugar, admite la cadena de consulta withoutcomments=1según la respuesta de cjbj. No soy bueno en absoluto en la reescritura de URL: D
Sumit
1
tampoco es bueno con la reescritura de URL, decidí darle la vuelta y agregar soporte para withcomments=1mi respuesta.
majick
para el filtro de longitud de extracto, si no se verifica, get_option('rss_use_excerpt')no !get_option('rss_use_excerpt)porque si ya es falso no se necesitaría un filtro de longitud de extracto, ya mostraría el contenido completo. O_o
majick
Bueno, no estoy seguro de por qué, pero si marca esta línea core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/… en la plantilla no afecta esta configuración, es por eso que solo la estoy corrigiendo lo que se supone que debe hacer.
Sumit
4

Esto puede no ser ideal, pero es un comienzo. Primero asegúrese de que el contenido completo esté en el feed:

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

Entonces debería ver el feed completo en esta url

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

Luego puede usar add_rewrite_rulepara redirigir a los visitantes desde / feed /. Lejos de ser ideal, pero tal vez sea un comienzo para que alguien más trabaje.

cjbj
fuente
usar return get_the_content_feed()sería mejor porque también aplica the_contentfiltros ... pero desafortunadamente esto genera el contenido completo en el campo de descripción del feed en lugar del campo de contenido.
majick
3

Como mencionó @Sumit, debe desactivar el feed de comentarios de una página (lo cual me parece realmente extraño, ya que de forma predeterminada los comentarios están desactivados en las páginas) ... esto es lo que terminé (permitiendo obtener los comentarios de la página alimentar con ?withcomments=1si se desea):

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;
    }
}

Pero para mostrar el contenido de la página, dado que la plantilla de feed en realidad comprueba rss_use_excerptsi se muestra el texto completo o el resumen (configurado en Configuración -> Lectura de página), esto debe anularse si desea que se muestre el contenido completo para un feed de página ( para que pueda tener la opción principal configurada en lo que quiera para las publicaciones). De lo contrario, haga lo que haga, el contenido puede terminar en el campo de descripción del feed en lugar del campo de contenido.

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;
}

Y finalmente, para que el campo de descripción RSS muestre un extracto de la página, es posible que tenga que hacer esto (que es básicamente una copia de wp_trim_excerptsin strip_shortcodes), bueno, lo hice de todos modos, pero podría deberse a un comportamiento extraño de código corto en la página. estaba probando:

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
fuente
Oh, lo siento mucho: DI me he vuelto loco Lo estaba leyendo withoutcommentsahora VEO que es withcomment: D LOL borrando mis comentarios;)
Sumit
sin problemas, este me hizo perder la cabeza de forma segura.
majick