WordPress: Blog-Artikel nicht im Feed veröffentlichen

WordPress-Logo Mich hat die Frage eines Kollegen erreicht, wie man einzelne Artikel daran hindert, dass die im Newsfeed erscheinen. Wie üblich bei WordPress gibt es hier verschiedene Möglichkeiten.

Komplette Kategorien aus dem Feed herausnehmen

Möchte man ganze Kategorien oder besser gesagt alle Artikel bestimmter Kategorie(n) aus dem Feed entfernen, dann stehen uns zwei Möglichkeiten zur Verfügung. Hier die Code-Lösung:

function exclude_category($query) {
	if ( $query->is_feed ) {
		$query->set('cat', '-2,-3,-4');
	}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');

Diesen Code fügt man in die functions.php ein. Überischtshalber am besten am Ende der Datei, jedoch vor dem abschließenden ?> … ich erwähne die jetzt extra, weil ich den letzten Tagen drei E-mails bekommen habe, weil die Leute nicht wussten wo man Funktionen am besten in die functions.php unterbringt.

Die Nummern -2,-3,-4' stehen für die Kategorie-IDs. Die ID eine Kategorie findet man u.a heraus in dem man in der Kategorie-Verwaltung, den Mauscursor über den entsprechenden kategorie-Link hält. Die ID, die dann ein Teil der Adresse ist, wird in der Statusleiste des Browsers angezeigt.

Wer lieber Plugins bevorzugt, der könnte mit Ultimate Category Excluder glücklich werden. Dieses Plugin blendet Kategorien nicht nur im Feed aus sondern auch von der Startseite und aus den Archiven (z. B. Jahresarchiv).

Einzelne Artikel, Kategorien-unabhängig, vom Feed fernhalten

Und wen überrascht es, auch hier gibt es zwei Vorgehensweisen: mit und ohne Plugin. Die Code-Lösung fand ich auf WP-Engineer:

function fb_exclude_filter($query) {
    if ( !$query->is_admin && $query->is_feed) {
    $query->set('post__not_in', array(40, 9) ); // id of page or post
    }
    return $query;
    }
    add_filter( 'pre_get_posts', 'fb_exclude_filter' );

Dieser Code kommt ebenfalls in die functions.php rein. Der Nachteil bei dieser Lösung ist, dass man händisch die IDs der einzelnen Artikel nachtragen muss. Bei ein paar Artikeln kein Problem. Veröffentlicht man dagegen des Öfteren Artikel die nicht im Feed veröffentlicht werden sollen, dann sollte man evtl. besser auf das Plugin Stealth Publish zurückgreifen.

Dieses WordPress-Plugin nistet sich im Publizieren-Modul im Backend ein. Möchte man ein Artikel nicht veröffentlichen, dann aktiviert man die Checkbox Stealth publish und der Artikel erscheint nicht im Feed und auch nicht auf der Startseite.

Falls jemand von euch bessere, schönere und elegantere Lösungen kennt nur her damit. 🙂

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

9 Kommentare

  1. Eine elegantere Lösung kenne ich nicht, aber ich bin vor einiger Zeit über eine meiner Meinung nach bessere Alternative zu Stealth Publish gestoßen. Das Plugin WP Hide Post bietet neben der Möglichkeit einzelnen Artikel von Startseite oder Feed auszuschließen noch einige weitere Einstellung zur Sichtbarkeit von Artikeln. Und diese Optionen kann man für jeden Artikel einzeln steuern.
    Weitere Infos unter: http://wordpress.org/extend/plugins/wp-hide-post/

    Leider wurde es lange nicht mehr aktualisiert, so dass ich nicht sagen kann ob es vom Entwickler noch gepflegt wird. Es funktioniert aber mit WordPress 3.1.1 immer noch ganz hervorragend.

    LG Piet

  2. Eine kleine Anmerkung zum “?>” in PHP-Dateien: In reinen PHP-Dateien (wie z.B. die functions.php) braucht es kein ?> am Ende der Datei. PHP ist es egal ob dort ein Closing-Tag steht oder nicht.
    Bei PHP-Dateien an denen man öfters mal Code anhängt, sollte man den Closing-Tag besser löschen. Macht das Leben einfacher 😉

    Stealth Publish könnte eine Überarbeitung gut gebrauchen. Der Code arbeitet sehr intensiv mit der Datenbank und belastet daher das Blog doch recht arg.
    Was Stealth Publish im Grunde genommen macht, ist folgendes: Es fügt den Artikeln ein Postmeta-Feld hinzu und fragt dann jedesmal nach ob diese Info vorhanden ist. Ist sie es, wird die WP-Query manipuliert. Das geht deutlich eleganter, wie du mit dem Codeschnipsel oben ja bereits gezeigt hast. Es fehlt nur die Abfrage der Postmeta:

    function fb_exclude_filter($query) {
    if ( !$query->is_admin && ( $query->is_feed || $query->is_home) ) {
    $key = 'geheim';
    $postids = $wpdb->get_col(
    $wpdb->prepare(
    "SELECT post_id
    FROM $wpdb->postmeta
    WHERE meta_key = %s
    AND meta_value NOT ''", $key ) );

    if( $postids )
    $query->set('post__not_in', $postids ); // id of page or post
    }
    return $query;
    }
    add_filter( 'pre_get_posts', 'fb_exclude_filter' );

    Ich frage hier einfach die IDs aller Beiträge ab die ein Benutzerdefiniertes Feld mit den Namen “geheim” ($key) haben und dessen Wert nicht leer ist. Die Abfrage gibt ein Array zurück das man dann in der bereits im Beitrag gezeigten Funktion verwenden kann.
    Das ist in so fern ganz interessant, als das man so verschiedene Schlüssel verwenden kann um Beiträge auszuschließen. Unchristliche Beiträge die Sonntags nicht veröffentlicht werden sollen gibt man ein Benutzerdefiniertes Feld mit den Namen “SonntagsNicht”. Beiträge die nur von registrierten und angemeldeten Benutzern gesehen werden sollen bekommen ein Benutzerdefiniertes Feld mit dem Namen “MembersOnly” und alle Beiträge die gar keiner sehen soll ein Feld mit den Namen “TopSecret”. So kann man den Filter anpassen und z.B. Sonntags zusätzlich unchristliche Beiträge raus filtern, Beiträge generell nur für Mitglieder sichtbar machen, Beträge nur aus dem Feed raus halten oder oder oder.

  3. Wie Piet nutze auch ich WP Hide Post. Großer Vorteil zu Stealth Publish ist hier, dass die Pings rausgehen. Das erreicht man bei Stealth Publish nur mit einem zusätzlichen Code im Plugin.

    Mal einen Vorschlag für eine Lösung bzw. einen Artikel über ein Thema, bei dem ich bis dato nicht fündig geworden bin. Manchmal möchte man einen alten Artikel neu posten (evtl. mit ein paar Veränderungen). Dazu kann man ja das Publiziert Datum schön anpassen. Nur ein solch geänderter bzw. nach vorne geschobener Artikel erscheint nicht im Feed, an der Stelle, an der er nach der geänderten Reihenfolge gehören würde. Einzige Lösungsmöglichkeit bis dato: Artikel neu Erstellen (unter gleicher URL) und den alten löschen.
    Ich nehme an, das liegt an den ganzen Aktivitäten die im Hintergrund ablaufen (z.B. to_ping etc.), die ja aller der ID des Artikels zugeordnet sind. War die ID des Artikels schon mal in den Feed geschrieben, passiert da nicht mehr viel, außer an der alten Stelle die Aktualisierung des Inhalts.

  4. @Crazy Girl: Hängt wahrscheinlich damit zusammen das WP neben dem post-date (Tag der Veröffentlichung) auch noch speichert wann der Artikel das letzte mal bearbeitet wurde (post modified). Wenn ein Beitrag erneut gepostet wird, wird aber nicht das post-date verändert, sondern nur der Wert post-modified.
    Im Großen und Ganzen hat es seinen Sinn. Wenn jemand 20 mal einen Beitrag verändern würde, würde er ansonsten auch 20 mal im Feed auftauchen.

    Die Lösung des Problems ist relativ einfach. Im Backend eine zusätzliche Checkbox (z.B. Repost) einfügen. Dann z.B. über den Filter “save_post” oder “wp_insert_post” sich einhaken, den alten Beitrag löschen, die Daten (Datum der Veröffentlichung) wie gewünscht manipulieren und den Beitrag speichern.

  5. […] Artikel nicht im Feed veröffentlichen. […]

  6. hallo und danke für die bisherigen Tipps und den WordPress-Newsletter. Immer wieder eine Bereicherung! 🙂
    Jetzt werden meine Leser nicht mehr durch kurze Zitate im feed belästigt..

    gruss
    andré

    1. @Wolfram,

      aber dann kann ihn außer den Verfasser keiner lesen. 🙂

      Es geht hier mehr um z. B. sponsored Posts bzw. Advertorials wo der Artikel auf der website öffentlich zugänglich sein, aber nicht im Feed zu sehen sein soll.

Kommentare sind geschlossen.