2

私は、ワードプレスの外部でカスタムデータを管理するいくつかの複雑なインターフェースを強化するために Zend Framework も使用するページで wp_list_pages() を呼び出すことができるようにしたいプロジェクトを持っています。

このページは、ユーザーがまだ適切なレベルの認証でログインしていない場合、ユーザーを wordpress ログイン画面にリダイレクトする必要もあります。

これは高レベルでどのように機能しますか。つまり、ワードプレスのブートストラップ ファイルを編集して、特定の URL などに基づいてカスタム インターフェイスを条件付きで実装する必要がありますが、そのカスタム インターフェイスで wp_list_pages() を呼び出すことができるように特定のファイルを含める必要がありますか? ?

4

6 に答える 6

1

私はいくつかのWordPressプラグインを開発しましたが、それを拡張するのは本当に簡単であることがわかりました。ただし、Zendとは連携していません。

WordPressプラグインAPIを確認する必要があります。主にアクション、フィルター、フックに関する部分:http: //codex.wordpress.org/Plugin_API

一部の関数をオーバーライドすることもできます(オーバーライド可能かどうかwp_list_pages()はわかりません)。

それはかなりよく文書化されており、IRCやフォーラムなどでその背後に大規模な開発者コミュニティがあります。

于 2008-12-18T16:09:04.537 に答える
1

ありがとうフェルナンド。

このスレッドを読んだところ、以下を含めるだけで、任意のスクリプトで Zend を使用できることが示唆されています。

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

Zend を使用する必要があるのは 1 つのページだけだとすると、ナビゲーションの適切なページに割り当てるカスタム テンプレート ファイルにそのコードを含めることはできますか? JavaScript を使用して XHR 経由でフォームを送信すると、要求された URL は「/controller/action」の形式になりますが、Zend はコントローラーのディレクトリを認識しません。

Zend コードをワードプレスのブートストラップ、つまり上記のコードと frontController 構成に入れ、Zend をどこでも使用できますか?

于 2008-12-18T17:59:17.450 に答える
1

そこで、Wordpressでページを作成し、そのページ用のカスタム テンプレートを作成しました。その中に次のZend Frameworkコードを配置しました。

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'      => 'localhost',
    'username'  => 'username',
    'password'  => 'password',
    'dbname'    => 'dbname'
));
Zend_Db_Table::setDefaultAdapter($db);

class Users extends Zend_Db_Table_Abstract {
    protected $_name = 'wp_users';
}

$users = new Users();
$users = $users->fetchAll()->toArray();

print_r($users[0]['user_login']);

これはすべて正常に機能するため、Zend を Wordpress と組み合わせて少なくともある程度使用することは明らかに可能です。

誰が URL の書き換え、ルーティング、またはブートストラップを制御しているかに問題があることが明らかになりつつあります(正しい用語は不明です)。$users = new Users(); で始まる上記のコードの最後を、次のようにコントローラーに入れるとします。

class UsersController extends Zend_Controller_Action {
    function getUserAction() {
        $this->_helper->viewRenderer->setNoRender();

        $users = new Users();
        $users = $users->fetchAll()->toArray();

        echo $users[0]['user_login'];
    }
}

その関数をどのように呼び出すのでしょうか? 私の意図は、ページ上のイベントに応答して XHR リクエストを介して JavaScript から呼び出すことですが、URL 'index.php/Users/getUser/' をリクエストすると、'入力ファイルが選択されていません' が返されます。URL http://www.domain.com/Users/getUser/にアクセスしようとすると、Wordpress 404 ページが生成されます。

これを回避する方法はありますか?もちろん、ワードプレスだけに当てはまるわけではありません。ブートストラップを介してリクエストを書き換え/ルーティングする既存のアプリケーションにも当てはまると思います。

于 2008-12-19T00:12:23.967 に答える
1

フレームワークを必要なページにインポートするだけで、それができると思います。Zend がどのように機能するかはわかりませんが、Zend がディレクトリを見つけられるように、ディレクトリを配置するパスを確認してください。

関数や変数の名前の競合に注意してください。これは、WordPress や Zend などの人気のある製品に由来する問題ではありません... (理論的には適切にコーディングされている必要があります)。

于 2009-12-01T09:31:36.767 に答える
0

フレームワークを必要な1ページにインポートするだけで、それができると思います。Zendがどのように機能するかはわかりませんが、Zendがディレクトリを見つけることができるように、ディレクトリを配置する場所のパスを確認してください

関数や変数の名前の競合に注意してください。ただし、WordPressやZendなどの人気のある製品からはそれほど問題にはならないはずです...(理論的には適切にコーディングされている必要があります)

于 2008-12-18T18:32:13.733 に答える
0

私はあなたと同様の目標を持つワードプレス用のプラグインを構築しましたが、CodeIgniter をよりモデル化しています。Zend をよく知らないので、これが役立つと思います。

次のコードを使用して、プラグイン ディレクトリに routes.php という名前のファイルを作成します。

add_action( 'init', 'add_custom_urls' );

function add_custom_urls(){
    global $wp, $wp_rewrite;

    $wp_rewrite->add_rule( '(.*)$', 'index.php?&cPath=$matches[1]', 'top' );
    $wp->add_query_var( 'cPath' );
}

管理者で両方のプラグインを有効にしてください。これら 2 つのファイルを使用すると、Wordpress が URL をどう処理するかを判断する前に、URL をキャッチできます。正規表現を使用して、キャッチするページをより細かく制御できます。これが機能する前に、_options db テーブルでoption_name= 'rewrite_rules' のレコードを削除する必要がある場合があります。

次に、次のコードで別のプラグインを作成します。

add_action( 'template_redirect', 'bootstrap' );

function bootstrap(){
    global $cPath;
    echo( "cPath : $cPath" );
    if( $cPath ){
        dosomethingwith( $cPath ); 
    }
}

すべてのコードを dosomethingwith() 関数に入れます。要求されたURLを zend コントローラーなどにマップできるかどうかを確認する必要があります 。また、おそらく die() が必要になるため、一度完了すると、Wordpress は再び引き継ぐことを試みません。

于 2009-06-17T00:04:35.563 に答える