Как создать метабоксы WordPress повторителя - PullRequest
0 голосов
/ 26 апреля 2020

Я нашел этот старый вопрос , который даст некоторую основную c информацию о том, как создавать поля reapeater для настраиваемого метабокса в WordPress. Вопрос не совсем ясен в отношении некоторых моментов ...

У меня есть собственный метабокс, в который я интегрировал одно текстовое поле для заголовка, а второе - экземпляр редактора tinymce. Я использую его, чтобы добавить дополнительный контент к своим сообщениям и страницам, отображаемым в виде новых строк в интерфейсе. Сейчас я использую обычный способ регистрации нужных пользовательских метабоксов, но этот способ не самый лучший, потому что, если мне нужно больше метабоксов, мне нужно добавлять код для регистрации нового каждый раз (плохое обслуживание). Эти метабоксы имеют настраиваемое изображение, которое предоставляется плагином с несколькими миниатюрами, но я хочу также сделать этот динамический c вместо того, чтобы каждый раз регистрировать новый эскиз. Также я заметил, что шорткоды, добавленные tintmce внутри метабокса, не обрабатываются, мне нужен способ получить изображения галереи каждого зарегистрированного метабокса. Как мне этого добиться? Это моя база кода на данный момент:

// registering metabox - for now I have two similar metaboxes
  add_meta_box(
      'theme_first_column',
      __('Column 1'),
      array($this, 'theme_first_col_callback' ),
      array('page', 'post'),
      'normal',
      'high'
    );
// display the metabox
 public function theme_first_col_callback( $post )
  {
    wp_nonce_field( basename( __FILE__ ), 'theme_col1_nonce' );
    $col_title_field_value = get_post_meta( $post->ID );
    ?>
      <p>
        <input type="text" class="widefat" name="col1_title" id="meta-text" placeholder="<?php _e('Add Title'); ?>" value="<?php if( isset($col_title_field_value['_col_1_title']) ) echo $col_title_field_value['_col_1_title'][0]; ?>" />
      </p>
    <?php
    $field_value = get_post_meta( $post->ID, '_col_1', false );
    @wp_editor( $field_value[0], '_col_1' );
  }

  public function theme_first_col_save( $post_id ) {
      // Checks save status
      $is_autosave = wp_is_post_autosave( $post_id );
      $is_revision = wp_is_post_revision( $post_id );
      $is_valid_nonce = ( isset( $_POST[ 'theme_col1_nonce' ] ) && wp_verify_nonce( $_POST[ 'theme_col1_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';
      // Exits script depending on save status
      if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
          return;
      }
      // Checks for input and sanitizes/saves if needed
      if( isset( $_POST['_col_1'] ) ) {
          update_post_meta( $post_id, '_col_1', $_POST[ '_col_1' ] );
      }
      if( isset( $_POST['col1_title'] ) ) {
        update_post_meta( $post_id, '_col_1_title', $_POST[ 'col1_title' ] );
      }
  }
// The code for the column thumbnail - one for post and one for pages
      new MultiPostThumbnails(
        array(
            'label' => __( 'Column 1 Featured Image', ''),
            'id' => 'col1-featured-image',
            'post_type' => 'page'
        )
      );
      new MultiPostThumbnails(
        array(
            'label' => __( 'Column 1 Featured Image', ''),
            'id' => 'col1-featured-image',
            'post_type' => 'post'
        )
      );
...