• Resuelto Daniel P.

    (@danidub)


    Hola, estoy intentando entender un ejemplo que aparece en el Plugin Handbook, específicamente en la parte de hooks de activación. El ejemplo que se muestra registra un Custom Post Type:

    /**
     * Register the "book" custom post type
     */
    function pluginprefix_setup_post_type() {
        register_post_type( 'book', ['public' => true ] ); 
    } 
    add_action( 'init', 'pluginprefix_setup_post_type' );
     
     
    /**
     * Activate the plugin.
     */
    function pluginprefix_activate() { 
        // Trigger our function that registers the custom post type plugin.
        pluginprefix_setup_post_type(); 
        // Clear the permalinks after the post type has been registered.
        flush_rewrite_rules(); 
    }
    register_activation_hook( __FILE__, 'pluginprefix_activate' );

    Entiendo que una vez se activa el plugin, el CPT es registrado mediante la línea:
    add_action( 'init', 'pluginprefix_setup_post_type' );

    También comprendo que una vez es activado el plugin se deba llamar a la función flush_rewrite_rules();

    Lo que no comprendo es por qué se debe llamar nuevamente a la función pluginprefix_setup_post_type dentro del hook de activacion. ¿De qué sirve volver a llamar a esa función? Si su objetivo es registrar el CPT y se está haciendo con add_action.

    He probado quitar esa línea de dentro del hook y el comportamiento parece ser exactamente el mismo.

    Sospecho que me estará faltando una pieza para comprender todo el panorama.

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • Hola @danidub hay varias cosas. Primero, flush_rewrite_rules recargará la estructura de urls, lo mismo que cuando le damos a mano a guardar permalinks desde admin. Esto sólo se debe hacer cuando se activa el plugin y cuando se desactiva, ya que es una operación «costosa» a nivel de base de datos y sólo si se reescriben urls, algo que se hace en un CPT.

    En realidad, dónde debes cargar tu CPT es cuando se «inicia el proceso de WordPress», es decir en el hook «init». El motivo de que también se inicie al activar el plugin register_activation_hook es porque antes de recargar las reglas de reescritura debemos cargarlas. A ver si me consigo explicar: Si al activar el plugin recargamos las reglas sin reescribirlas, no estamos variando nada. De ahí la duplicidad de esa función.

    En realidad register_activation_hook sólo se ejecuta cuando actives el plugin después de instalarlo. add_action( 'init', 'pluginprefix_setup_post_type' ); se ejecutará cada vez que se inicie el proceso de carga de WordPress, necesario para que esté disponible el CPT.

    No sé si me he explicado bien, sino, pregunta de nuevo las dudas que te surjan.

    Saludos.

    Iniciador del debate Daniel P.

    (@danidub)

    Hola @carloslongarela excelente respuesta, eso es lo que buscaba, comprender la duplicidad de esa función 🙌💪

    ¡Muchísimas gracias!

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • El debate ‘Duda en docs – hook de activación de plugins y CPT’ está cerrado a nuevas respuestas.