我遇到了一个奇怪的问题,同一代码在localhost和生产服务器上都不起作用。
代码很简单,我正在尝试保存一个自定义的帖子类型,但我的元数据库中没有任何数据被保存。我有一些echo
我的save_custom_type
用于调试以查看数据的外观。当我在生产环境中按“Publish”时,甚至这些打印语句也不会得到响应。
自定义帖子类型是在我的主题中创建的,我将其挂接到动作“init”中。
用于创建的代码和save方法中第一条echo语句的第一行。
function create_omgang_post_type() {
$labels = array(
\'name\' => \'Omgång\',
\'add_new\' => \'Lägg till ny omgång\',
\'add_new_item\' => \'Lägg till ny omgång\',
\'not_found\' => \'Inga omgångar inlagda\'
);
$args = array(
\'description\' => \'En omgång för denna säsong\',
\'public\' => true,
\'hierarchical\' => true,
\'show_in_menu\' => false,
\'show_in_admin_bar\' => true,
\'label\'=>\'Omgångar\',
\'labels\' => $labels,
\'supports\' => array(
\'title\', \'page-attributes\')
);
register_post_type(\'omgang\', $args);
}
add_action(\'init\', \'create_omgang_post_type\');
/*-------------------------------------*/
function save_custom_post_omgang($post_id) {
$slug = \'omgang\';
$post = get_post($post_id);
if($post->post_type == "omgang" ) {
if(! $_POST)
return;
if(!wp_post_revision_title($post_id)) {
$lag = get_all_lag();
$data = array();
foreach($_POST as $key => $value) {
//key#type
$explodedID = explode(\'#\', $key);
if($explodedID[0] != $key) {
$key = $explodedID[0];
$type = $explodedID[1];
$data[$key][$type] = $value;
}
}
print_r($data); //this line is not even printed in PRD
}
}
}
SO网友:Tyler Carter
使用Wordpress保存元框的问题是,这对调试来说真的很烦人。这是因为Wordpress是如何做到的。
基本上,当您按Publish时,Wordpress会发送一个AJAX请求来保存帖子。这就是所谓的保存处理程序。当这个请求返回时,它有一个Location
其中的标题告诉Wordpress要重定向到哪个页面(通常显示“Post Updated”之类的消息)。
这样做的问题是,它只会忘记任何调试语句。调试元框是非常可怕的,因为在保存例程期间,您从未真正看到输出。
解决这个问题最简单的方法就是exit;
调试消息之后的语句。是的,整个页面将不会运行,但您将能够看到调试输出。
我现在看到你的代码的问题是你从来没有打过电话update_post_meta
或add_post_meta
. 无需使用其中一个功能来保存数据(然后在稍后自动填写文本框get_post_meta
), 您永远不会保存数据。