WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Публикация напрямую через БД

Хочу автоматизировать публикацию постов через Zennoposter напрямую в Базу данных без использования браузера.

Но возникла сложность с картинками, а именно с созданием значения meta_key - _wp_attachment_metadata, значение там задается приблизительно в таком формате a:5:{s5:"width";i...} - я понимаю, что это что-то вроде массива со всеми размерами загруженной картинки, но не пойму логику индексов: i, s5, s4 и т.д В поиске не смог найти ничего путного по логике формирования значения. Вообщем прошу Вашего наставления smile

И еще одно, пока искал ответ на свой вопрос, натолкнулся на эту статью wp_generate_attachment_metadata(), скажите, я правильно понял если создать php файл, поместить туда упомянутый в этой статье код

// файл должен находиться в директории загрузок WP.
$filename = '/path/to/uploads/2013/03/filname.jpg';

// ID поста, к которому прикрепим вложение.
$parent_post_id = 37;

// Проверим тип поста, который мы будем использовать в поле 'post_mime_type'.
$filetype = wp_check_filetype( basename( $filename ), null );

// Получим путь до директории загрузок.
$wp_upload_dir = wp_upload_dir();

// Подготовим массив с необходимыми данными для вложения.
$attachment = array(
	'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
	'post_mime_type' => $filetype['type'],
	'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
	'post_content'   => '',
	'post_status'    => 'inherit'
);

// Вставляем запись в базу данных.
$attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );

// Подключим нужный файл, если он еще не подключен
// wp_generate_attachment_metadata() зависит от этого файла.
require_once( ABSPATH . 'wp-admin/includes/image.php' );

// Создадим метаданные для вложения и обновим запись в базе данных.
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

то мои поля в БД будут генерироваться автоматически? Или я ошибаюсь?! Спасибо

P.S уже после создания вопроса, на первый пункт сам нашел ответ - сериализованный массив! Извиняюсь, только-только начал изучать php smile Но второй вопрос остается открытым, как мне правильнее адаптировать вышеприведенный код под мои нужды?

0
2 месяца назад
  • 0

    Читай про https://wp-kama.ru/function/add_post_meta

    add_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
    update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );

    Так же что бы картинка стала featured можно использовать set_post_thumbnail
    https://wp-kama.ru/function/set_post_thumbnail

    Пример кода в контексте

    global $user_ID;
    $new_post = array(
    	'post_title' => 'My New Post',
    	'post_content' => 'Lorem ipsum dolor sit amet...',
    	'post_status' => 'publish',
    	'post_date' => date('Y-m-d H:i:s'),
    	'post_author' => $user_ID,
    	'post_type' => 'post',    
    );
    
    $post_id = wp_insert_post($new_post);
    
    if( ! is_wp_error( $post_id ) )
    	   add_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );

    Альтернативный вариант сделать атачмет дочерним от поста:

    $attachment = array(
    				'ID' => $attach_id,
    				'post_parent' => $custom_post_id,
    			);
    
    			$res = wp_update_post($attachment);

    Эксперементируй, и используй то что работает

    Вот рабочий пример похожий на твой:

    $post_id = 1234;
    $images = array('filename1.png', 'filename2.png', ... 'filename10.png');
    
    // Get the path to the upload directory.
    $wp_upload_dir = wp_upload_dir();
    
    foreach($images as $name) {
    	$attachment = array(
    		'guid'=> $wp_upload_dir['url'] . '/' . basename( $name ), //<-- ЭТО ВАЖНО
    		'post_mime_type' => 'image/png',
    		'post_title' => 'my description',
    		'post_content' => 'my description',
    		'post_status' => 'inherit'
    		 );
    
    	$image_id = wp_insert_attachment($attachment, $name, $post_id);
    
    	// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
    	require_once( ABSPATH . 'wp-admin/includes/image.php' );
    
    	// Generate the metadata for the attachment, and update the database record.
    	$attach_data = wp_generate_attachment_metadata( $image_id, $name );
    
    	wp_update_attachment_metadata( $image_id, $attach_data );
    
    }
    Padawan 2 мес назад

    Благодарю за помощь, вечером буду все пробовать! smile

    Padawan 2 мес назад

    А какая функция создает для каждого зарегистрированного в wordpress размера, отдельную картинку (файл) от уже загруженной картинки?

    Padawan 2 мес назад

    Всё во всем разобрался!!!! Спасибо за помощь! smile Вопрос закрыт

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