自定义发布类型Metabox-不保存

时间:2011-04-08 作者:sta777

我添加了一个自定义的post类型,效果很好;我还添加了两个元数据库,它们似乎工作得很好,但它们中的内容总是在几分钟后消失。

如果有人能在这方面提供帮助,我将万分感激,S。

//元框代码//

add_action( \'admin_init\', \'add_custom_metabox\' );
add_action( \'save_post\', \'save_custom_details\' );

function add_custom_metabox() {
    add_meta_box( \'custom-metabox\', __( \'Product Description & Ingredients\' ), \'descr_custom_metabox\', \'sorbets\', \'normal\', \'low\' );
}

function descr_custom_metabox() {
    global $post;
    $proddescr = get_post_meta( $post->ID, \'proddescr\', true );
    $ingredients = get_post_meta( $post->ID, \'ingredients\', true );
    ?>
    <p><label for="proddescr">Product Description:<br />
        <textarea id="proddescr" name="proddescr" style="margin:0;height:7em;width:98%;" cols="45" rows="4"><?php if( $proddescr ) { echo $proddescr; } ?></textarea></label></p>
    <p><label for="ingredients">Ingredients:<br />
        <textarea id="ingredients" name="ingredients" style="margin:0;height:7em;width:98%;" cols="45" rows="4"><?php if( $ingredients ) { echo $ingredients; } ?></textarea></label></p>
<?php
}

function save_custom_details( $post_ID ) {
    global $post;   
    if( $_POST ) {
        update_post_meta( $post->ID, \'proddescr\', $_POST[\'proddescr\'] );
        update_post_meta( $post->ID, \'ingredients\', $_POST[\'ingredients\'] );
    }
}

function get_descr_ingred_box() {
    global $post;

    $proddescr = get_post_meta( $post->ID, \'proddescr\', true );
    $ingredients = get_post_meta( $post->ID, \'ingredients\', true );

    return array( $proddescr, $ingredients );
}

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

您需要检查autosave 要避免这种情况,还要检查您的帖子类型是否正确save_post 所有岗位上的工作:

function save_custom_details( $post_id ) {
    global $post;   
    //skip auto save
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }
    //check for you post type only
    if( $post->post_type == "sorbets" ) {
        if( isset($_POST[\'proddescr\']) ) { update_post_meta( $post->ID, \'proddescr\', $_POST[\'proddescr\'] );}
        if( isset($_POST[\'ingredients\']) ) { update_post_meta( $post->ID, \'ingredients\', $_POST[\'ingredients\'] );}

    }
}
哇,你们真快:)

SO网友:Drew Gourley

我从您在这里所做的工作和我使用的功能中看到的唯一区别是,您依赖于global$post来设置ID,这可能就是打破这一点的原因。

您会注意到变量$post\\u ID已经被传递到此函数中:

function save_custom_details( $post_ID ) {
    global $post;   
    if( $_POST ) {
        update_post_meta( $post->ID, \'proddescr\', $_POST[\'proddescr\'] );
        update_post_meta( $post->ID, \'ingredients\', $_POST[\'ingredients\'] );
    }
}
我建议将其改为:

function save_custom_details( $post_ID ) {
    if( isset($_POST) ) {
        update_post_meta( $post_ID, \'proddescr\', $_POST[\'proddescr\'] );
        update_post_meta( $post_ID, \'ingredients\', $_POST[\'ingredients\'] );
    }
}
我还将您的条件从($\\u POST)切换到(isset($\\u POST)),这是获得IF语句答案的更可靠的方法。如果有帮助,请告诉我。如果没有,我会进一步深入研究。

结束

相关推荐

具有自定义帖子类型值的Metabox

我需要重新编写一个当前的WP网站,我认为需要自定义帖子类型,并结合元框。基本布局为作者(自定义)书籍(自定义)照片(自定义)所有3个自定义帖子都是独立的,但也以某种方式“链接”。作为一名作家,他将写2本书,拍10张照片在浏览书籍时也是如此,我需要链接作者,然后是作者的照片。如何在每个自定义帖子中重新创建元数据库,以允许对其他帖子进行多选。为了澄清这一点,在添加作者时,我需要能够将书籍和照片链接到它(使用它们自己的类型)。我希望它“有点”清晰。非常感谢您的帮助。。。谢谢