Пользовательский тип сообщения Metabox – не сохраняет

Я добавил пользовательский тип сообщения, который отлично работает; Я также добавил два метаболизма, которые, похоже, работают хорошо, но содержание в них всегда исчезает через несколько минут.

Если бы кто-нибудь мог помочь в этом, я был бы всегда благодарен, 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 &amp; 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 вы, ребята, быстрые 🙂

Единственное отличие, которое я вижу от того, что вы здесь делаете, и функции, которую я использую, это то, что вы полагаетесь на глобальную $ 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. Позвольте мне знать, если это помогает. Если нет, я углубится в это немного дальше.