我遇到一个问题,当我在我创建的自定义帖子类型下保存帖子时,tb_template,下面的代码运行正常,除了创建一个带有post_type tb_table_cache的新帖子,它将帖子类型设置为tb_template。我不明白为什么会发生这种情况,因为我在设置post_type的代码中的任何地方我将它硬编码到tb_table_cache所以我不知道为什么它不会保存post_type那样。
有一点需要注意,代码在两者上都是相同的,但是这个问题发生在我的实际网站上而不是我的开发网站上。
感谢任何帮助。
这是在save_post挂钩下运行的。
function build_template_table_cache( $post_id ) {
$tb_tables = get_posts(array(
'post_type' => 'tb_table',
'numberposts' => -1,
'post_status' => 'publish'
));
if($tb_tables) {
foreach($tb_tables as $tb_table) {
$tb_table_template = get_field('tb_table_template', $tb_table->ID);
if($tb_table_template) {
if($tb_table_template->ID == $post_id) {
self::build_table_cache($post_id, $tb_table->ID, true);
}
wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly
}
}
}
}
function build_table_cache($post_id, $thispostid = 0, $fromtemplate = false) {
$used_postid = $post_id;
if($fromtemplate) {
$used_postid = $thispostid;
}
$post_type = get_post_type($used_postid);
if ( "tb_table" != $post_type || wp_is_post_revision( $used_postid ) ) { return; }
$item_args = array();
$item_args['post_type'] = 'tb_table';
$item_args['post_status'] = 'publish';
$item_args['posts_per_page'] = 1;
$item_args['p'] = $used_postid;
$item_data = new WP_Query($item_args);
if ( $item_data->have_posts() ) {
while ($item_data->have_posts()) {
$item_data->the_post();
$current_post_title = get_the_title();
$template_object = get_field('tb_table_template');
if($template_object) {
$template_type = get_field('tb_table_template_type', $template_object->ID);
if (empty($template_type)) { $template_type = "normal"; }
$template = $template_object->post_content;
$tb_plugin_url = plugin_dir_url(dirname(__FILE__));
include(plugin_dir_path( dirname( __FILE__ ) ) . "includes/inc/function-table-builder-".$template_type.".php");
$version_args = array(
'post_status' => 'publish',
'post_type' => 'tb_table_cache',
'meta_key' => 'tb_cache_version',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'posts_per_page' => 1,
'meta_query' => array(
array(
'key' => 'tb_cache_parent',
'value' => $used_postid,
'compare' => '=',
)
)
);
$version_query = new WP_Query($version_args);
if ( $version_query->have_posts() ) {
while ($version_query->have_posts()) {
$version_query->the_post();
$prev_version = get_post_meta(get_the_ID(), 'tb_cache_version', true);
if(empty($prev_version)) { $prev_version = 0; }
if($prev_version < 1) {
$new_version = 1;
} else {
$new_version = $prev_version + 1;
}
}
} else {
$new_version = 1;
}
$cache_args = array(
'post_status' => 'publish',
'post_type' => 'tb_table_cache',
'post_author' => get_current_user_id(),
'post_title' => $current_post_title . " - Cache",
'post_content' => $template,
'meta_input' => array(
'tb_cache_parent' => $used_postid,
'tb_cache_version' => $new_version,
),
);
$cache_post_id = wp_insert_post( $cache_args );
} // if($template_object)
} // while ($item_data->have_posts())
} // if ( $item_data->have_posts() )
} // function build_table_cache( $post_id )
这是帖子类型的创建。
public function tb_table_cache_post_type() {
register_post_type(
'tb_table_cache',
array(
'labels' => array(
'name' => __('Table Caches'),
'singular_name' => __('Table Cache'),
'add_new_item' => __('Add New Table Cache'),
'edit_item' => __('Edit Table Cache'),
'view_item' => __('View Table Cache'),
'search_items' => __('Search Table Caches'),
'not_found' => __('No Table Caches found!'),
'not_found_in_trash' => __('No Table Caches found in trash'),
'menu_name' => __('Table Caches'),
'all_items' => __('All Table Caches')
),
'description' => 'I15 Table Caches',
'public' => false,
'show_ui' => true,
'menu_position' => 20,
'hierarchical' => true,
'supports' => array('title', 'editor'),
//'show_in_nav_menus' => false,
'show_in_menu' => 'i15-table-builder',
'can_export' => true,
'has_archive' => false,
'exclude_from_search' => true
));
}
答案 0 :(得分:1)
我想出了这个问题。问题是我们安装了一个名为Post Type Switcher的插件,该插件使用过滤器来更改帖子类型。所以我只是在插入函数之前添加了我自己的过滤器,然后在插入函数之后删除了该过滤器。
对于任何好奇的人。
add_filter( 'wp_insert_post_data', array( $this, 'tb_cache_override_type' ), 99, 2 );
$cache_post_id = wp_insert_post( $cache_args );
remove_filter( 'wp_insert_post_data', array( $this, 'tb_cache_override_type' ), 99, 2 );