• Buenos días.

    Estoy desarrollando un plugin que añade un nuevo estado (publish, draft,…) a un custom post type (creado también desde el mismo plugin).

    El nuevo estado lo creo de esta forma:

    public function new_mycrosite_status()
    {
    $args = array(
    ‘label’ => _x( ‘Not accept’, ‘textdomain’ ),
    ‘label_count’ => _n_noop( ‘Not accept (%s)’, ‘Not accept (%s)’, ‘textdomain’ ),
    ‘public’ => false,
    ‘exclude_from_search’ => false,
    ‘show_in_admin_all_list’ => true,
    ‘show_in_admin_status_list’ => true
    );
    register_post_status( ‘not_accept’, $args );
    }

    Esta función la engancho a ‘init’ mediante un add_action(). Sé que el estado me lo crea, porque si después hago un var_dump( get_post_stati() ) me lo muestra en el array.

    Sin embargo, esta acción no añade el estado al desplegable del custom post type para seleccionarlo, sino que para hacer esto, hay que crear otra función que lo añada, mediante el gancho ‘admin_footer-post.php’ en un add_action().

    El problema que tengo es que la función asociada al gancho anterior no llega a ejecutarse. ¿Por qué puede ser?

    Como dato curioso, decir que todos los add_action() de este plugin se ejecutan desde una función «action_init», la cuál es llamada desde otro add_action() con el gancho ‘after_setup_theme’ (exigencias del cliente). ¿Puede ser esta la causa? En caso afirmativo, ¿por qué solo con el gancho ‘admin_footer-post.php’ y no con el resto (‘add_meta_boxes’, ‘save_post’ o ‘wp_ajax_call_function’)?

    Cualquier ayuda es bienvenida.

    Mil gracias de antemano.

    Un saludo!!!

Viendo 1 respuesta (de un total de 1)
  • Moderador kallookoo

    (@kallookoo)

    Hola,

    El hook admin_footer- no te funcionara nunca.
    Revisa esta pagina para entender la jerarquia https://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_an_Admin_Page_Request

    Como no se si es un plugin o un theme, no te puedo extender la respuesta.

    Pero si te puedo decir que uses init (registras el post_type y el post_status) y uses la condicional is_admin para añadir los hooks que son solo para el admin.
    Despues no uses add_meta_boxes usa add_meta_boxes_post_type si es solo para un tipo de post_type.
    Cuando sea admin y no añades un admin menu usa el hook admin_init ( si necesitas ajax ) o load-(page) (para añadir solo los hooks necesarios para cada page) page suele ser load-post-new.php, load-edit.php por ejemplo.
    Y dire que es innecesario el after_setup_theme ya sea theme o plugin, por que no tiene nada que ver con lo que se propone y es codigo innecesario.
    Despues revisa la class class-wp-list-table.php y class-wp-post-list-table.php que tiene sus hooks para añadir campos extras y tambien deberias mirarte los archivos edit.php, post.php y post-new.php por si te hiciese falta.
    Piensa que hay muchos hooks y debes ver cual necesitas para no llenar el WordPress de hooks innecesarios.
    Por ejemplo:

    
    // hooks globales, aqui yo suelo usar un init y dentro los demas.
    if (is_admin()) {
      // hooks para el admin
    } else {
      // hooks solo para el frontend
    }
    

    Yo personalmente intento unificar, no tiene sentido por ejemplo 5 hooks init.
    Un ejemplo usando functions:

    
    function one() {
     two();
     three();
     ...
    }
    add_action( 'init', 'one', 10 );
    

    Un pequeño truco que uso es añadir 1 en la prioridad si por ejemplo fuese necesario la reutilizacion del hook init ya que es posible crear otro, no te aconsejo el current_filter o current_action ya que cabe la posibilidad que mientras se usa cambien.

Viendo 1 respuesta (de un total de 1)
  • El debate ‘Gancho «admin_footer-post.php» no funciona’ está cerrado a nuevas respuestas.