web-dev-qa-db-ja.com

登録済みフィルタ(またはアクション)の順序(優先順位)を変更するにはどうすればいいですか?(例えばthe_contentについて)

のフィルタの順序を変更する方法はありますか。適用前のthe_content?私が現在持っているものは以下のアイデアです:

/**
 * Print all filters for some hook.
 */
function print_filters_for( $hook = '' ) {
    global $wp_filter;
    if( empty( $hook ) || !isset( $wp_filter[$hook] ) )
        return;

    print '<pre>';
    print_r( $wp_filter[$hook] );
    print '</pre>';
}

add_action('template_redirect','print_filters');

function print_filters() {
    print_r(print_filters_for('the_content'));die;
}

これは私にフィルタを与えるが、私はそれらの優先順位を変更するための快適な方法を考えることはできない。

add_filter( 'the_content', 'my_content_filter_priority_reorder', 0 );

function my_content_filter_priority_reorder($the_content) {
    // reorder filter priorities
    return $the_content;
}

誰かがすでにこの問題を抱えており、これを変更する方法を知っていますか?

1
Blackbam

既存のコールバックと優先度がわかっている場合は、フィルタを削除してから別の優先度で追加し直すことができます。

remove_filter( 'the_content', 'convert_smilies', 20 );
add_filter( 'the_content', 'convert_smilies', 30 );

remove_filter( 'the_content', 'capital_P_dangit', 11 );
add_filter( 'the_content', 'capital_P_dangit', 20 );
2
Jacob Peattie