保存自定义帖子类型不起作用

时间:2012-07-05 作者:H.Rabiee

我遇到了一个奇怪的问题,同一代码在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
        }
    }
}

1 个回复
SO网友:Tyler Carter

使用Wordpress保存元框的问题是,这对调试来说真的很烦人。这是因为Wordpress是如何做到的。

基本上,当您按Publish时,Wordpress会发送一个AJAX请求来保存帖子。这就是所谓的保存处理程序。当这个请求返回时,它有一个Location 其中的标题告诉Wordpress要重定向到哪个页面(通常显示“Post Updated”之类的消息)。

这样做的问题是,它只会忘记任何调试语句。调试元框是非常可怕的,因为在保存例程期间,您从未真正看到输出。

解决这个问题最简单的方法就是exit; 调试消息之后的语句。是的,整个页面将不会运行,但您将能够看到调试输出。

我现在看到你的代码的问题是你从来没有打过电话update_post_metaadd_post_meta. 无需使用其中一个功能来保存数据(然后在稍后自动填写文本框get_post_meta), 您永远不会保存数据。

结束

相关推荐