Wordpress as framework

时间:2013-04-03 作者:fefe

在Wordpress工作了几个月并开发了基本插件,我的印象是,如果激活更多插件,Wordpress就无法正确处理请求,这主要是因为所有主题都可以在hole框架内访问。有没有一种方法可以在需要调用插件时调用每个插件?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

要仅在需要时运行插件,插件作者必须识别代码实际执行操作的页面。

WordPress提供了一种非常简单的方法:全局变量$pagenow.
它是在调用插件之前设置的wp-includes/vars.php.

在我最近编写的一个垃圾邮件块插件中,我只需要在四个页面上运行我的插件:

  • wp-comments-post.php 筛选已发布的评论wp-admin/plugins.php 将插件行中的链接添加到设置wp-admin/options-discussion.php 显示两个选项字段wp-admin/options.php 为了保存选项字段,我在插件控制器中添加了一个helper方法…

    /**
     * Check if we need an instance of our class.
     *
     * @return boolean
     */
    public static function start_me()
    {
        global $pagenow;
    
        if ( empty ( $pagenow ) )
            return FALSE;
    
        self::$page_base = basename( $pagenow, \'.php\' );
        $active_pages    = array (
            \'options\',
            \'options-discussion\',
            \'plugins\',
            \'wp-comments-post\'
        );
    
        if ( ! in_array( self::$page_base, $active_pages ) )
            return FALSE;
    
        return TRUE;
    }
    
    …并在插件中执行任何其他操作之前检查该方法:

    if ( T5_Spam_Block::start_me() )
        add_action(
            \'wp_loaded\',
            array ( T5_Spam_Block::get_instance(), \'plugin_setup\' )
        );
    
    如果我的插件被调用,它只做真正需要的事情,其他什么都不做:

    /**
     * Register actions.
     *
     * @wp-hook wp_loaded
     * @return  boolean
     */
    public function plugin_setup()
    {
        // Register callbacks only when needed.
        if ( \'wp-comments-post\' === self::$page_base )
            return add_action(
                \'pre_comment_on_post\',
                array ( $this, \'check_comment\' )
            );
    
        if ( \'options\' === self::$page_base )
            return add_action(
                \'admin_init\',
                array ( $this, \'register_setting\' )
            );
    
        if ( \'options-discussion\' === self::$page_base )
            return add_action(
                \'admin_init\',
                array ( $this, \'add_settings_field\' )
            );
    
        // Now \'plugins\' === self::$page_base
        // Used by add_settings_link() later.
        $this->plugin_base  = plugin_basename( __FILE__ );
    
        return add_filter(
            \'plugin_row_meta\',
            array ( $this, \'add_settings_link\' ),
            10,
            2
        );
    }
    
    作为一个框架,WordPress提供了专门化插件代码每个部分的工具。但这些工具的使用取决于作者,许多作者在这里失败了。

结束

相关推荐

Travel Blog Plugins

今年晚些时候,我将使用Wordpress创建一个关于我旅行的博客。我希望该博客具有以下功能我的帖子将被地理定位一张包含帖子位置的地图,可以单击地图上的各个点到达帖子</我正在寻找最好/最合适的插件。谢谢,艾尔。