我在一家轮胎公司工作,正在编写两个插件。
第一个插件是显示合金车轮。第二个插件是显示轮胎。
这两个插件都是定制的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?
请帮帮我,我在这件事上疯了。