Wie zeige ich Seiteninhalte im Feed an?

13

Ich möchte den gesamten Inhalt jeder Seite im Feed anzeigen. Ich habe danach gesucht und ein Plugin gefunden, aber mein Problem konnte nicht gelöst werden.

Ich möchte, dass http://swissaudio.com/craftsmanship/feedmir der Seiteninhalt im Feed angezeigt wird, wenn ich ihn eingebe. Wie kann ich das machen?

raxa
quelle
Sie möchten sicherheitshalber wissen, ob der gesamte Inhalt Ihrer Beiträge im Feed und nicht nur eine Zusammenfassung angezeigt werden soll, oder ob alle Seiten (post_type of page) auch vollständig zum Feed hinzugefügt werden sollen?
Majick
@majick Ich möchte den gesamten Inhalt der Seite im Feed anzeigen. Ich verwende diesen Code auch, aber es kommt zu Ergebnisänderungen 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
Auf den ersten Blick sollte das gut funktionieren. Stellen Sie sicher, dass Sie alle Plugins deaktiviert haben, die Sie getestet haben, und deaktivieren Sie während des Tests auch alle Caches.
Majick
@majick wegen obiger Code-Feed-Arbeit für die Homepage. Bitte überprüfen Sie diese Seite. http://swissaudio.com/feed/Ich möchte den Inhalt jeder Seite im Feed anzeigen, dh für die craftsmanshipSeite, die ich so etwas tun möchte, http://swissaudio.com/craftsmanship/feed/aber es zeigt kein Ergebnis
raxa
3
Dies hat sich als sehr schwierig erwiesen. Ich habe ein paar weitere Dinge ohne Glück getestet, also habe ich ein Kopfgeld dafür ausgesetzt, da ich die Lösung selbst kennen möchte. :-)
Majick

Antworten:

7

Stellen Sie zuerst den Post-Typ so ein, dass er auf der Haupt-Feed-Seite angezeigt wird, z. B. /feedmit pre_get_postsHook

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

Auf einer einzelnen Seite zeigt WordPress den Kommentar-Feed an und setzt ihn auf falseund zeigt den Seiteninhalt im Feed an.

$q->is_comment_feed = false;

In Feed - Vorlage Wordpress - Anrufe , the_excerpt_rss()die Anrufe get_the_excerpt()so mit excerpt_lengthder Länge bis max Filterwechsel.

Vollständiges Beispiel: -

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
quelle
ahh die Kommentare standardmäßig auf true. So, das war es..! Nun, es scheint sinnvoll zu sein, dies /page/comments/feed/zu tun und stattdessen die Kommentare anzuzeigen. Irgendeine Idee, wie man das macht?
Majick
Nun, ich denke, dafür müssen wir neue Umschreiberegeln hinzufügen. Da WP es standardmäßig nicht unterstützt, unterstützt es stattdessen withoutcomments=1die von cjbj beantwortete Abfragezeichenfolge. Ich bin überhaupt nicht gut darin, URLs umzuschreiben: D
Sumit
1
Auch das Umschreiben von URLs ist nicht gut. withcomments=1Ich habe beschlossen, es umzudrehen und Unterstützung für meine Antwort hinzuzufügen .
Majick
Sollte der Filter für die Auszugslänge nicht aktiviert werden get_option('rss_use_excerpt'), !get_option('rss_use_excerpt)da ein Filter für die Auszugslänge, wenn er bereits falsch ist, nicht benötigt wird, wird der gesamte Inhalt bereits angezeigt. O_o
majick
Nun, ich bin mir nicht sicher, warum, aber wenn Sie diese Zeile überprüfen, wirkt sich dies nicht auf diese Einstellung aus, weshalb ich sie nur korrigiere was es bedeutet zu tun.
Summe
4

Das ist vielleicht nicht ideal, aber es ist ein Anfang. Stellen Sie zunächst sicher, dass der gesamte Inhalt im Feed enthalten ist:

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

Sie sollten dann den vollständigen Feed unter dieser URL sehen

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

Sie können dann verwenden add_rewrite_rule, um Besucher von / feed / umzuleiten. Weit davon entfernt, ideal zu sein, aber vielleicht ein Anfang, an dem jemand anders arbeiten kann.

cjbj
quelle
using return get_the_content_feed()wäre besser, da es auch the_contentFilter anwendet ... aber dies gibt leider den vollständigen Inhalt im Beschreibungsfeld des Feeds statt im Inhaltsfeld aus.
Majick
3

Wie von @Sumit erwähnt, müssen Sie den Kommentar-Feed für eine Seite deaktivieren (was ich sehr merkwürdig finde, da Kommentare standardmäßig auf Seiten deaktiviert sind?) füttern mit ?withcomments=1wenn gewünscht):

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

Da bei der Anzeige des Seiteninhalts die Feed-Vorlage tatsächlich überprüft rss_use_excerpt, ob Volltext oder eine Zusammenfassung angezeigt werden soll (unter Einstellungen -> Seite lesen), muss dies überschrieben werden, wenn der vollständige Inhalt für einen Seiten-Feed angezeigt werden soll ( Damit Sie die Hauptoption für Posts auf das einstellen können, was Sie möchten.) Andernfalls wird der Inhalt möglicherweise im Beschreibungsfeld des Feeds anstelle des Inhaltsfelds angezeigt.

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

Und um im RSS-Beschreibungsfeld einen Seitenauszug anzuzeigen, müssen Sie dies möglicherweise tun (was im Grunde genommen eine Kopie von wp_trim_excerptwithout ist strip_shortcodes). Das habe ich trotzdem getan, aber es könnte an einem seltsamen Shortcode-Verhalten auf Seite I liegen hat getestet:

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
quelle
Oh, es tut mir wirklich leid. Ich habe den Verstand verloren. Ich habe es withoutcommentsjetzt gelesen. Ich SEHE, es ist withcomment: D LOL Löschung meiner Kommentare;)
Summe
Keine Probs, das hat mich sicher aus der Form gebracht.
Majick