remove_action en after_setup_theme no funciona desde el tema secundario

17

Estoy tratando de eliminar una acción de tema para un tema de temas elegantes usando un tema secundario. Esto funciona cuando elimino la acción después del código add_action en cualquier parte del tema principal functions.php. Sin embargo, no funciona cuando lo agrego desde el tema secundario functions.php.

remove_action ('after_setup_theme', 'et_pb_setup_theme' , 10);

La acción Eliminar tiene la misma prioridad 10 que la acción agregar. ¿No debería funcionar?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action
Sheriff fumador
fuente

Respuestas:

25

Como @cybmeta ya señaló, usted es demasiado pronto con su eliminación. Por lo tanto, debe aplazar la eliminación real, por ejemplo, así:

add_action( 'after_setup_theme', 'wpdev_170663_remove_parent_theme_stuff', 0 );

function wpdev_170663_remove_parent_theme_stuff() {

    remove_action( 'after_setup_theme', 'et_pb_setup_theme' );
}
tfrommen
fuente
¡Trabajó! He estado intentando algo similar, pero es malo! ¡Ya que puse una condición usando has_action para verificar una acción aún inexistente en child functions.php, antes de remove_action no funcionaba! ¡Muchas gracias! function etn(){ if(has_action('after_setup_theme', 'et_pb_setup_theme')){ remove_action ('after_setup_theme', 'et_pb_setup_theme' ); } } add_action ('after_setup_theme', 'etn', 9);
Sheriff fumador
3

El archivo functions.php de los temas secundarios se carga justo antes del tema principal functions.php, por lo que cuando se ejecuta remove_actionen el tema secundario, la acción que está tratando de eliminar no existe porque se agrega más tarde.

cybmeta
fuente
1
... pero no tiene prioridad 10 y el hook after_setup_theme debería encargarse de eso? ¿Cómo debo hacer esto de todos modos?
Sheriff fumador
No, el argumento de prioridad no es para eso. Simplemente no puedes eliminar algo que no existe. En otras palabras, (tomado del códice ) no puede eliminar con éxito la acción antes de que se haya agregado.
cybmeta
1
Entonces, ¿cómo es posible eliminar una acción establecida por el tema principal?
Aerendir
1

Prueba (solo cambia los nombres):

add_action( 'init' , 'myyy_remove' , 15 );
function myyy_remove() {
        remove_action('ACTION_NAME', 'my_function_name_Something'   ,11);
        remove_action('ACTION_NAME', 'my_function_name_Another'     ,11);
}
T.Todua
fuente