我在主题功能中创建了两个新的WordPress RSS提要:
// Custom Feed 1
add_action(\'init\', \'customRSS\');
function customRSS(){
add_feed(\'feedname\', \'customRSSFunc\');
}
function customRSSFunc(){
get_template_part(\'rss\', \'feedname\');
}
// Custom Feed 2
add_action(\'init\', \'customRSS2\');
function customRSS2(){
add_feed(\'feedname2\', \'customRSS2Func\');
}
function customRSS2Func(){
get_template_part(\'rss\', \'feedname2\');
}
它工作得很完美,但是基于DRY的概念,我觉得可能有更好的方法来处理此代码,而不是为每个新的自定义提要添加整个函数。这是真的吗?
我遵循的教程是this 如果有人感兴趣。
SO网友:Howdy_McGee
下面是我如何将RSS模板保持在一起的步骤,尽管这可能不起作用,但非常干净,这取决于您的PHP版本。您可以在此处添加多个提要。
/** Register Our RSS Feeds **/
function my_rss_templates() {
add_feed( \'feedname2\', function(){
get_template_part(\'rss\', \'feedname2\'\');
});
// Rinse and Repeat...
}
add_action( \'after_setup_theme\', \'my_rss_templates\' );
PHP对上述方法有一个名称(调用这样的函数),但我一时想不起它的名字罢工>
Anonymous Function Call - 仅在PHP 5.3及以上版本中可用。
SO网友:fuxia
您可以将逻辑移动到一个记住名称和模板部分的类中。
示例,未测试:
class Custom_Feeds {
private $feeds = array ();
/**
* @param array $feeds
*/
public function __construct( Array $feeds ) {
$this->feeds = $feeds;
}
/**
* @wp-hook wp_loaded
* @return void
*/
public function register() {
$names = array_keys( $this->feeds );
foreach ( $names as $name )
add_feed( $name, array ( $this, \'load_template\' ) );
}
/**
* @wp-hook do_feed_$feedname
* @return void
*/
public function load_template() {
$name = get_query_var( \'feed\' );
get_template_part( \'rss\', $this->feeds[ $name ] );
}
}
$feeds = new Custom_Feeds(
array (
\'feed1\' => \'foo\',
\'feed2\' => \'bar\'
)
);
add_action( \'wp_loaded\', array ( $feeds, \'register\' ) );
除此之外,我不认为feed是主题领域。它们通常不是样式化数据。
SO网友:birgire
这里有一个简短的替代方法(未经测试)来回答其他伟大的答案:
add_action( \'init\', \'custom_feeds\' );
function custom_feeds()
{
foreach( array( \'feedname1\', \'feedname2\' ) as $name )
{
add_feed( $name,
function() use ( $name )
{
get_template_part( \'rss\', $name );
}
);
}
}
根据
Codex, 我们应该使用
init
钩住并记住刷新的重写规则
add_feed
工作。