カスタム投稿タイプを追加しました。私は2つのメタボックスも追加しました。それらはうまく機能するように見えますが、それらの中身は数分後に常に消えます。
誰かがこれを手伝うことができれば私は永遠に感謝するでしょう、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 );
}
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'] );}
}
}
WOWあなたたちみんな速いです:)
あなたがここでやっていることと私が使っている機能との違いは、IDを設定するためにglobal $ postに頼っているということだけです。
変数$ post_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'] );
}
}
また、条件を($ _POST)から(isset($ _ POST))に切り替えました。これは、IFステートメントに対する回答を得るためのより信頼性の高い方法です。これが役立つかどうか私に知らせてください。そうでなければ、もう少し詳しく調べます。