it-swarm.com.de

Yoast benutzerdefinierte Feed-Vorlage als Funktion add_feed?

Ich versuche, Yoasts benutzerdefinierte RSS-Feeds in einer add_feed-Funktion anzuzeigen.

Durch einfaches Einfügen von Yoasts Snippet in add_feed erhalten Sie:

FEHLER: Feedname ist keine gültige Feedvorlage.

Ich habe zwei Umschreibefunktionen ausprobiert, aber ohne Erfolg. Was könnte mir fehlen?

enter image description here

Yoasts Funktion unangetastet:

<?php
/*
Template Name: Custom Feed
*/

$numposts = 5;

function yoast_rss_date( $timestamp = null ) {
  $timestamp = ($timestamp==null) ? time() : $timestamp;
  echo date(DATE_RSS, $timestamp);
}

function yoast_rss_text_limit($string, $length, $replacer = '...') {
  $string = strip_tags($string);
  if(strlen($string) > $length)
    return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;
  return $string;
}

$posts = query_posts('showposts='.$numposts);

$lastpost = $numposts - 1;

header("Content-Type: application/rss+xml; charset=UTF-8");
echo '<?xml version="1.0"?>';
?><rss version="2.0">
<channel>
  <title>Yoast E-mail Update</title>
  <link><a class="linkclass" href="http://yoast.com/">http://yoast.com/</a></link>
  <description>The latest blog posts from Yoast.com.</description>
  <language>en-us</language>
  <pubDate><?php yoast_rss_date( strtotime($ps[$lastpost]->post_date_gmt) ); ?></pubDate>
  <lastBuildDate><?php yoast_rss_date( strtotime($ps[$lastpost]->post_date_gmt) ); ?></lastBuildDate>
  <managingEditor><a class="linkclass" href="mailto:[email protected]">[email protected]</a></managingEditor>
<?php foreach ($posts as $post) { ?>
  <item>
    <title><?php echo get_the_title($post->ID); ?></title>
    <link><?php echo get_permalink($post->ID); ?></link>
    <description><?php echo '<![CDATA['.yoast_rss_text_limit($post->post_content, 500).'<br/><br/>Keep on reading: <a href="'.get_permalink($post->ID).'">'.get_the_title($post->ID).'</a>'.']]>';  ?></description>
    <pubDate><?php yoast_rss_date( strtotime($post->post_date_gmt) ); ?></pubDate>
    <guid><?php echo get_permalink($post->ID); ?></guid>
  </item>
<?php } ?>
</channel>
</rss>

Funktion eins :

function myPlugin_add_feed(  ) {
  global $wp_rewrite;
  add_feed('feedname', 'my_feed');
  add_action('generate_rewrite_rules', 'myPlugin_rewrite_rules');
  $wp_rewrite->flush_rules();
}
add_action('init', 'myPlugin_add_feed');

und Funktion zwei :

function custom_feed_rewrite($wp_rewrite) {
$feed_rules = array(
'feed/(.+)' => 'index.php?feed=' . $wp_rewrite->preg_index(1),
'(.+).xml' => 'index.php?feed='. $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'custom_feed_rewrite');
2
torinagrippa

Sie haben add_feed('feedname', 'my_feed');, aber keine my_feed-Funktion, um die Feed-Ausgabe zu generieren.

Erstellen Sie eine my_feed-Funktion und lassen Sie sie die Vorlage aufrufen, um die Feed-Ausgabe zu generieren. So was:

function my_feed() {
  include 'path-to-that-template-file.php';
}
add_feed('feedname','my_feed');

Generieren Sie dann Ihre Permalinks einmalig neu, indem Sie die Permalink-Einstellungen erneut speichern.

Außerdem brauchen Sie überhaupt keinen zusätzlichen Unsinn beim Umschreiben. Lediglich der add_feed reicht aus. WP erledigt den Rest und Ihr Feed befindet sich unter/feed/feedname.

3
Otto

Erstens ist es richtig, add_feed() zu verwenden, aber Sie sollten das Umschreiben nicht berühren. add_feed() erledigt das für sich.

Zweitens haben Sie Ihre Rückruffunktion my_feed() nicht bereitgestellt? Ich bin nicht sicher, aber von dieser Fehlermeldung denke ich, dass es nicht richtig eingehakt wird.

2
Rarst