5

私はこのガイドに従いました:http://philpalmieri.com/2009/06/codeigniter-and-wordpress-play-well-together/

つまり、wordpressをインストールするには、それを機能させてから、index.phpファイルをCode Ignitersに置き換え、CodeIgniterを開始する直前にファイルの下部に、wordpressのwp-loadファイルが必要です。

正常に動作します。

ただし、現在、$_SESSIONは機能しません。データベースセッションを使用するようにコードイグナイターを設定し、セッション値をログに記録しましたが、それでも機能しません。CodeIgniterシステムの管理パネルにログインできません。セッションが機能しないため、セッションを必要とすることはほとんどできません。笑。

これを修正する方法は?

4

2 に答える 2

4

これを機能させるために、次のことを行いました (Wordpress ディレクトリ内の別のディレクトリに Code Igniter アプリケーションがあります) 。

まず、Code Igniter の Cookie 名を wp-includes/load.php の $no_unset 配列に追加しました。私の場合は ci_session でした。

    $no_unset = array( 'GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix','ci_session' );

次に、Wordpress の add_magic_quotes 関数が $_COOKIE グローバルをマングリングしていることに気付きました。これにより、CodeIgniter が各ページの読み込みまたはリダイレクトで Cookie を再作成し、それによって連続性が失われていました。そこで、wp-includes.load.php のこの行をコメントアウトしました (545 行目あたり)。

//$_COOKIE = add_magic_quotes( $_COOKIE );

次に、Wordpress に関連する他のすべての Cookie に対してこの関数をそのまま使用するために、array_walk 関数を作成して $_COOKIE グローバルをループし、wp-includes/load.php 関数内の私のものを除くすべての Cookie に add_magic_quotes を適用します。

/**
* Applies Magic Quotes to the $_COOKIE global but ignores Codeigniter's Cookie
* @param  string $value Value passed by array_walk function
* @param  string $key   Key passed by array_walk function
*/
function ci_ignore_magic_quotes($value,$key)
{
    if($key != "ci_session")
    {
        stripslashes_deep($value);
    }
}

//Put this line in place of the commented out line above...
array_walk($_COOKIE, 'ci_ignore_magic_quotes');

これを行った後、ci_sessions テーブルに複数の Cookie が保存されなくなり、セッションが正常に保持されました。

これが役立つことを願っています!

于 2013-01-30T04:46:37.537 に答える
1

ここでは、WordPressがセッション変数を設定解除する方法と、考えられる解決策について説明します。wp_unregister_GLOBALS残念ながら、コアファイルを変更する必要があるようです-役立つフックはないようです。

于 2012-04-14T17:52:27.230 に答える