it-swarm.com.de

Deaktivieren Sie Feeds für bestimmte benutzerdefinierte Beitragstypen

Ich möchte die Feeds für bestimmte benutzerdefinierte Beitragstypen entfernen. Die meisten empfohlenen Methoden sind nicht sauber. Es scheint eine Option mit dem Namen $args->feeds zu geben, die jedoch in der Funktion register_post_type() nicht funktioniert.

 register_post_type(
  ...
   'rewrite' => array('slug' => 'slug/%term&', 
                      'with_front' => false,
                      'feeds' => false), // Remove feed rewrite-rules?
  ...
 );

Quelle: Zeile 1324 - /wp-includes/post.php (Wordpress 3.5)

Ich suche nach einer Lösung, um die Regelgenerierung in $wp_rewrite->rules zu deaktivieren.

2
mate64

Ein Blick auf die Funktion register_post_type() in der WordPress-Quelle zeigt, dass WordPress isset() verwendet, um das Feedargument anstelle von empty() zu überprüfen, was bedeutet, dass ein Wert für falsetrue zurückgibt. Um dies zu beheben, können Sie versuchen, 'feeds' => null festzulegen und dann Ihre Umschreiberegeln über Einstellungen> Permalinks zu löschen (denken Sie daran, es ZWEIMAL zu tun, um eine seltsame Eigenart zu überwinden).

Alternativ können Sie jede andere Seite (einschließlich Feeds) schließen, bevor sie geladen werden kann ...

do_action('wp','kill_feeds',-1);
function kill_feeds(){
    if ( is_feed( array('post','my-custom-type') ) ) {
        exit;
    }
}

Dies sollte erkennen, ob es sich bei der aktuellen Anfrage um einen Feed (der von Ihnen angegebenen Post-Typen) handelt, und, falls dies der Fall ist, jede weitere Ausgabe stoppen.

Wenn Sie wirklich verrückt werden möchten, können Sie stattdessen auf die 404-Seite Ihrer Website umleiten. :-)

Gelingt dies nicht, können Sie die Umschreiberegeln manuell ändern. Der Filter rewrite_rules_array macht das Arraywholerewrite rules verfügbar, und Sie können mit etwas Regex-Magie alle zutreffenden Feedregeln entfernen. Angenommen, Ihr Beitrag war "foo", könnte dies so aussehen ...

add_filter('rewrite_rules_array', 'kill_feed_rewrites');
function kill_feed_rewrites($rules){
    foreach ($rules as $rule => $rewrite) {
        if ( preg_match('/^foo.*(feed)/',$rule) ) {
            unset($rules[$rule]);
        }
    }
    return $rules;
}

Feed-Referenz, die Regeln selbst sehen ungefähr so ​​aus ...

'foo/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => string 'index.php?attachment=$matches[1]&feed=$matches[2]'
3
Matt van Andel