Не сохраняются поля метаданных WordPress - PullRequest
0 голосов
/ 08 мая 2018

код: http://wpbin.io/i7zwfo.

function add_column_meta_box() {
    global $post, $column_meta_box_count, $count;
    $column_meta_box_count = get_post_meta($post->ID, "column_counter", true);
    $count = 0;
    $i = 0;
    do {
        add_meta_box(
            "column_meta_box_".$i,
            "Kolumna ".++$i,
            "build_column_meta_box",
            "post",
            "normal",
            "default"
        );
    } while($i < $column_meta_box_count);
    $count = 0;
}
function build_column_meta_box() {
    global $post, $count;
    wp_nonce_field(basename(__FILE__), "column_".$count."_fields");
    ?>
    <h3>Opis Zdjęcia</h3>
    <input type='text' name="column_<?php echo $count ?>_description" value='<?php echo get_post_meta($post->ID, "column_".$count."_description", true); ?>' style='width:100%' />
    <h3>Kolor</h3>
    <input type='text' name="column_<?php echo $count ?>_color" value='<?php echo get_post_meta($post->ID, "column_".$count."_color", true); ?>' style='width:10%' />
    <h3>Zdjęcie</h3>
    <input type='text' name="column_<?php echo $count ?>_image" class="meta-image" value='<?php echo get_post_meta($post->ID, "column_".$count."_image", true); ?>' style='width:100%' />
    <input type="button" class="button image-upload-<?php echo $count ?>" value="Znajdź">
    <div class="image-preview"><img src="<?php echo get_post_meta($post->ID, "column_".$count."_image", true); ?>" style="max-width: 250px;"></div>
    <h3>Tekst</h3>
    <input type='text' name="column_<?php echo $count ?>_text" value='<?php echo get_post_meta($post->ID, "column_".$count."_text", true); ?>' style='width:100%' />
    <script>
    jQuery(document).ready(function ($) {
      var meta_image_frame;
      $('.image-upload-<?php echo $count ?>').click(function (e) {
        var meta_image_preview = $(this).parent().parent().children('.image-preview');
        e.preventDefault();
        var meta_image = $(this).parent().children('.meta-image');
        if (meta_image_frame) {
          meta_image_frame.open();
          return;
        }
        meta_image_frame = wp.media.frames.meta_image_frame = wp.media({
          title: meta_image.title,
          button: {
            text: meta_image.button
          }
        });
        meta_image_frame.on('select', function () {
          var media_attachment = meta_image_frame.state().get('selection').first().toJSON();
          meta_image.val(media_attachment.url);
          meta_image_preview.children('img').attr('src', media_attachment.url);
        });
        meta_image_frame.open();
      });
    });
  </script>
    <?php
    $count++;
}
function save_column_meta() {
    global $post, $count, $column_meta_box_count;
    $column_meta_box_count = get_post_meta($post->ID, "column_counter", true);
    $count = 0;
    do {
        if(!current_user_can("edit_post", $post->ID)) return $post->ID;
        if(!isset($_POST["column_".$count."_description"]) || !isset($_POST["column_".$count."_img"]) || !isset($_POST["column_".$count."_text"]) || !wp_verify_nonce($_POST['column_'.$count.'fields'], basename(__FILE__))) return $post->ID;
        $column_meta["column_".$count."_description"] = $_POST["column_".$count."_description"];
        $column_meta["column_".$count."_img"] = $_POST["column_".$count."_img"];
        $column_meta["column_".$count."_text"] = $_POST["column_".$count."_text"];
        foreach( $column_meta as $key => $value ) {
            if("revision" === $post->post_type) {
                return;
            }
            if(get_post_meta($post->ID, $key, false) ) {
                update_post_meta($post->ID, $key, $value);
            } else {
                add_post_meta($post->ID, $key, $value);
            }
            if(!$value ) {
                delete_post_meta($post->ID, $key);
            }
        }
        $count++;
    } while($count <= $column_meta_box_count);
}

Проблема: ни одна из переменных не сохраняется в базе данных. Когда я создаю переменную, например, имя "column_0_description" показано правильно, поэтому я думаю, что проблема с сохранением. Прежде чем вы спросите, есть ловушка add_action ('save_post'). Во время отладки в Chrome Devtools я вижу, что метод post отправляет измененное значение переменной var. Он просто не сохраняется в базе данных.

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