将POST_PARENT保存为自定义发布类型

时间:2013-05-29 作者:leemon

我正在使用save\\u post操作以自定义post类型保存一些元数据:

function my_save_post($post_id) {
    // is autosave?
    if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
        return $post_id;
    }

    // verify nonce
    if ( !wp_verify_nonce( $_POST[\'metabox_nonce\'], basename(__FILE__) )) {
        return $post_id;
    }

    if (\'book\' == $_POST[\'post_type\']) {
        $post_parent = intval($_POST[\'post_parent\']);
        $author = $_POST[\'author\'];
        $price = intval($_POST[\'price\']);
        update_post_meta($post_id, \'author\', $author);
        update_post_meta($post_id, \'price\', $price);

        //TODO: add function to update the post_parent field
    }
}
我的问题是,如何修改自定义帖子类型的post\\u父字段?据我所知,我不能使用update\\u post\\u meta()函数,因为post\\u父字段不是meta字段。我说得对吗?

任何帮助都将不胜感激

2 个回复
最合适的回答,由SO网友:Milo 整理而成

您可以使用wp_insert_post_data 改为过滤,这样可以直接访问帖子的数据。

function wpa_insert_post( $data , $postarr ){ 
    //do something with $data[\'post_parent\']
    return $data;
}
add_filter( \'wp_insert_post_data\' , \'wpa_insert_post\' , \'99\', 2 );
UPDATE:

我向您的代码中添加了以下内容,它正在运行:

function wpa_insert_post( $data , $postarr ){ 
    //do something with $data[\'post_parent\']
    $data[\'post_parent\'] = intval($postarr[\'post_parent\']);

    //update meta data
    update_post_meta($postarr[\'ID\'], \'author\', $postarr[\'author\']);
    update_post_meta($postarr[\'ID\'], \'price\', $postarr[\'price\']);

    return $data;
}
add_filter( \'wp_insert_post_data\' , \'wpa_insert_post\' , \'99\', 2 );

SO网友:panos

一个非常简单快速的解决方案可能是:

$wpdb->query( \'update \'.$wpdb->prefix.\'posts set post_parent=\'.$post_parent.\' where ID=\'.$post_id );
您可能需要添加global$wpdb;

如果您没有在save\\u post挂钩上使用更新(就像您正在更新自定义post类型的元盒一样),您可以使用:

  $bookUpdate = array();
  $bookUpdate[\'ID\'] = $post_id;
  $bookUpdate[\'post_parent\'] = $post_parent;

  wp_update_post( $bookUpdate );

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在