我在一家轮胎公司工作,我正在写两个插件。
第一个插件是展示合金轮毂。 第二个插件是显示轮胎。
这两个插件都是自定义的帖子类型'轮子'和'轮胎',两个插件都有一个模板逻辑(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。为什么?
请帮助我,我对此失去了理智。
答案 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');