it-swarm.com.de

Wie zeige ich Seiteninhalte im Feed an?

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 bei der Eingabe von http://swissaudio.com/craftsmanship/feed der Seiteninhalt im Feed angezeigt wird. Wie kann ich das machen?

12
raxa

Stellen Sie zuerst den Post-Typ so ein, dass er auf der Haupt-Feed-Seite angezeigt wird, d. H. /feed mit pre_get_posts hook

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

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

$q->is_comment_feed = false;

In der Feed-Vorlage ruft WordPress the_excerpt_rss() auf, wodurch get_the_excerpt() aufgerufen wird. Ändern Sie die Länge mit dem Filter excerpt_length auf max.

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

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 add_rewrite_rule verwenden, um Besucher von/feed/umzuleiten. Weit davon entfernt, ideal zu sein, aber vielleicht ein Anfang, an dem jemand anders arbeiten kann.

4
cjbj

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=1 falls 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 die Feed-Vorlage für die Anzeige des Seiteninhalts jedoch rss_use_excerpt prüft, um zu entscheiden, ob Volltext oder Zusammenfassung angezeigt werden soll (unter Einstellungen -> Seite lesen), muss dies überschrieben werden, wenn der vollständige Inhalt für einen Seitenfeed 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 möglicherweise dies tun (was im Grunde eine Kopie von wp_trim_excerpt ohne strip_shortcodes ist) Shortcode-Verhalten auf der Seite, die ich getestet habe:

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