plugin überschreibt die Archiv-.php-Datei eines anderen Plugins

Ich arbeite für eine Reifenfirma und schreibe zwei Plugins.

Das erste Plugin soll Leichtmetallfelgen zeigen. Das zweite Plugin soll Reifen zeigen.

Beide Plugins kommen als benutzerdefinierte Post-Typen ‘Räder’ und ‘Reifen’, und beide Plugins haben eine Template-Logik (templates / archive-wheels.php und templates / archive-tires.php)

Mein Problem: Wenn beide Plugins aktiv sind, überschreibt das Wheels- Plugin die Reifen- Archivseite und ich weiß nicht, warum es in der Welt so läuft.

Ich habe wirklich versucht, Namespace-Konflikte im Voraus zu vermeiden, indem ich andere functionsnamen, andere Präfixe usw. benutze.

Hier ist der relevante Code zum Registrieren der CPTs und der Template-Logik für beide Plugins:

Registrieren Sie benutzerdefinierte Post Type Räder :

function rg_wp_wheels_register_cpt(){ // Custom Post Type Name $cpt_name = 'wheels'; // CPT Features $cpt_features = array( 'title', 'revisions' ); // Slug for archive page $cpt_slug = 'designs'; $labels = array( 'name' => __('Wheels', 'rg-wp-wheels'), 'singular_name' => __('Wheel', 'rg-wp-wheels'), 'menu_name' => __('Wheels', 'rg-wp-wheels'), 'name_admin_bar' => __('Wheel', 'rg-wp-wheels'), 'all_items' => __('Designs', 'rg-wp-wheels'), // Archive Page Name 'add_name' => __('Add new wheel', 'rg-wp-wheels'), 'add_new_item' => __('Add new wheel', 'rg-wp-wheels'), 'edit' => __('Edit wheel', 'rg-wp-wheels'), 'edit_item' => __('Edit wheel', 'rg-wp-wheels'), 'new_item' => __('New wheel', 'rg-wp-wheels'), 'view' => __('View', 'rg-wp-wheels'), 'view_item' => __('View', 'rg-wp-wheels'), 'search_items' => __('Search ', 'rg-wp-wheels'), 'parent' => __('Parent', 'rg-wp-wheels'), 'not_found' => __('No wheels found', 'rg-wp-wheels'), 'not_found_in_trash' => __('No wheels found in Trash', 'rg-wp-wheels') ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'show_in_nav_menus' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_admin_bar' => true, 'menu_position' => 21, 'menu_icon' => 'dashicons-marker', 'can_export' => true, 'delete_with_user' => false, 'hierarchical' => false, 'has_archive' => true, 'query_var' => true, 'capability_type' => 'post', 'map_meta_cap' => true, // 'capabilities' => array(), 'rewrite' => array( 'slug' => $cpt_slug, 'with_front'=> true, 'pages' => true, 'feeds' => false ), 'supports' => $cpt_features ); register_post_type($cpt_name, $args); } add_action('init', 'rg_wp_wheels_register_cpt'); 

Template Logic für das Wheels- Plugin

 function rg_wp_wheels_template_logic ($ original_template) {
     $ post_type = get_post_type ();

     if (is_archive () || is_search () && $ post_type == 'Räder') {

         if (file_exists (get_template_directory_uri (). '/archive-wheels.php')) {
             return get_template_directory_uri ().  '/archive-wheels.php';
         } sonst {
             Zurückgeben von plugin_dir_path (__ FILE__).  'templates / archiv-wheels.php';
         }

     } elseif (is_single () && $ post_type == 'Räder') {

         if (Datei_exists (get_template_directory_uri (). '/single-wheels.php')) {
             return get_template_directory_uri ().  '/single-wheels.php';
         } sonst {
             Zurückgeben von plugin_dir_path (__ FILE__).  'templates / single-wheels.php';
         }

     }

     return $ original_template;
 }
 add_action ('template_include', 'rg_wp_wheels_template_logic');

Registrieren Sie Custom Post Type Reifen :

 function rg_wp_tires_register_cpt () {

     // Name des benutzerdefinierten Posttyps
     $ cpt_name = 'Reifen';
     // CPT-functionen
     $ cpt_features = Array (
         'Titel',
         "Revisionen"
     );
     // Schnecke
     $ cpt_slug_tires = 'Profile';
     $ labels = Array (
         'name' => __ ('Reifen', 'rg-wp-Reifen'),
         'singular_name' => __ ('Reifen', 'rg-wp-Reifen'),
         'menu_name' => __ ('Reifen', 'rg-wp-Reifen'),
         'name_admin_bar' => __ ('Reifen', 'rg-wp-Reifen'),
         'all_items' => __ ('Profiles', 'rg-wp-tires'), // Archiv Seitenname
         'add_name' => __ ('Neuen Reifen hinzufügen', 'rg-wp-tires'),
         'add_new_item' => __ ('Neuen Reifen hinzufügen', 'rg-wp-tires'),
         'edit' => __ ('Reifen bearbeiten', 'rg-wp-tires'),
         'edit_item' => __ ('Reifen bearbeiten', 'rg-wp-tires'),
         "new_item" => __ ("Neuer Reifen", "rg-wp-Reifen"),
         'view' => __ ('Ansicht', 'rg-wp-tires'),
         'view_item' => __ ('Ansicht', 'rg-wp-tyres'),
         'search_items' => __ ('Suchen', 'rg-wp-tires'),
         'Eltern' => __ ('Eltern', 'rg-wp-Reifen'),
         'not_found' => __ ('Keine Reifen gefunden', 'rg-wp-Reifen'),
         'not_found_in_trash' => __ ('Keine Reifen im Müll', 'rg-wp-Reifen')
     );

     $ args = Array (
         'labels' => $ labels,
         "öffentlich" => wahr,
         'öffentlich_queryable' => wahr,
         'exclude_from_search' => falsch,
         'show_in_nav_menus' => wahr,
         'show_ui' => wahr,
         'show_in_menu' => wahr,
         'show_in_admin_bar' => wahr,
         'menu_position' => 22,
         'menu_icon' => 'dashicons-marker',
         'can_export' => wahr,
         'delete_with_user' => falsch,
         'hierarchisch' => falsch,
         'has_archive' => stimmt,
         'query_var' => wahr,
         'capability_type' => 'post',
         'map_meta_cap' => stimmt,
         // 'Fähigkeiten' => array (),
         'rewrite' => Array (
             'slug' => $ cpt_slug_tires,
             'mit_front' => stimmt,
             'Seiten' => wahr,
             'Feeds' => falsch
         ),
         'unterstützt' => $ cpt_features
     );
     register_post_type ($ cpt_name, $ args);
 }
 add_action ('init', 'rg_wp_tires_register_cpt');

Vorlagenlogik für das Reifen- Plugin:

 function rg_wp_tires_template_logic ($ original_template) {
     $ post_type = get_post_type ();

     if (is_archive () || is_search () && $ post_type == 'reifen') {

         if (Datei_exists (get_template_directory_uri (). '/archive-tires.php')) {
             return get_template_directory_uri ().  '/archive-tires.php';
         } sonst {
             Zurückgeben von plugin_dir_path (__ FILE__).  'templates / archiv-tires.php';
         }

     } elseif (is_single () && $ post_type == 'Reifen') {

         if (file_exists (get_template_directory_uri (). '/single-tires.php')) {
             return get_template_directory_uri ().  '/single-tires.php';
         } sonst {
             Zurückgeben von plugin_dir_path (__ FILE__).  'templates / single-tires.php';
         }

     }

     return $ original_template;
 }
 add_action ('template_include', 'rg_wp_tires_template_logic');

Wenn ich das Wheels-Plugin deaktiviere, funktioniert die Reifen-Plugin-Template-Logik einwandfrei. Wenn beide Plugins aktiv sind, überschreibt die archive-wheels.php IMMER die archive-tires.php. Warum?

Bitte hilf mir, ich verliere meine Meinung dazu.

Solutions Collecting From Web of "plugin überschreibt die Archiv-.php-Datei eines anderen Plugins"

Ein coremitarbeiter hatte Gnade mit mir – und eine Antwort:

$post_type = get_post_type('tires') ist nicht die richtige Methode, um den Post-Typ zuverlässig zu erhalten.

Stattdessen müssen Sie is_post_type_archive (‘tires’) verwenden

Die korrekte function sieht so aus:

// Template Logic function rg_wp_tires_template_logic($original_template) { if(is_post_type_archive('tires') || (is_search() && $_GET['post_type'] === 'tires')) { if(file_exists(get_template_directory_uri() . '/archive-tires.php')) { return get_template_directory_uri() . '/archive-tires.php'; } else { return plugin_dir_path(__FILE__) . 'templates/archive-tires.php'; } } elseif(is_singular('tires')) { if(file_exists(get_template_directory_uri() . '/single-tires.php')) { return get_template_directory_uri() . '/single-tires.php'; } else { return plugin_dir_path(__FILE__) . 'templates/single-tires.php'; } } return $original_template; } add_action('template_include', 'rg_wp_tires_template_logic');
// Template Logic function rg_wp_tires_template_logic($original_template) { if(is_post_type_archive('tires') || (is_search() && $_GET['post_type'] === 'tires')) { if(file_exists(get_template_directory_uri() . '/archive-tires.php')) { return get_template_directory_uri() . '/archive-tires.php'; } else { return plugin_dir_path(__FILE__) . 'templates/archive-tires.php'; } } elseif(is_singular('tires')) { if(file_exists(get_template_directory_uri() . '/single-tires.php')) { return get_template_directory_uri() . '/single-tires.php'; } else { return plugin_dir_path(__FILE__) . 'templates/single-tires.php'; } } return $original_template; } add_action('template_include', 'rg_wp_tires_template_logic'); 

Ich hoffe wirklich, das hilft jemandem in der Zukunft.