web-dev-qa-db-fra.com

WordPress Plugin Boilerplate - Crochet add_action dans la fonction "activer" statique

J'espère que quelqu'un pourra me diriger dans la bonne direction ici.

J'utilise le plugin Wordpress Plugin Boilerplate pour développer un plugin personnalisé. Lors de l’installation, le plug-in enregistre un nouveau type de message (cours), une nouvelle taxonomie (zones de cours) et met en place des structures de lien permanent pour le nouveau type de message et la nouvelle taxonomie.

J'ai ajouté mon code (pour créer le type de message et la taxonomie) à la classe Activator comme ci-dessous, mais le code ne semble pas fonctionner, je suppose cela est dû au hook add_action que j'utilise (à savoir le hook 'init' recommandé par le codex d'installation du plugin) car le code fonctionnera comme prévu si je l'appelle dans le fichier de plugin principal (iwcollege- courses.php) mais je ne suis vraiment pas sûr.

Il convient de noter que je ne reçois aucune erreur lors de l'activation du plug-in, celui-ci semble s'activer correctement, mais aucun type de message personnalisé ni aucune taxonomie ne sont créés.

Des idées sur pourquoi cela se produit et comment je peux y remédier?

Merci d'avance,

Aaron Bentley :)

_ {iwcollege-courses.php} _

// The Activator class is called by the following code within the main plugin file as below:

function activate_IWCollege_Courses() {
    require_once plugin_dir_path( __FILE__ ) . 'includes/class-iwcollege-courses-activator.php';
    IWCollege_Courses_Activator::activate();
}

register_activation_hook( __FILE__, 'activate_IWCollege_Courses' );

_ {class-iwcollege-courses-activator.php} _

class IWCollege_Courses_Activator {

    public static function activate() {

        add_action( 'init', array( get_called_class(), 'create_course_post_type' ), 0 );
        add_action( 'init', array( get_called_class(), 'create_course_area_taxonomies'), 0 );
        add_filter( 'post_type_link', array( get_called_class(), 'course_permalink_structure'), 10, 4 );

        flush_rewrite_rules();
    }

    public static function create_course_post_type() {

        $labels = array(
            'name'               => 'Courses', 'post type general name',
            'singular_name'      => 'Course', 'post type singular name',
            'add_new'            => 'Add New', 'Course',
            'add_new_item'       => 'Add New Course',
            'edit_item'          => 'Edit Course',
            'new_item'           => 'New Course',
            'all_items'          => 'All Courses',
            'view_item'          => 'View Course',
            'search_items'       => 'Search Courses',
            'not_found'          => 'No Courses found',
            'not_found_in_trash' => 'No Courses found in the Trash',
            'parent_item_colon'  => '',
            'menu_name'          => 'Courses',
            'menu-icon'          => 'dashicons-list-view'
        );

        $supports = array (
            'title',
            'editor',
            'thumbnail',
            'excerpt',
            'revisions'
        );

        $capabilities = array(
            'create_posts'  => false
        );

        $rewrite = array(
            'slug'          => 'course-area/%course_areas_taxonomy%/courses',
            'with_front'    => true,
            'hierarchical'  => false
        );

        $args = array(
            'labels'                => $labels,
            'supports'              => $supports,
            'description'           => 'Holds IWCollege Course data',
            'public'                => true,
            'rewrite'               => $rewrite,
            'menu_position'         => 5,
            'has_archive'           => true,
            'taxonomies'            => array('post_tag'),
            'capabilities'          => $capabilities,
            'map_meta_cap'          => true,
            'public'                => true,
            'query_var'             => true,
            'publicly_queryable'    => true

        );

        register_post_type( 'course', $args );
    }


    public static function create_course_area_taxonomies() {

        $labels = array(
            'name'              => 'Course Areas', 'taxonomy general name',
            'singular_name'     => 'Course Area', 'taxonomy singular name',
            'search_items'      => 'Search Course Areas',
            'all_items'         => 'All Course Areas',
            'parent_item'       => 'Parent Course Area',
            'parent_item_colon' => 'Parent Course Area:',
            'edit_item'         => 'Edit Course Area',
            'update_item'       => 'Update Course Area',
            'add_new_item'      => 'Add New Course Area',
            'new_item_name'     => 'New Course Area Name',
            'menu_name'         => 'Course Areas',
            'popular_items'     => null
        );

        $rewrite = array(
            'slug'          => 'course-area',
            'with_front'    => true,
            'hierarchical'  => true,
            'ep_mask'       => 'ep-mask'
        );

        $capabilities = array(
            'manage_terms'  => true,
            'edit_terms'    => true,
            'delete_terms'  => false,
            'assign_terms'  => false
        );

        $args = array(
            'hierarchical'          => false,
            'labels'                => $labels,
            'show_ui'               => true,
            'show_admin_column'     => true,
            'show_in_nav_menus'     => true,
            'show_tagcloud'         => false,
            'query_var'             => true,
            'sort'                  => false,
            'public'                => false,
            'rewrite'               => $rewrite,
            'capabilities'          => $capabilities,
            'update_count_callback' => '_update_post_term_count'
        );

        register_taxonomy( 'course_areas_taxonomy', array('course'), $args );

        register_taxonomy_for_object_type( 'course_areas_taxonomy', 'course' );

    }


    public static function course_permalink_structure ($post_link, $post, $leavename, $sample) {

        if ( strpos( $post_link, '%course_areas_taxonomy%' ) !== false ) {

            $course_post_type_term = get_the_terms( $post->ID, 'course_areas_taxonomy' );
            $post_link = str_replace( '%course_areas_taxonomy%', array_pop( $course_post_type_term )->slug, $post_link );
        }

        return $post_link;
    }
}
1
Aaron Bentley

Le problème est l'initialisation dans WordPress via register_activation_hook( __FILE__, 'activate_IWCollege_Courses' );. La fonction a été activée lors de l'activation d'un plugin, pas plus. Vous devez basculer sur le hook init. Pour les types de publication personnalisée, le hook d’initialisation est recommandé dans le codex. Les types de publication personnalisés doivent être enregistrés lors de chaque initialisation de WordPress.

Mais la partie importante flush_rewrite_rules();in de votre méthode d'activation ne devrait être exécutée que lors de l'activation pour réécrire les permaliens. Pour cette fonction est-il juste, qu'il a initié sur la register_activation_hook().

Un pseudo exemple pour votre problème.

register_activation_hook( __FILE__, 'example_activate' );
function example_activate() {

   flush_rewrite_rules();
}

add_action( 'init', 'example_register_cpt' );
function example_register_cpt() {

   // All with the goal of:
   register_post_type();
   // And
   register_taxonomy();
   // much more, that run always on WP
}
2
bueltge