首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook和Wordpress错误

Facebook和Wordpress错误
EN

Stack Overflow用户
提问于 2012-05-30 22:10:46
回答 1查看 1.4K关注 0票数 1

我有一个开发环境设置WAMP,Wordpress,和PHPEdit IDE。我在侧边栏中使用Facebook、Twitter和YouTube API。我使用Facebook的PHP来显示信息(没有登录或管理功能)。由于FB和WP使用session_start(),我收到以下警告:

C:\wamp\www\dfi\wp-content\themes\DFI\header.php:12)警告: session_start() function.session-start:无法发送会话缓存限制器-标题已经发送(输出从第36行的C:\wamp\www\dfi\wp-content\themes\DFI\api\facebook.php中的

开始

我试图通过使用警告输出来解决这个问题,但这无助于考虑以下几点。我知道如何在<?php ?>前后清除空格和字符,并将session_start()放在任何http输出之前。我使用unix行类型和UTF8编码而不使用BOM。我的主机服务器不是为output_buffering设置的。

header.php第11至13行

代码语言:javascript
复制
11 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
12 <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes();?>>
13 <head>

看起来,警告来自内联php代码。我不知道我能做些什么来修复这条线。

facebook.php第34至37行

代码语言:javascript
复制
34    public function __construct($config) {
35    if (!session_id()) {
36      session_start();
37    }

我认为我无法阻止FB或WP调用session_start()而不破坏所有内容。我如何让Wordpress和Facebook在一起玩的很好没有这个错误?

编辑:为了阻止警告显示,我把@放在session_start()前面。

代码语言:javascript
复制
public function __construct($config) {
    if (!session_id()) {
      @session_start();
    }

这是唯一的解决办法,我仍然想找到问题的根源。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-02 01:25:05

正如您在注释中所发现的,问题不在于包含PHP文件,而在于定义类的位置。在wp钩子中可以安全地创建Facebook类的实例(据我所知,它对我有用)。这将允许您在任何HTML输出之前定义类的实例,然后可以在类中的任何地方使用该变量。

但是,您确实希望确保只包含类一次,但是可以根据需要实例化类的次数。

下面是一个让您开始的基本示例:

代码语言:javascript
复制
if( !class_exists( 'Facebook' ) ) {
    require_once 'facebook.php';
}

if( !class_exists( 'YourClass' ) ) {

    class YourClass {

        public $facebook = null;

        public function __construct() {

            add_action( 'wp', array( $this, 'define_facebook' ) );
            add_action( 'any_hook_after_wp', array( $this, 'example_usage' ) );

        }

        public function define_facebook() {
            global $post;

            // Assuming you are using post meta for the app ID and secret, you can use other methods though
            $app_id = get_post_meta( $post->ID, 'appId', true );
            $app_secret = get_post_meta( $post->ID, 'appSecret', true );

            $this->facebook = new Facebook( array( 'appId' => $app_id, 'secret' => $app_secret ) );

        }

        public function example_usage() {

            if( !is_null( $this->facebook ) ) {

                // Lets see what we have here..
                echo "<pre>";
                print_r( $this->facebook );
                echo "</pre>";
                exit;

            }

        }

    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10825763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档