sta
  • 0
Новичок

Метабокс пользовательского типа записи — не сохраняется

  • 0

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

Если бы кто-нибудь мог помочь в этом, я был бы бесконечно благодарен, С.

//код метабокса//

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 );
}
Share
  1. Вам нужно проверить 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'] );}
    
        }
    }
    

    ВАУ, ребята, вы быстрые 🙂

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

    • 0

Оставить ответ

You must login to add an answer.