Пользовательский тип сообщения Meta Box не сохраняется - PullRequest
0 голосов
/ 07 ноября 2018

Я создал CPT под названием «энциклопедия» в WordPress. Затем я создаю пару мета-полей внутри них, просто несколько текстовых полей, но в данный момент они не сохраняются, и я не могу понять, почему. Может кто-нибудь помочь?

/*
=========================================================================
Custom Meta Fields - English version
=========================================================================
*/

function custom_meta_box_markup()
{
    wp_nonce_field(basename(__FILE__), "meta-box-nonce");

    ?>
        <div>
            <label for="english_version">Description</label>
            <input name="english_version" type="text" value="<?php echo get_post_meta($object->ID, "english_version", true); ?>">
        </div>


<?php }

function add_custom_meta_box()
{
    add_meta_box("english_version", "English Version", "custom_meta_box_markup", "encyclopedia", "advanced", "high", null);
    //add_meta_box("german-version", "German Version", "custom_meta_box_markup", "encyclopedia", "advanced", "high", null);
}

add_action("add_meta_boxes", "add_custom_meta_box");

function save_custom_meta_box($post_id, $post, $update)
{
    if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__))){
        return $post_id;
    }

    if(!current_user_can("edit_post", $post_id)){
        return $post_id;
    }

    if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE){
        return $post_id;
    }

    $slug = "post";
    if($slug != $post->post_type){
        return $post_id;
    }

    $meta_box_text_value = "";

    if(isset($_POST["english_version"]))
    {
        $meta_box_text_value = $_POST["english_version"];
    }   
    update_post_meta($post_id, "english_version", $meta_box_text_value);

}

add_action("save_post_encyclopedia", "save_custom_meta_box", 10, 3);

Соответствующий код приведен выше, и в настоящее время он хранится в файле functions.php моей дочерней темы.

Спасибо

1 Ответ

0 голосов
/ 07 ноября 2018

Согласно моему комментарию на ваш вопрос, после исправления слага поста у вас все еще есть что-то не так в коде.

В функции вывода мета-окна custom_meta_box_markup вы используете get_post_meta($object->ID, "english_version", true) без определения $object.

Я проверил ваш код, и ваши данные сохраняются в БД. Но так как $object->ID ничего не возвращает, он ничего не показывает во входном текстовом поле. custom_meta_box_markup получает $post объект, который вы пропустили. Обновите свой код так:

function custom_meta_box_markup($post) {
    wp_nonce_field(basename(__FILE__), "meta-box-nonce");

    ?>
    <div>
        <label for="english_version">Description</label>
        <input name="english_version" type="text" value="<?php echo get_post_meta($post->ID, "english_version", true); ?>">
    </div>


<?php }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...