WordPress插件会覆盖其他插件的存档 - * .php

时间:2017-06-28 09:18:38

标签: wordpress templates

我在一家轮胎公司工作,我正在写两个插件。

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

这两个插件都是自定义的帖子类型'轮子'和'轮胎',两个插件都有一个模板逻辑(templates / archive-wheels.php和templates / archive-tires.php)

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

我确实试图通过使用其他函数名称,其他前缀等来提前避免名称空间冲突。

以下是为两个插件注册CPT和模板逻辑的相关代码:

注册自定义帖子类型轮次

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

wheel 插件的模板逻辑

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

轮胎插件的模板逻辑:

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

当我停用车轮插件时,轮胎插件模板逻辑可以正常工作。当两个插件都处于活动状态时,archive-wheels.php总是会覆盖archive-tires.php。为什么?

请帮助我,我对此失去了理智。

1 个答案:

答案 0 :(得分:1)

核心撰稿人与我合作并得到答案。

问题在于这个条件声明:

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