1

Buddypress には、ユーザー ロールに基づいてグループの階層を作成できるように、プラグイン BP Group Hierarchy と組み合わせたグループ機能があります。

ただし、プラグインは group-extension-api> リンクで Buddpress によって教えられた方法を使用しました。

グループ ステップは関数 bp_register_group_extension を使用して登録され、add_action が呼び出されます。アクションを削除しようとしましたが、成功しませんでした。配列がどのように機能するか、つまり array( &$extension, \'_register\' ) がよくわからないので、検索してこの投稿を見つけました。

という一行があります

上記のオブジェクト参照メソッド コールバックの新しい形式は、常に次のとおりです。クラス名の直後にメソッド名が続き、その後に以前に追加された量 (クラス名 + メソッド名) が続きます。クラスの場合、これにより、オブジェクト参照クラスをできるだけ多く追加し、互いにオーバーライドしないメソッドを追加できます。

ただし、アクションを削除できないようです。

function.php に次のコード行を入れて、アクションを削除しようとしました

関数 remove_bp_hierarchy(){

if (has_action('bp_actions')) {

echo $extension = new BP_Groups_Hierarchy_Extension;

remove_action('bp_actions', array( &$extension, '_register' ), 999);

} そうしないと {

}

add_action('bp_init','remove_bp_hierarchy', 999);

私の remove_action に何か問題がありますか、それとも間違った方法を使用していますか? ありがとうございます。

## アップデート

フックのリストとページ内のフックされた機能を確認できるページを見つけました。探している関数である _register という名前の関数があることがわかります。ただし、クラスのアドレスは常に変更されます。見つかった関数を使用して preg_match を実行し、見つかったときに削除することを考えていました。これは超重い。それで、それを取り除く他の方法はありますか?ありがとうございます。

4

1 に答える 1

3

CodingBabyDotCom-

$wp_filter簡単に言うと、アクションを削除するには、配列をトラバースする必要があります。

関数でアクションを削除するには、アクションの作成に使用されたSAMEインスタンスへの参照が必要ですremove_action。したがって、投稿した関数は、新しいインスタンスを使用しているため機能しません。

残念ながらbp_register_group_extension()、一時的なインスタンスしか作成されないため、後の関数で参照することはできません。

コメントのコードは、レベル8のすべてのアクションを削除します。これは、すべてのグループ拡張を意味します。必要なものだけを削除するには、各フィルターを繰り返し処理し、次のコマンドでそのタイプを確認します。

is_a( $wp_filter['bp_actions'][8][$key], 'BP_Groups_Hierarchy_Extension' )

于 2012-11-12T23:12:54.620 に答える