WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

Заполнить дынные произвольных полей АВТОМАТИЧЕСКИ

Есть главный сайт, есть частичные дубликаты - постоянно приходится делать импорт экспорт статей и галерей.

Речь будет о главном

Есть произвольное поле с slug "have_files" - это количество файлов галереи, подсчет файлов идет через

        global $post;
		$attachments = get_children( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) );
		echo $count = count( $attachments );    

и через этот код выводится цифры к описанию статей, но для экспорта нужно записать данные либо в произвольное поле(Custom Fields) либо в таксономию(не подходит).

Поделитесь пожалуйста кодом который будет считать количество файлов и записывать их в Custom Fields после добавления галереи, а так же будит "гибким" т.е. после изменения количества файлов в галереи и обновления поста значения в Custom Fields так же будут меняться.


уже видел статьи про произвольные поля, но мои знания PHP и HTML ничтожны.

kolshix 10 месяцев назад

СЕЙЧАС ПОЛЬЗУЮСЬ ВАШИМИ НАРАБОТКАМИ с САЙТА

// код блока
function extra_fields_box_func( $post ){

	$post = get_post();
	$attachments = array_values( get_children( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) ) );
	$count = count( $attachments );

	?>
	<p><label><input type="text" name="extra[have_files]" value="<?php echo $count; ?>" style="width:50%" /> ? заголовок страницы (title )</label></p>

	<input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
	<?php
}

// включаем обновление полей при сохранении
add_action('save_post', 'my_extra_fields_update', 0);

/* Сохраняем данные, при сохранении поста */
function my_extra_fields_update( $post_id ){
	if ( !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); // add_post_meta() работает автоматически
	}
	return $post_id;
}
/* END ==произвольные поля=*/

Код как бы выполняет свое назначение, но чувствую что что-то не так

0
kolshix104 10 месяцев назад
  • 1
    stepan1187 cайт: www.weblancer.net/users/stepanko/?affili...

    Код Вам врядли кто-то напишет, если только Kama захочет потратить свое время smile
    Я же дам направление, куда нужно двигаться, логику работы опишу:

    и обновления поста значения в Custom Fields

    Это ключевые слова.
    Используйте хук save_post и во время срабатывания этого хука выполняйте обновление поля have_files

    function my_save_postdata($post_id, $post) {
    
    	... // делаем нужные проверки. Смотрите описание хука
    	... // получаем количество фото, например:
    	$count_files = 1; 
    	update_post_meta( $post->ID, 'have_files', $count_files );
    }
    add_action('save_post', 'my_save_postdata', 15, 2); 
    campusboy 10 месяцев назад

    Поддерживаю ответ!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.