Перенос записей из WordPress в 1С-Битрикс

30.10.2020  08:19

Возникла задача перенести все записи из блога на WordPress на сайт 1С-Битрикс. Скрипт такой:

$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
// echo $DOCUMENT_ROOT;
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require($DOCUMENT_ROOT."/bitrix/modules/main/include/prolog_before.php");
$arErrors = array();
set_time_limit(0);
ini_set('max_execution_time', '36000');
// ini_set('memory_limit', '512M');
$IBLOCK_ID = 36;
$update = true;
CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");
$obE = new CIBlockElement();
//первым делом подключаемся к базе сайта на ВордПрессе
$link = mysqli_connect("localhost", "login", "password", "dbname");
$subSql = " AND `ID`='3128'";//для проверки на одной записи, если всё нормально закомментировать эту строчку
$sql = "SELECT * FROM wp_posts WHERE `post_type`='post' AND `post_content`!=''{$subSql}";
$result = mysqli_query($link, $sql);
while ($row = mysqli_fetch_array($result)) {
	$name = $row["post_title"];//заголовок записи
	$text = $row["post_content"];///текст
//картинки:
	$sqlImg = "SELECT * FROM wp_posts WHERE `post_parent`='{$row["ID"]}' AND `post_type`='attachment' AND `post_title`!='' LIMIT 1";
	$resultImg = mysqli_query($link, $sqlImg);
	while ($rowImg = mysqli_fetch_array($resultImg)) {
		list($date,$hours) = explode(" ",$rowImg['post_date']);
		list($y,$m,$d) = explode("-",$date);
		$rowImg["post_title"] = trim($rowImg["post_title"]);
		$cfile = '/wp-content/uploads/'.$y.'/'.$m.'/'.$rowImg["post_title"].'.jpg';
		if(file_exists($cfile)){
			echo 'found: '.$rowImg["post_title"];
		}
		else {
			echo 'not found '.$cfile2;
		}
	}//картинки END
			$arSelect = array(
				"ID",
				"NAME",
				"IBLOCK_ID",
			);
			$arFilter = array(
				"IBLOCK_ID" => $IBLOCK_ID,
				"IBLOCK_ACTIVE" => "Y",
				"NAME" => $name,
				//"ACTIVE_DATE" => "Y",
				//"ACTIVE" => "Y",
			);
			$r = CIBlockElement::GetList(
				array(), 
				$arFilter, 
				false, 
				false, 
				$arSelect
			);
			if ( $arCurrentItem = $r->GetNext() ) {//update
			}
			else{//add
			$arParams = array("replace_space"=>"-","replace_other"=>"-");
			$code = Cutil::translit($name,"ru",$arParams);
			$date = $row['post_date'];//дату я не проверил, возможно придётся её развернуть
			$arFields = Array(
				"ACTIVE" => "Y",
				"IBLOCK_ID" => $IBLOCK_ID,
				"NAME" => $name,
				"CODE" => $code,
				"DETAIL_TEXT" => $text,
				"DETAIL_TEXT_TYPE" => 'html',
				// "TAGS" => $tags_txt,
				"DATE_CREATE" => $date,
				/*"IPROPERTY_TEMPLATES"=>Array(
					"ELEMENT_META_TITLE" => $title,
					"ELEMENT_META_DESCRIPTION" => $description,
					"ELEMENT_META_KEYWORDS" => $keywords,
				)*/
			);
				$arFields_insert = $arFields;
				$arFields_insert["SECTION_ID"] = 591;//id раздела куда все записи сохранять
				if ( $ID = $obE->Add($arFields_insert) ) {
					//CIBlockElement::SetPropertyValuesEx($ID, $IBLOCK_ID, $arProps_add);
					echo ''.$name.' add
'; $count++;exit; } else { //echo "Error: ".$obE->LAST_ERROR;exit; //$this->out["error"][] = 'Ошибка добавления товара "' . $name . ' ' . $size . '"'; echo $name.' ошибка добавления
'; $count_err++; } } } echo 'fin ';


В скрипте не хватает переноса картинок ну и по-мелочи — например можно переносить ещё и теги.
Андрей Панёвин
Здравствуйте! Я — Андрей Панёвин и занимаюсь профессиональной разработкой сайтов на платформе 1С-Битрикс (исключительно программирование). Есть вопросы по статье? Могу подсказать и помочь по скайпу (andrey.panevin.ru), WhatsApp (+7-911-091-0670) или перепиской в ВК.
1000 р./час. Часовой пояс — московский.






Помогла статья? На поездку на море (Охотское):


перейти в Блог

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 65  PHP 78  web-программирование 103  Wordpress 3  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю-:
Имя


email (не публикуется)