2017-06-28 52 views
1

我正在为一家轮胎公司工作,我正在编写两个插件。WordPress插件覆盖其他插件的存档 - *。php

第一个插件是展示铝合金轮毂。 第二个插件是展示轮胎。

两个插件来作为一个自定义后类型“轮子”和“轮胎”,两者插件,它(模板/存档wheels.php和模板/存档tires.php)有一个模板逻辑

我的问题: 当两个插件都处于活动状态时,轮毂插件会覆盖轮胎存档页面,我不知道它为什么会这样做。

我真的试图通过使用其他函数名,其他前缀等

这里是注册彩管和模板逻辑两个插件相关的代码,以避免提前命名空间冲突:

注册自定义文章类型

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'), 
     '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'); 

模板逻辑为车轮插件

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

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

     if(file_exists(get_template_directory_uri() . '/archive-wheels.php')) { 
      return get_template_directory_uri() . '/archive-wheels.php'; 
     } else { 
      return plugin_dir_path(__FILE__) . 'templates/archive-wheels.php'; 
     } 

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

     if(file_exists(get_template_directory_uri() . '/single-wheels.php')) { 
      return get_template_directory_uri() . '/single-wheels.php'; 
     } else { 
      return plugin_dir_path(__FILE__) . 'templates/single-wheels.php'; 
     } 

    } 

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

注册自定义文章类型轮胎

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

if(is_archive() || is_search() && $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_single() && $post_type == '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'); 

当我停用车轮插件,轮胎插件模板:

轮胎插件
function rg_wp_tires_register_cpt(){ 

    // Custom Post Type Name 
    $cpt_name = 'tires'; 
    // CPT Features 
    $cpt_features = array(
     'title', 
     'revisions' 
    ); 
    // Slug 
    $cpt_slug_tires = 'profiles'; 
    $labels = array(
     'name'      => __('Tires', 'rg-wp-tires'), 
     'singular_name'    => __('Tire', 'rg-wp-tires'), 
     'menu_name'     => __('Tires', 'rg-wp-tires'), 
     'name_admin_bar'   => __('Tires', 'rg-wp-tires'), 
     'all_items'     => __('Profiles', 'rg-wp-tires'), 
     'add_name'     => __('Add new tire', 'rg-wp-tires'), 
     'add_new_item'    => __('Add new tire', 'rg-wp-tires'), 
     'edit'      => __('Edit tire', 'rg-wp-tires'), 
     'edit_item'     => __('Edit tire', 'rg-wp-tires'), 
     'new_item'     => __('New tire', 'rg-wp-tires'), 
     'view'      => __('View', 'rg-wp-tires'), 
     'view_item'     => __('View', 'rg-wp-tires'), 
     'search_items'    => __('Search ', 'rg-wp-tires'), 
     'parent'     => __('Parent', 'rg-wp-tires'), 
     'not_found'     => __('No tires found', 'rg-wp-tires'), 
     'not_found_in_trash'  => __('No tires found in Trash', 'rg-wp-tires') 
); 

    $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'   => 22, 
     '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_tires, 
      'with_front'=> true, 
      'pages'  => true, 
      'feeds'  => false 
     ), 
     'supports'  => $cpt_features 
    ); 
    register_post_type($cpt_name, $args); 
} 
add_action('init', 'rg_wp_tires_register_cpt'); 

模板逻辑逻辑工作非常好。当两个插件都处于活动状态时,archive-wheels.php总是覆盖archive-tires.php。为什么?

请帮助我,我对此失去了主意。

+0

我会张贴此对http://wordpress.stackexchange.com/。这一切对我来说都很好,很奇怪。 – Christina

+0

谢谢克里斯蒂娜,我在核心开发人员的帮助下破解了这个螺母。是的,我已经在WPSE论坛上发布了这个问题,但是没有人回答..所以我在这里尝试了我的运气..第一个条件是错误,请参阅下面的答案。谢谢你试图帮助:) – user3135691

回答

1

一个核心贡献者有我和一个答案merci。

问题是这样的条件语句:

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

需要被包裹在与归档两个附加的支架和搜索

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

注意,归档和搜索在附加括号包裹起来

最重要的是,get_post_type在这种情况下是不正确的。它应该使用:is_post_type_archive('CPT')..

if(is_post_type_archive('wheels') || (is_search() && $_GET['post_type'] === 'wheels')) {... 

最终的正确功能如下:

// Template Logik 
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'); 
+0

太棒了!很难看到。 WordPress有代码编写指南,其中一个是这样的空间:'if(is_post_type_archive('tires')||(is_search()&& $ _GET ['post_type'] ==='tyres')){''' - 更易于阅读。 – Christina