¿Desea la plantilla de feed personalizada como función add_feed?

2

Intento que feeds RSS personalizados de Yoast se muestren en una función add_feed.

El solo hecho de colocar el fragmento de Yoast en los resultados de add_feed en:

  

ERROR: feedname no es una plantilla de feed válida.

He intentado dos funciones de reescritura, pero sin éxito. ¿Qué podría faltar?

LafuncióndeYoastsintocar:

<?php/*TemplateName:CustomFeed*/$numposts=5;functionyoast_rss_date($timestamp=null){$timestamp=($timestamp==null)?time():$timestamp;echodate(DATE_RSS,$timestamp);}functionyoast_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:joost@yoast.com">joost@yoast.com</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>

Function one :

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');

y función dos :

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');
    
pregunta torinagrippa 07.07.2011 - 21:06

2 respuestas

3

Tienes add_feed('feedname', 'my_feed'); pero ninguna función my_feed para generar realmente la salida del feed.

Cree una función my_feed y haga que llame a la plantilla para generar la salida del feed. Así:

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

Luego regenere sus enlaces permanentes, solo una vez, volviendo a guardar la configuración del enlace permanente.

Además, no necesitas ninguna de esas tonterías de reescritura extra en absoluto. Sólo el add_feed es suficiente. WP se encarga del resto, y su feed estará en / feed / feedname.

    
respondido por el Otto 08.07.2011 - 00:09
2

Primero, la forma correcta es usar add_feed() , pero no debes tocar para volver a escribir. add_feed() maneja eso por sí mismo.

Segundo, ¿no proporcionó su función de devolución de llamada my_feed() ? No estoy seguro, pero a partir de ese mensaje de error creo que no se puede enganchar correctamente.

    
respondido por el Rarst 07.07.2011 - 21:21

Lea otras preguntas en las etiquetas