Пользовательские мета-блоки WordPress не сохраняются с несколькими полями на ящик - PullRequest
0 голосов
/ 26 июня 2019

Я создал собственный мета-блок в WordPress, который содержит несколько полей в одном блоке.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я набираю в полях администратора WP, изменения не сохраняются.

Я уже создал функцию сохранения.Сохранение отлично работает с метаблоками, которые содержат только одно поле, но не с несколькими полями.

add_action('save_post', 'save_details');

add_action("admin_init", "admin_init");

function admin_init(){
add_meta_box("report-pdf-meta-01", "Report PDF #1", "report_pdf_01", "report", "normal", "high");
}

function save_details(){
       global $post;

       update_post_meta($post->ID, "report_pdf_01", $_POST["report_pdf_01"]);
       update_post_meta($post->ID, "report_pdf_title_01", $_POST["report_pdf_title_01"]);
}

   function report_pdf_01(){
       global $post;
       $custom = get_post_custom($post->ID);
       $report_pdf_01 = $custom["report_pdf_01"][0];
       $report_pdf_title_01 =  $custom["report_pdf_title_01"][0];
       ?>
<p><label>PDF Field:</label>
<input name="report_pdf_01" value="<?php echo $report_pdf_01; ?>" />
<p><label>Button Title:</label>
<input name="report_pdf_title_01" value="<?php echo $report_pdf_title_01; ?>" /></p>
<?php
   }

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

1 Ответ

0 голосов
/ 27 июня 2019

Ваш код кажется правильным, однако я бы предложил несколько модификаций, которые указаны ниже:

add_action('save_post', 'save_details', 10, 2);
add_action("admin_init", "register_custom_metaboxes"); //renaming the function so as to avoid confusion and conflicts.
function register_custom_metaboxes(){
    add_meta_box("report-pdf-meta-01", "Report PDF #1", "report_pdf_01", "report", "normal", "high");
}
function save_details($id, $post_data){
    //The $post_data object and current post ID are available to us to begin with.
    //Some necessary capabilities check mentioned below.
    if (!current_user_can("edit_post", $id)) {
        return $post_data;
    }
    if (defined("DOING_AUTOSAVE") && DOING_AUTOSAVE) {
        return $post_data;
    }
    //Just making sure that we are getting the correct data and to verify the received field names we log it into the file which will be created at the root directory level.
    error_log('Posted Data : '.print_r($_POST, true).PHP_EOL, 3, $_SERVER['DOCUMENT_ROOT'] . "/post.log");
    //sanitizing the data before saving.
    update_post_meta($id, "report_pdf_01", sanitize_text_field($_POST["report_pdf_01"]));
    update_post_meta($id, "report_pdf_title_01", sanitize_text_field($_POST["report_pdf_title_01"]));
}
function report_pdf_01(){
    global $post;
    //Retrieving post meta data by individual key in singular format and not array.
    $report_pdf_01 = get_post_meta($post->ID, "report_pdf_01", true);
    $report_pdf_title_01 =  get_post_meta($post->ID, "report_pdf_title_01", true);
    ?>
    <p><label>PDF Field:</label>
    <input name="report_pdf_01" value="<?php echo $report_pdf_01; ?>" />
    <p><label>Button Title:</label>
    <input name="report_pdf_title_01" value="<?php echo $report_pdf_title_01; ?>"/></p>
    <?php
}
...