Задать вопрос
@KindOfHeaven

Как настроить получение произвольных полей категории при создании записи?

Здравствуйте!
При создании записи я пытаюсь получить произвольное поле рубрики
Объясню в чем суть: на сайте есть категории товаров, и в каждой категории у товаров свои атрибуты
Так как заранее неизвестны все атрибуты для всех категорий нужно настроить это в админке, то есть чтобы атрибуты категории выводились списком при создании записи для выбора
Пытаюсь получить вручную (идея через ajax при изменении выбранной категории подгружать нужные поля), но у меня не работает ни get_term_metа(), ни get_field()
<?php
add_action('wp_ajax_load_custom_field_data','load_custom_field_data');
add_action('wp_ajax_nopriv_load_custom_field_data','load_custom_field_data');

function load_custom_fields_data(){
	$termid = $_POST['termid'];
	$metas = get_field('attributes',$termid);
	var_dump($metas);
	die();
}
add_action('add_meta_boxes', 'my_extra_fields', 1);

function my_extra_fields() {
	add_meta_box( 'extra_fields', 'Атрибуты товара', 'extra_fields_box_func', 'post', 'normal', 'high'  );
}

function extra_fields_box_func( $post ){
	?>
	<div id="extra_fields">
		<script>
			$('input[name="post_category[]"]').change(function() {
				if ($(this).val() !== 1) {
					data = {
						'action': 'load_custom_field_data',
						'termid': $(this).val()
					}
					$.post(ajaxurl,data,function(response) {
						// Возвращает 0
						console.log(response)
					})
				}
			})
		</script>
		<!-- Пытался получить напрямую - тот же 0 (или array (0)) -->
		<?php var_dump(get_field('image', 47)); ?>
		<input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
	</div>
	<?php
}

add_action('save_post', 'my_extra_fields_update', 0);

function my_extra_fields_update( $post_id ){
	if ( !isset($_POST['extra_fields_nonce']) || !wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false; 
	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false; 
	if ( !current_user_can('edit_post', $post_id) ) return false;
	if ( !isset($_POST['extra']) ) return false; 

	$_POST['extra'] = array_map('trim', $_POST['extra']);
	foreach( $_POST['extra'] as $key=>$value ){
		if( empty($value) ){
			delete_post_meta($post_id, $key); 
			continue;
		}

		update_post_meta($post_id, $key, $value); 
	}
	return $post_id;
}
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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