WordPress Plugin Boilerplate – add_action hook in statische “activate” -function

Ich hoffe, dass jemand mich hier in die richtige Richtung weisen kann.

Ich verwende das WordPress Plugin Boilerplate, um ein benutzerdefiniertes Plugin zu entwickeln. Bei der Installation registriert das Plugin einen neuen Post-Typ (Kurs), eine neue Taxonomie (Kurs-Bereiche) und richtet Permalink-Strukturen für den neuen Post-Typ und die Taxonomie ein.

Ich habe meinen Code (um den Post-Typ und die Taxonomie zu erstellen) zur Activator-class wie unten hinzugefügt, aber der Code scheint nicht zu laufen. Ich vermute , dass er durch den add_action-Hook verursacht wird, den ich verwende init ‘Hook wie vom Codex für Plugin-Installationen empfohlen, da der Code wie vorgesehen ausgeführt wird, wenn ich es innerhalb der Haupt-Plugin-Datei ( iwcollege-courses.php ) aufrufen, aber ich bin mir wirklich nicht sicher.

Es ist erwähnenswert, dass ich keine Fehler beim Aktivieren des Plugins erhalte. Es scheint, dass es erfolgreich aktiviert wurde, aber es wurden keine benutzerdefinierten Post-Typen oder Taxonomien erstellt .

Irgendwelche Ideen, warum das passiert und wie kann ich das beheben?

Danke im Voraus,

Aaron Bentley 🙂

iwcollege-Kurse.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-Kurse-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; } } 

Solutions Collecting From Web of "WordPress Plugin Boilerplate – add_action hook in statische “activate” -function"

Das Problem ist die Initialisierung in WordPress über register_activation_hook( __FILE__, 'activate_IWCollege_Courses' ); Die function wurde bei der Aktivierung eines Plugins ausgetriggers, nicht mehr. Sie müssen zur Hook- init wechseln. Für benutzerdefinierte Post-Typen wird der Init-Hook im Codex empfohlen. Benutzerdefinierte Post-Typen müssen bei jeder WordPress-Initialisierung registriert werden.

Aber der wichtige Teil flush_rewrite_rules(); in Ihrer Aktivierungsmethode sollte nur bei Aktivierung ausgeführt werden, um die Permalinks neu zu schreiben. Für diese function ist es richtig, dass sie über den register_activation_hook() initialisiert.

Ein Pseudo-Beispiel für Ihr Problem.

 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 }