我添加了一个自定义的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 );
}
最合适的回答,由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语句答案的更可靠的方法。如果有帮助,请告诉我。如果没有,我会进一步深入研究。