私は解決策を見つけました。それが正しい方法かどうかはわかりません。誰かが同じことをしたい場合に備えて、すべてを投稿します。
これが私が思いついた解決策だったことを覚えておいてください。これはMVCワークフローを非常に多くのレベルで壊しているので、自己責任でこの回避策を使用する必要があると思います。
- WordPressを通常は内部のサブフォルダにインストールします
/app/webroot/
コントローラでは、アクション内で、これを呼び出すWP関数を使用します。
require_once('full/path/to/wp-load.php');
アクションを呼び出して、競合がないかどうかを確認します。私の場合、機能__()
とstripslashes_deep()
両方に存在していました。それで、私はそれらを再宣言することを避けなければなりませんでした。
if(!function_exists('FUNCTION_NAME_HERE')) { function ... }
この時点で、コントローラー内のWP機能にアクセスできます。しかし、WP_Widgetクラスに関するその問題は、おそらく警告を発します。だから、これがあなたがそれを修正する方法です:
4.1 wp-settings.php
(WPのルートにあります)開いて、次の行にコメントします。
require( ABSPATH . WPINC . '/widgets.php' );
$GLOBALS['wp_widget_factory'] = new WP_Widget_Factory();
4.2wp-includes/functions.php
この行を開いてコメントします。
require_once( ABSPATH . WPINC . '/default-widgets.php' );
4.3開いwp-content/themes/twentyeleven/inc/functions.php
てコメントする:
require( get_template_directory() . '/inc/widgets.php' );
これで、WPテーマで行うように、アクション内から通常どおりWPを呼び出すことができます。
query_posts('showposts=10');
while (have_posts()):
the_title();
endwhile;
内部ですべてのWP作業を行い、結果を変数に保存しない限り、 wp-load.php
onを要求するbeforeFilter()
ことは機能しないようです。beforeFilter()
そうしwp-load.php
ないと、アクションに移動するときにCakePHPがアンロードされたように見え、WP関数にアクセスできなくなります。
このハックをコンポーネントに変換してから、次のような方法でWPにアクセスできれば、おそらくそれも機能します。$this->Wordpress->query_posts('showposts=10');
管理者が壊れています
これは、すべてのウィジェット機能をコメントアウトしたステップ4によるものです。これを修正するには、次のような条件を含める必要があります。
if (is_admin()) {
require( ABSPATH . WPINC . '/widgets.php' );
}
もちろん、この条件は、ステップ4でコメント化されたすべての行に適用する必要があります。WP管理領域を使用しない場合は、この条件を使用する必要はありません。