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

时间:2017-06-28 作者:user3135691

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

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

这两个插件都是定制的post类型“wheels”和“tires”,并且都有一个模板逻辑(templates/archive-wheels.php和templates/archive-tires.php)

My problem:当两个插件都处于活动状态时wheels 插件覆盖tires 我不知道它究竟为什么要这样做。

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

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

注册自定义帖子类型wheels:


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

的模板逻辑wheels 插件

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

Register Custom Post Type tires:

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\'), // Archive Page Name
        \'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\');

Template logic for the tires plugin:

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

When I deactivate the wheels plugin, the tire plugin template logic works perfectly fine. When both plugins are active, the archive-wheels.php ALWAYS overwrites the archive-tires.php. Why?

请帮帮我,我在这件事上疯了。

1 个回复
SO网友:user3135691

一位核心撰稿人对我很仁慈,并给出了答案:

$post_type = get_post_type(\'tires\') 不是可靠获取职位类型的正确方法。

相反,您需要使用is\\u post\\u type\\u归档(“轮胎”)

正确的函数如下所示:


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

我真的希望这对将来的人有所帮助。

结束

相关推荐

Post Templates and Post ID's

我正在尝试为单个帖子使用单个模板(我有一个自定义模板)。但由于某种原因,我的帖子被覆盖,而不是显示新数据。这是我现在的设置<div class=\"details\"> <?php global $post; $category_id=get_the_category($post->ID); $announcements = new WP_Query(); $announcements->query(\'showposts=1&a