多个定制订阅源功能的最佳实践

时间:2014-08-14 作者:drabello

我在主题功能中创建了两个新的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 如果有人感兴趣。

3 个回复
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 工作。

结束

相关推荐

每页完全不同的Functions.php?

是否可以通过条件加载完全不同的函数?i、 函数中的e。php您有一个条件加载在旧函数的include中,然后有另一个条件加载在新函数中?这样做的原因是一个网站正在呈现新的面貌,但只是一页一页,旧的样式和功能很混乱,需要更换,但我不能只是删除它们,因为网站的其余部分将失败。