役割と機能を追加するときに、どのアクションにフックする必要がありますか?


10

add_role()と$ role-> add_cap()を使用して、新しいカスタムロールを設定し、既存のロールに新しい機能をアタッチします。

これを行うのに最適な場所はどこですか?もちろん、functions.php内で直接実行でき、それで処理を完了できます。しかし、これはベストプラクティスですか?これを行う必要があるのはadmin_initだけですか?または私はinitでそれをすべきですか?

functions.php内に直接の関数呼び出しを単にドロップするのではなく、initアクションフックの使用に関するベストプラクティスが何であるかは完全にはわかりません。

あなたの入力をありがとう!

回答:


10

役割と機能を追加するときにのみ使用した場合の役割と機能はデータベースに保存されているので、一度コードを実行する必要があるadd_roleか、->add_capアンディはあなたが使用することができたので、同じように機能しafter_setup_theme、アクションのこの種のためではなく、それだけので、チェックのいくつかの種類を追加しますregister_activation_hookのように、またはオプションを使用して、1回実行します。

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}

これをありがとう。add_roleまたはadd_capが常にデータベースを活用しているのは本当ですか?私がソースコードを掘り下げたとき、これは常にそうであるとは限らなかったように思われました-つまり:WP_Rolesのほとんどのメソッドでは、if($ this-> use_db)のチェックがあり、ロールの可能性があると思います常にDBに保存されるとは限りません。
トムオージェ2011

また、オプションを使用してフラグを設定するのではなく、特にスケーラブルではないので、ロールが作成されたかどうかを簡単に照会する方法はありませんか?それができない場合、役割がすでに存在している場合、その役割を再定義するためにどのような害がありますか?重複する役割を取得しますか、それとも無視しますか?もう一度capabilities.phpを見ると、add_roleの下にこれがあることがわかります:if(isset($ this-> roles [$ role]))return; これは役割を複製しないので害はないことを示しているようです。
トム・オージェ

意味がわかりませんが、デフォルトは$use_db = true;WP_Rolesクラスにあります。オプションを使用してフラグを設定する場合は例ですが、使用できますregister_activation_hookが、コードを実行するのは1回だけで、実行時間を節約できるという考え方です。
Bainternet 2011

私はこれを一度も見たことはありませんが、ロールの変更をプラグインに入れ、アクティブ化/非アクティブ化フックを利用して変更を1回だけトリガーするのは理にかなっていると思います。誰かがその道を進んだことはありますか?
mrwweb 2013年

@mrwwebも問題なく機能する
Bainternet

7

プラグインについてはplugins_loaded、これを使用して成功しました。テーマには、を使用しますafter_setup_theme

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.