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

Как в wordpress в базе данных (phpMyAdmin) сделать 4000 копий одной страницы?

Есть сайт на Wordpress. Возникла необходимость сделать 2771 копий всего лишь 1 страницы в базе данных phpmyadmin - в разделе wp_posts.

Чтоб каждая копия отличалась в столбцах:
post_contest , post_title, также ссылки на новые скопированные страницы должны "рабочими-не битыми" быть пронумерованы от 1551 до 4322.

в таком виде:
https://site.ru/1551-2
https://site.ru/1552-2
https://site.ru/1553-2
...
https://site.ru/4320-2
https://site.ru/4321-2
https://site.ru/4322-2

Пока что думаю с помощью экспорта\редактированием\импортом, но как отредактировать такую кучу страниц ручками не знаю.

см. скриншот, выделил страницу которую таким образом хочу раскопировать.
5f999955c5fee784961705.jpeg
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
Ivan_Ivanv
@Ivan_Ivanv Автор вопроса
Решил проблему очень легко записав скрипт расширением для хрома UI Vision
Указал в раздел CSV - числа построчно от 1551 до 4322. (см скриншот куда вбивать числа )
5f9ac29606ac2519694519.jpeg

запустил скрипт на выполнение выбрав цикличное исполнение с 1 до 2739 исполнений, так как на 2739 строчку внутреннего csv файла readcsvtestdata.csv как раз приходится число 4322 - см скриншот
5f9ac2a259d73576455956.jpeg

Код скрипта для расширения UI Vision
{
  "Name": "site.ru add page",
  "CreationDate": "2020-10-29",
  "Commands": [
    {
      "Command": "open",
      "Target": "https://site.ru/wp-admin/post-new.php?post_type=page",
      "Value": ""
    },
    {
      "Command": "clickAndWait",
      "Target": "linkText=Добавить новую@POS=2",
      "Value": "!TIMEOUT_WAIT",
      "Targets": [
        "linkText=Добавить новую@POS=2",
        "xpath=//*[@id=\"menu-pages\"]/ul/li[3]/a",
        "xpath=//li[5]/ul/li[3]/a",
        "css=#menu-pages > ul > li.current > a"
      ]
    },
    {
      "Command": "click",
      "Target": "id=content",
      "Value": "!TIMEOUT_WAIT",
      "Targets": [
        "id=content",
        "name=content",
        "xpath=//*[@id=\"content\"]",
        "xpath=//textarea[@id='content']",
        "xpath=//textarea",
        "css=#content"
      ]
    },
    {
      "Command": "type",
      "Target": "id=content",
      "Value": "ТЕКСТ КОТОРЫЙ НУЖНО ВБИТЬ В ТЕЛО ПОСТА\\n",
      "Targets": [
        "id=content",
        "name=content",
        "xpath=//*[@id=\"content\"]",
        "xpath=//textarea[@id='content']",
        "xpath=//textarea",
        "css=#content"
      ]
    },
    {
      "Command": "click",
      "Target": "id=title",
      "Value": "!TIMEOUT_WAIT",
      "Targets": [
        "id=title",
        "name=post_title",
        "xpath=//*[@id=\"title\"]",
        "xpath=//input[@id='title']",
        "xpath=//div/input",
        "css=#title"
      ]
    },
    {
      "Command": "csvRead",
      "Target": "readcsvtestdata.csv",
      "Value": ""
    },
    {
      "Command": "type",
      "Target": "id=title",
      "Value": "${!COL1}",
      "Targets": [
        "id=title",
        "name=post_title",
        "xpath=//*[@id=\"title\"]",
        "xpath=//input[@id='title']",
        "xpath=//div/input",
        "css=#title"
      ]
    },
    {
      "Command": "click",
      "Target": "id=content",
      "Value": "!TIMEOUT_WAIT",
      "Targets": [
        "id=content",
        "name=content",
        "xpath=//*[@id=\"content\"]",
        "xpath=//textarea[@id='content']",
        "xpath=//textarea",
        "css=#content"
      ]
    },
    {
      "Command": "click",
      "Target": "id=publish",
      "Value": "!TIMEOUT_WAIT",
      "Targets": [
        "id=publish",
        "name=publish",
        "xpath=//*[@id=\"publish\"]",
        "xpath=//input[@id='publish']",
        "xpath=//div[2]/input[2]",
        "css=#publish"
      ]
    }
  ]
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
На счет базы не подскажу, но вы можете воспользоваться нативными функциями get_posts() и wp_insert_post()

// получаем данные исходного поста по слагу
$post_slug = '1543';
$args = array( 'name' => $post_slug, 'post_type' => 'post', 'post_status' => 'publish, draft, future', 'numberposts' => 1 );
$post = get_posts($args)[0];

for ( $i = 1; $i < 2771; $i++ ) {
	// Создаем массив данных новой записи
	$post_data = array(
		'ID'		=> $post->ID++,        
		'post_title'	=> $post->post_title,
		'post_name'		=> $post_slug . '-' . $i,  
		'post_date'		=> $post->post_date,
		'post_date_gmt'	=> $post->post_date_gmt,    
		'post_content'	=> $post->post_content,
		'post_status'	=> 'publish',
		'post_type'		=> 'post',
		'post_author'	=> 1,
	);

	// Вставляем запись в базу
	$post_id = wp_insert_post( wp_slash( $post_data ) );

	// пишем ошибку/успех
	if( is_wp_error( $post_id ) ) {
		var_dump( 'Ошибка инсерта поста ' . $post->post_title . ' таксономии category: ' . $post_id->get_error_message() );
	} else {
		var_dump( 'Пост ' . $post->post_title . ' таксономии category опубликован удачно!' );
		//wp_set_object_terms( $post_id, 'cat_id', 'category' ); // если нужно назначить категорию, заменить cat_id
	}
}


Поменяйте слаги на нужные, я так и на понял какие вам нужны
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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