web-dev-qa-db-fra.com

Comment changer l'ordre (priorité) des filtres (ou actions) enregistrés (par exemple pour le contenu)?

Existe-t-il un moyen de modifier l’ordre des filtres, par exemple the_content avant qu'ils soient appliqués? Ce que j'ai actuellement, ce sont les idées suivantes:

/**
 * 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;
}

Cela me donne les filtres, mais je ne peux pas penser à un moyen confortable de changer leurs priorités.

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

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

Quelqu'un at-il déjà eu ce problème et sait comment éventuellement le changer?

1
Blackbam

Si vous connaissez le rappel et la priorité existants, vous pouvez simplement supprimer les filtres, puis les ajouter à une priorité différente:

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