Повторяющиеся поля Wordpress, не работает код?

Всем привет, на основе кода из сети дописал свой, который дает возможность сделать повторяющиеся поля. Создание новых и удаление работаю, но вот значения не сохраняет, что не так делаю?
<?php
new My_Metaboxes;
class My_Metaboxes {
	public $post_type = 'map';
	static $meta_key1 = 'company_address1';
	static $meta_key2 = 'company_address2';
	static $meta_key3 = 'company_address3';
	public function __construct() {
		add_action( 'add_meta_boxes', array( $this, 'add_metabox' ) );
		add_action( 'save_post_' . $this->post_type, array( $this, 'save_metabox' ) );
		add_action( 'admin_print_footer_scripts', array( $this, 'show_assets' ), 10, 999 );
	}
	## Добавляет матабоксы
	public function add_metabox() {
		add_meta_box( 'box_info_company', 'Информация о компании', array( $this, 'render_metabox' ), $this->post_type, 'advanced', 'high' );
	}
	## Отображает метабокс на странице редактирования поста
	public function render_metabox( $post ) {
		?>
		<table class="form-table company-info">

			<tr>
				<th>
					Адреса компании <span class="dashicons dashicons-plus-alt add-company-address"></span>
				</th>
				<td class="company-address-list">
					<span class="item-address1">
					<?php
					$input1 = '
					<span class="item-address">
						<input class="inputclass" type="text" name="'. self::$meta_key1 .'[]" value="%s">
					</span>
					';
					$input2 = '
					<span class="item-address">
						<input class="inputclass" type="text" name="'. self::$meta_key2 .'[]" value="%s">
					</span>
					';
					$input3 = '
					<span class="item-address">
						<input class="inputclass" type="text" name="'. self::$meta_key3 .'[]" value="%s">
						<span class="dashicons dashicons-trash remove-company-address"></span>
					</span>
					';
					$addresses1 = get_post_meta( $post->ID, self::$meta_key1, true );

					if ( is_array( $addresses1 ) ) {
						foreach ( $addresses1 as $addr1 ) {
							printf( $input1, esc_attr( $addr1 ) );
						}
					} else {
						printf( $input1, '' );
					}
					$addresses2 = get_post_meta( $post->ID, self::$meta_key2, true );

					if ( is_array( $addresses2 ) ) {
						foreach ( $addresses2 as $addr2 ) {
							printf( $input2, esc_attr( $addr2 ) );
						}
					} else {
						printf( $input2, '' );
					}
					$addresses3 = get_post_meta( $post->ID, self::$meta_key3, true );

					if ( is_array( $addresses3 ) ) {
						foreach ( $addresses3 as $addr3 ) {
							printf( $input3, esc_attr( $addr3 ) );
						}
					} else {
						printf( $input3, '' );
					}

					?>
					</span>
				</td>
			</tr>

						

		</table>

		<?php
	}

	## Очищает и сохраняет значения полей
	public function save_metabox1( $post_id ) {

		// Check if it's not an autosave.
		if ( wp_is_post_autosave( $post_id ) )
			return;

		if ( isset( $_POST[self::$meta_key1] ) && is_array( $_POST[self::$meta_key1] ) ) {
			$addresses1 = $_POST[self::$meta_key1];

			$addresses1 = array_map( 'sanitize_text_field', $addresses1 ); // очистка

			$addresses1 = array_filter( $addresses1 ); // уберем пустые адреса

			if ( $addresses1 ) 
				update_post_meta( $post_id, self::$meta_key1, $addresses1 );
			else 
				delete_post_meta( $post_id, self::$meta_key1 );

		}
	}
	## Очищает и сохраняет значения полей
	public function save_metabox2( $post_id ) {

		// Check if it's not an autosave.
		if ( wp_is_post_autosave( $post_id ) )
			return;

		if ( isset( $_POST[self::$meta_key2] ) && is_array( $_POST[self::$meta_key2] ) ) {
			$addresses2 = $_POST[self::$meta_key2];

			$addresses2 = array_map( 'sanitize_text_field', $addresses2 ); // очистка

			$addresses2 = array_filter( $addresses2 ); // уберем пустые адреса

			if ( $addresses2 ) 
				update_post_meta( $post_id, self::$meta_key2, $addresses2 );
			else 
				delete_post_meta( $post_id, self::$meta_key2 );

		}
	}
	## Очищает и сохраняет значения полей
	public function save_metabox3( $post_id ) {

		// Check if it's not an autosave.
		if ( wp_is_post_autosave( $post_id ) )
			return;

		if ( isset( $_POST[self::$meta_key3] ) && is_array( $_POST[self::$meta_key3] ) ) {
			$addresses3 = $_POST[self::$meta_key3];

			$addresses3 = array_map( 'sanitize_text_field', $addresses3 ); // очистка

			$addresses3 = array_filter( $addresses3 ); // уберем пустые адреса

			if ( $addresses3 ) 
				update_post_meta( $post_id, self::$meta_key3, $addresses3 );
			else 
				delete_post_meta( $post_id, self::$meta_key3 );

		}
	}

	## Подключает скрипты и стили
	public function show_assets() {
		if ( is_admin() && get_current_screen()->id == $this->post_type ) {
			$this->show_styles();
			$this->show_scripts();
		}
	}

	## Выводит на экран стили
	public function show_styles() {
		?>
		<style>
			.add-company-address {
				color: #00a0d2;
				cursor: pointer;
			}
			.company-address-list .item-address {
				align-items: center;

			}
			.company-address-list .item-address input {
            width: 30%;
            max-width: 800px;
            font-size: 13px;
padding: 6px 8px; 
box-shadow: 0 0 0 transparent; 
transition: box-shadow .1s linear; 
border-radius: 4px; 
border: 1px solid #8d96a0;
			}
			.remove-company-address {
				color: brown;
				cursor: pointer;
			}


		</style>
		<?php
	}

	## Выводит на экран JS
	public function show_scripts() {
		?>
		<script>
			jQuery(document).ready(function ($) {

				var $companyInfo = $('.company-info');

				// Добавляет бокс с вводом адреса фирмы
				$('.add-company-address', $companyInfo).click(function () {
					var $list = $('.company-address-list');
						$item = $list.find('.item-address1').first().clone();

					$item.find('input').val(''); // чистим знанчение

					$list.append( $item );
				});

				// Удаляет бокс с вводом адреса фирмы
				$companyInfo.on('click', '.remove-company-address', function () {
					if ($('.item-address1').length > 1) {
						$(this).closest('.item-address1').remove();
					}
					else {
						$(this).closest('.item-address1').find('input').val('');
					}
				});

			});
		</script>
		<?php
	}

}
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
cesnokov
@cesnokov
<head>&nbsp;</head>
При сохранении вы вызываете несуществующий метод, не хватает вот этого:
public function save_metabox($post_id) {
    $this->save_metabox1( $post_id );
    $this->save_metabox2( $post_id );
    $this->save_metabox3( $post_id );
}

А всё остальное хорошо и должно работать без ошибок. И включите вывод предупреждений и ошибок в Вордпрессе, добавив в wp-config.php строку define('WP_DEBUG', true);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы