Wie entferne ich Feeds vollständig aus WordPress?

8

Ich möchte Feeds vollständig aus WordPress entfernen. Ich benutze diese kleine Funktion von http://wpengineer.com/287/disable-wordpress-feed/

/**
* disable feed
*/
function fb_disable_feed() {
wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);

Trotzdem gibt es unzählige vorübergehende Optionen .. wie _transient_feed_mododer_transient_timeout_feed_mod

Wie kann ich Feeds vollständig aus WordPress entfernen?

Ünsal Korkmaz
quelle
und jede Menge Umschreibungen für Feeds. Die sind überall drin!
Ünsal Korkmaz
neugierig, wenn es dir nichts ausmacht, wenn ich frage ... warum willst du Feeds aus WordPress entfernen?
Nicole
Warum sollte ich Feeds in WordPress benötigen, wenn ich sie nicht zum Bloggen verwende?
Ünsal Korkmaz

Antworten:

14

Erster Schritt: Entfernen Sie die Feed-Links aus dem Bereich Ihrer Website.

<?php
add_action( 'wp_head', 'wpse33072_wp_head', 1 );
/**
 * Remove feed links from wp_head
 */
function wpse33072_wp_head()
{
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'feed_links_extra', 3 );
}

Als nächstes entfernen wir die Feed-Endpunkte aus WP. Haken Sie ein init, globalisieren Sie $wp_rewriteund setzen Sie die Feeds auf ein leeres Array. Dies verhindert effektiv, dass WordPress Feed-Umschreibungen hinzufügt. Es ist auch super hackisch und wird wahrscheinlich irgendwann in der Zukunft kaputt gehen.

<?php
add_action( 'init', 'wpse33072_kill_feed_endpoint', 99 );
/**
 * Remove the `feed` endpoint
 */
function wpse33072_kill_feed_endpoint()
{
    // This is extremely brittle.
    // $wp_rewrite->feeds is public right now, but later versions of WP
    // might change that
    global $wp_rewrite;
    $wp_rewrite->feeds = array();
}

Aber wenn es kaputt geht, ist das in Ordnung, da wir Feeds auf die Homepage umleiten.

<?php
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed )
{
    add_action( 'do_feed_' . $feed, 'wpse33072_remove_feeds', 1 );
}
unset( $feed );
/**
 * prefect actions from firing on feeds when the `do_feed` function is 
 * called
 */
function wpse33072_remove_feeds()
{
    // redirect the feeds! don't just kill them
    wp_redirect( home_url(), 302 );
    exit();
}

Und der letzte Schritt: Ein Aktivierungs-Hook, mit dem unsere Umschreibungs-Feeds auf ein leeres Array gesetzt und die Umschreiberegeln gelöscht werden.

<?php
register_activation_hook( __FILE__, 'wpse33072_activation' );
/**
 * Activation hook
 */
function wpse33072_activation()
{
    wpse33072_kill_feed_endpoint();
    flush_rewrite_rules();
}

Das alles als Plugin .

chrisguitarguy
quelle
Handliches Zeug. Vielen Dank! Ich habe Ihrem Array einige Feeds hinzugefügt. Ich weiß, dass es diese beiden für Kommentare gibt: 'do_feed_rss2_comments', 'do_feed_atom_comments'. Ich glaube, dass Sie auch 'do_feed' brauchen. Ich habe so aktualisiert: add_action( 'do_feed' . ($feed ? '_' . $feed : ''), 'wpse33072_remove_feeds', 1 );und das Array : array('', 'rdf', 'rss', 'rss2', 'atom', 'rss2_comments', 'atom_comments').
Jake
3

Der von Ihnen veröffentlichte Code macht genau das, was er verspricht - verhindert, dass jemand über einen RSS-Feed auf Ihre Website zugreift.

Trotzdem gibt es unzählige vorübergehende Optionen .. wie _transient_feed_mododer_transient_timeout_feed_mod

Diese vorübergehenden Optionen haben absolut nichts mit Ihrem Site-Feed zu tun. Die Wordpress - Dashboard verbraucht mehrere Feeds standardmäßig und zeigt sie in Kisten auf der Admin - Dashboard. Von Ihnen installierte Plugins fügen möglicherweise eigene Feeds hinzu, entweder für Nachrichtenanzeigen oder für Updates.

Diese Übergangswerte werden von WordPress verwendet, um zu bestimmen, wann diese verbrauchten Feeds aktualisiert wurden.

Wie kann ich Feeds vollständig aus WordPress entfernen?

Der Code, den Sie bereits gepostet haben, hat ...

EAMann
quelle
0

Das sollte es tun

/*disable rss*/
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link','bfr_disable_comments_feeds');
function bfr_disable_comments_feeds() {
    return null;
}

Besser noch, wenn Sie mindestens PHP 5.3 haben, können Sie eine kürzere Version verwenden:

/*disable rss, PHP 5.3+ */
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link',function () { return null;});

Das Entfernen von Umschreibungen würde dagegen viel länger dauern. Wenn Sie also nicht völlig verrückt nach Leistung sind, können Sie sie dort belassen.

fregante
quelle
Noch kürzer in neueren Versionen von WordPress: add_filter ('post_comments_feed_link', '__return_false'); Dies verbirgt jedoch nur einen einzigen Link zum Kommentar-Feed. Es fehlt ... viel, um es milde auszudrücken ...
Jake