Come mostrare il contenuto della pagina nel feed?


13

Voglio mostrare l'intero contenuto di ogni pagina del feed. La cerco e ho trovato alcuni plugin ma non sono riuscito a risolvere il mio problema.

Voglio quando inserisco http://swissaudio.com/craftsmanship/feedmi fornisce il contenuto della pagina nel feed. Come posso fare ciò?


solo per essere sicuri, stai chiedendo se mostrare l'intero contenuto dei tuoi post nel feed piuttosto che solo un riepilogo o aggiungere tutte le pagine (post_type della pagina) anche al feed per intero?
Majick,

@majick Voglio mostrare tutto il contenuto della pagina nel feed. Uso anche questo codice ma si verificano cambiamenti di risultato 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 prima vista sembra che dovrebbe funzionare bene, assicurati di aver disabilitato uno qualsiasi dei plugin che stavi testando e anche di disabilitare eventuali cache durante il test.
Majick,

@majick a causa del funzionamento del feed di codice sopra per la home page. Per favore controlla questo sito http://swissaudio.com/feed/Voglio mostrare il contenuto di ogni pagina nel feed, ad esempio per la craftsmanshippagina Vorrei fare qualcosa del genere http://swissaudio.com/craftsmanship/feed/ma non mostra alcun risultato
raxa

3
questo si è rivelato molto complicato. Ho provato alcune altre cose senza fortuna, quindi ho aperto una generosità per questo, poiché vorrei conoscere la soluzione da solo. :-)
Majick,

Risposte:


7

Innanzitutto imposta il tipo di post da visualizzare nella pagina principale del feed, ad esempio /feedutilizzando l' pre_get_postshook

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

Sulla singola pagina WordPress mostra il feed dei commenti, quindi impostalo su falsee visualizza il contenuto della pagina nel feed.

$q->is_comment_feed = false;

Nel modello di feed le chiamate WordPress the_excerpt_rss()che chiamano in get_the_excerpt()tal modo utilizzando il excerpt_lengthfiltro cambiano la lunghezza a max.

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

ahh i commenti sono impostati su true. quindi è tutto ..! beh, sembrerebbe sensato se fare questo /page/comments/feed/mostrasse effettivamente i commenti, hai idea di come farlo?
Majick,

Bene, penso che per questo dobbiamo aggiungere nuove regole di riscrittura. Poiché WP non lo supporta per impostazione predefinita, supporta invece la stringa di query withoutcomments=1come risposto da cjbj. Non sono affatto bravo nella riscrittura degli URL: D
Sumit

1
non va bene neanche con la riscrittura degli URL, ho deciso di cambiarlo e aggiungere supporto withcomments=1nella mia risposta.
Majick,

per il filtro della lunghezza dell'estratto, se non lo verifica get_option('rss_use_excerpt')non !get_option('rss_use_excerpt)perché se è già falso non sarebbe necessario un filtro della lunghezza dell'estratto, visualizzerebbe già l'intero contenuto. O_o
Majick,

Beh, non sono sicuro del perché, ma se controlli questa riga core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/… nel modello non ha effetto su questa impostazione, è per questo che la sto solo correggendo. cosa suppone di fare.
Vertice del

4

Questo potrebbe non essere l'ideale, ma è un inizio. Per prima cosa assicurati che l'intero contenuto sia nel feed:

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

Dovresti quindi vedere il feed completo in questo URL

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

È quindi possibile utilizzare add_rewrite_ruleper reindirizzare i visitatori da / feed /. Lungi dall'essere ideale, ma forse un inizio per qualcun altro su cui lavorare.


l'utilizzo return get_the_content_feed()sarebbe migliore perché applica the_contentanche i filtri ... ma sfortunatamente questo genera l'intero contenuto nel campo della descrizione del feed anziché nel campo del contenuto.
Majick,

3

Come accennato da @Sumit, è necessario disattivare il feed dei commenti per una pagina (cosa che trovo davvero strana poiché i commenti predefiniti sono disattivati ​​sulle pagine?) ... questo è quello che ho finito con (permettendo di ottenere i commenti sulla pagina nutriti con ?withcomments=1se desiderato):

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

Ma per visualizzare il contenuto della pagina, poiché il modello di feed controlla effettivamente rss_use_excerptse decidere di visualizzare il testo completo o il riepilogo (impostato su Impostazioni -> Pagina di lettura), questo deve essere sovrascritto se si desidera visualizzare l'intero contenuto per un feed di pagina ( in modo che tu possa avere l'opzione principale impostata su quello che ti piace per i post. Altrimenti, qualunque altra cosa tu faccia, il contenuto potrebbe finire nel campo della descrizione del feed invece che nel campo del contenuto.

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 infine, per far sì che il campo della descrizione RSS visualizzi un estratto di pagina, potresti doverlo fare (che è fondamentalmente una copia di wp_trim_excerptsenza strip_shortcodes) - beh, l'ho fatto comunque, ma potrebbe essere dovuto a uno strano comportamento di shortcode nella pagina I stava 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;
}

Oh, mi dispiace davvero: DI ha perso la testa, lo stavo leggendo withoutcommentsora VEDO che è withcomment: D LOL che cancella i miei commenti;)
Summit

nessun probo questo mi ha fatto perdere la testa di sicuro.
Majick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.