Программка на PHP которая добавляет данные в БД CMS wordpress

Рубрика: wordpress, Дата: 6 December, 2014, Автор:

wordpress db

Здорова ребятки!

Сегодня мы рассмотрим небольшую программку которая добавляет данные в ЦМС wordpress, она просто считывает файлы определенного вида и в ВП появляется статьи в БД. Я ее недавно сделал, Там в принципе самое главное это функция добавления статьи к определенной рубрике, эта функция самая главная в этой программке, она независима, ее можно использовать и в других программах.

В общем начнем с рассмотрения БД вордпресс.

Бд wordpress

В базе вордпресс нас интересуют 3 таблицы

  • wp_posts-таблица содержит посты
  • wp_term_taxonomy-содержит id-рубрики и id-таксономии привязанной к этой рубрике
  • wp_term_relationships-содержит id-таксономии которая напротив которого находится id-поста к которому он привязан

И так ребятки, в функцию которая добавляет данные в ВП мы передаем id рубрики, сами id рубрики называются id_terns и находятся они в таблице wp_terms

php termp_id

wp_terms

Как видно из таблицы здесь перечислены не только рубрики, здесь также есть и теги, и вся другая нечисть вордпресс добавляется в эту таблицу, но мы знаем что у нас допустим под id_terms 6 находится рубрика, мы передаем 6 в нашу функцию которая будет добавлять посты к определенной рубрике в данном случае это рубрика с tern_id=6.

И так у нас есть tern_id, нам нужно найти таксономию для нашего id из таблицы wp_term_taxonomy

wordpress term_taxonomy_id

wp_term_taxonomy

нам нужно извлечь из этой таблицы для данного нами id_term значение term_taxonomy_id это значение нам нужно для следующей таблицы wp_term_reletionships, чтобы привязать к ней в этой таблице статью, ведь term_id и term_taxonomy_id они могут быть разные и нам обязательно зная term_id нужно делать запрос в таблицу таксономий для извлечения term_taxonomy_id. В общем мы извлекаем терм taxonomy_id и идем в таблицу wp_term_reletionships

wordpress wp_term_reletionships

wp_term_reletionships

как вы видите в этой таблице есть поле object_id это айди записи поста из таблицы wp_posts это то айди которое будет создано после добавления в таблицу поста, мы это ID сохраняем и добавляем в таблицу wp_term_reletionships и связываем с таксономией рубрики по полю term_taxonomy_id. Просто добавляем в эту таблицу запись с ID нового поста вставленного в таблицу wp_posts и term_taxonomy_id связанного с рубрикой к которой мы хотим привязать новый пост. На этом все с БД все ясно wp_posts я не привожу, там все придельно ясно!

Короткое описание структуры программы

И так ребятки немножко рассмотрим саму программу! У нас данные постов хранятся в папке в файлах от с названием 0.html, 1.html, 2.html …. n.html в папке с названием new_data_str , вот в браузере я открыл файл 0.html

data

0.html »

<h1>Система добровольной сертификации в области энергосбережения и энергоэффективности</h1>
<h2>sistema-dobrovolnoj-sertifikatsii-v-oblasti-energosberezheniya-i-energoeffektivnosti</h2>
<style type="text/css">
#subtable {
border:1px solid #000000;
}
#subtable .GostWpsLotusDataValue {
padding:3px;
}
#subtable .GostWpsLotusDataName {
padding:3px;
text-align:center;
}
</style>

<a href="http://webportalsrv.gost.ru/portal/system-voluntary.nsf/ad9847824280efa7c32576660041d562/9bfd473f8ab11a3cc32578ed006f3b38?OpenDocument">refferer</a>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="38%" bgcolor="#E8EBEF">Рег. номер</td><td width="62%" bgcolor="#E8EBEF">РОСС RU.З828.04ШТ01</td></tr>

<tr valign="top"><td width="38%" bgcolor="#F2F4F6">Дата регистрации</td><td width="62%" bgcolor="#F2F4F6">08/12/2011</td></tr>

<tr valign="top"><td width="38%" bgcolor="#E8EBEF">Наименование системы сертификации</td><td width="62%" bgcolor="#E8EBEF">Система добровольной сертификации в области энергосбережения и энергоэффективности</td></tr>

<tr valign="top"><td width="100%" bgcolor="#F2F4F6" colspan="2">
<table id="subtable" width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="34%">Организация, представившая систему на регистрацию</td><td width="66%">Адрес, телефон, e-mail</td></tr>

<tr valign="top"><td width="34%">ОАО "Фирма ОРГРЭС" (ОГРН 5107746015405)</td><td width="66%">107023 Москва, Семеновский пер., 15, (495) 223-4114/(495) 926-3043, orgres@orgres-f.ru</td></tr>
</table>
</td></tr>

<tr valign="top"><td width="38%" bgcolor="#E8EBEF">Область распространения системы (объекты сертификации)</td><td width="62%" bgcolor="#E8EBEF">Организации, осуществляющие деятельность в области энергетических исследований (энергоаудита), выполнения энергосервисных контрактов, внедрения энергосберегающего оборудования и его сервисного обслуживания, оборудование, используемое при производстве, преобразовании и распределении энергетических ресурсов, оборудование (продукция) (перечень кодов продукции по ОК 005-93 не представлен), используемое при энергопотреблении, а также влияющее на показатели энергопотребления, применяемые системы управления энергопотреблением, технические средства и системы учета энергетических ресурсов.</td></tr>

<tr valign="top"><td width="38%" bgcolor="#F2F4F6">Изображение знака</td><td width="62%" bgcolor="#F2F4F6"><img src="wp-content/uploads/img_ico/STG39260.gif" width="147" height="147" alt="">></td></tr>
</table>


в теге <h1></h1> находится заглавие добавляемой статьи, а в теге <h2></h2> находится чпу ссылка на статью и сам текст это то что находится между тегов <table></table> это сама таблица. Программка считывает текст из файла и выделяет нужные данные заглавие, чпу и текст в переменные, дальше это все передается в функцию добавления к вордпресс.

Ну и все, структура программы примерно ясна.

Исходники

Приведу исходники программы, она состоит из 3 файлов:

config.php »

<?php 

//1.Подключаем БД
$localhost="localhost";
$bd_login="root";
$bd_pass="";
$bd_name="vseiso.ru";

$db = mysql_connect($localhost,$bd_login,$bd_pass);//соединение
//выбор БД (wordpress)
mysql_select_db($bd_name ,$db);
mysql_set_charset( 'utf8' );

?>

function.php »

<?php 

/////////////////////////////////////////////////////////////////////////////////////////////////////////
#### ФУНКЦИЯ ЗАПОЛНЯЕТ ТАБЛИЦУ wp_posts и пост прикрепляет к рубрике в таблице wp_term_relationships ###########
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//функция также возвращает id вставленной записи для того чтобы можно ее было прикрепить к выбраной рубрике
function wp_add_wp_posts(
						$wp_posts1,				//название таблицы где хронятся посты wp_posts
						$wp_term_relationships1,//название таблицы для привязки рубрики wp_term_relationships
						$wp_term_taxonomy1,		//название таблицы где хранится количество статей рубрики wp_term_taxonomy
						$term_id1,				//содержит id рубрики к которой нужно привязать статью
						$post_author1,			//id автора
						$post_date1,			//какаето дата
						$post_date_gmt1,		//еще какаето дата
						$post_content1,			//текст статьи
						$post_title1,			//заглавие статьи
						$post_name1,			//ссылка на статью
						$post_modified1,		//какаето дата
						$post_modified_gmt1,	//еще какаето дата
						$guid1					//содержит короткую ссылку вида (http://wordpress/?p=) будет модифицированна в (http://wordpress/?p=idДобавленнойЗаписи)
						)
{
	global $db;//получаем доступ к дескриптору базы данных
	$ID="NULL";								//1
	$post_author=$post_author1;				//2
	$post_date=$post_date1; 				//3
	$post_date_gmt=$post_date_gmt1;			//4
	$post_content=addslashes(htmlspecialchars_decode($post_content1));			//5
	$post_title=addslashes(htmlspecialchars_decode($post_title1));				//6
	$post_excerpt="";						//7
	$post_status="publish";					//8
	$comment_status="open";					//9
	$ping_status="open";					//10
	$post_password="";						//11
	$post_name=$post_name1;					//12
	$to_ping="";							//13
	$pinged="";								//14
	$post_modified=$post_modified1;			//15
	$post_modified_gmt=$post_modified_gmt1;	//16
	$post_content_filtered="";				//17
	$post_parent="0";						//18
	$guid="";							//19 //пока пусто, затем сформируем ссылку
	$menu_order="0";						//20
	$post_type="post";						//21
	$post_mime_type="";						//22
	$comment_count="0";						//23
	
	$query="INSERT INTO `".$wp_posts1."` (nt";
	$query.="`ID` ,
	`post_author` ,
	`post_date` ,
	`post_date_gmt` ,
	`post_content` ,
	`post_title` ,
	`post_excerpt` ,
	`post_status` ,
	`comment_status` ,
	`ping_status` ,
	`post_password` ,
	`post_name` ,
	`to_ping` ,
	`pinged` ,
	`post_modified` ,
	`post_modified_gmt` ,
	`post_content_filtered` ,
	`post_parent` ,
	`guid` ,
	`menu_order` ,
	`post_type` ,
	`post_mime_type` ,
	`comment_count`
	)
	VALUES (";
	$query.="n".$ID.", '".$post_author."', '".$post_date."', '".
	$post_date_gmt."', '".$post_content."', '".$post_title."', '".
	$post_excerpt."', '".$post_status."', '".$comment_status."', '".
	$ping_status."', '".$post_password."', '".$post_name."', '".
	$to_ping."', '".$pinged."', '".$post_modified."', '".$post_modified_gmt."', '".
	$post_content_filtered."', '".$post_parent."', '".$guid."', '".
	$menu_order."', '".$post_type."', '".$post_mime_type."', '".$comment_count;
	$query.="'n);";
	
	if(!mysql_query($query,$db))
	{
		echo "query=$query<br>";
		echo "[wp_add_wp_posts] error - ".mysql_error();
		exit(1);
	}
	
	
	//######### обновим теперь поле ссылки в той же самой таблице ##########
	$id = mysql_insert_id ();	//получаем id только что вставленной записи
	$guid1.=(string)($id);		//формируем ссылку вида http://wordpress/?p=№
	$query = "UPDATE `".$wp_posts1."` SET `guid`='".$guid1."' WHERE `id`=".$id;
	//выполняем запрос
	if(!mysql_query($query,$db))
	{
		echo "query=$query<br>";
		echo "[wp_add_wp_posts] error - ". mysql_error();
		exit(1);
	}
	
	########################################################################################
	#[1] ПОЛУЧАЕМ ДАННЫЕ ДЛЯ ПРИВЯЗКИ И КОТОРЫЕ НУЖНО ОБНОВИТЬ ИЗ ТАБЛИЦЫ wp_term_taxonomy #
	########################################################################################
	$query = "SELECT * FROM `".$wp_term_taxonomy1."` WHERE term_id = '".$term_id1."'";
	$res = mysql_query($query); 
	if(!$res)
	{
		echo "query=$query<br>";
		echo "[wp_add_wp_posts] error - ".mysql_error();
		exit(1);
	}
	$row = mysql_fetch_array($res);
	$count=$row['count']+1;							//увеличиваем счетчик количество статей в рубрике на один
	$term_taxonomy_id=$row['term_taxonomy_id'];		//получаем значение поля term_id_taxonomy для id_term, (для нашей рубрики)	
	#[1]##############################################################
	
	##################################################################
	#[2] ПРИВЯЗКА СТАТЬИ К РУБРИКЕ wp_term_relationships (ПРИВЯЗКА СТАТЬИ К РУБРИКЕ)
	//формируем запрос
	$object_id=$id;		//id последней добавленной записи
	//$term_taxonomy_id	//выше мы его инициализировали, это term_taxonomy_id для выбранной рубрики
	$term_order="0";	//в таблице там было ноль
	
	$query="INSERT INTO `".$wp_term_relationships1."` (nt";
	$query.="`object_id` ,
	`term_taxonomy_id` ,
	`term_order`
	)
	VALUES (";
	$query.="n'".$object_id."', '".$term_taxonomy_id."', '".$term_order;
	$query.="'n);";
	if(!mysql_query($query,$db))
	{
		echo $str."<br><br>";
		echo "[wp_add_wp_posts] ".$wp_term_relationships." error - ".mysql_error();
		exit(1);
	}
	#[2]#####################################################################
	
	##################################################################
	#[3] ОБНОВЛЕНИЕ КОЛИЧЕСТВО СТАТЕЙ В РУБРИКЕ wp_term_taxonomy
	//обновляем данные
	//$count ее значение инициализированно и установлено на больше на один выше
	//$term_id1 она содержит айди рубрики
	$query="UPDATE ".$wp_term_taxonomy1." SET count='".$count."' WHERE term_id='".$term_id1."'";
	if(!mysql_query ($query))
	{
		echo $query."<br><br>";
		echo "[opdate_post] error - ".mysql_error();
		exit(1);
	}
	#[3]################################################################
	
	//формируем результат для проверки
	$result[0]=$id;
	$result[1]=$term_id1;
	$result[2]=$term_taxonomy_id;
	$result[3]=$count;
	return $result;//все нормально возвращаем $id
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
#### ФУНКЦИЯ ПРИНИМАЕТ СТРОКУ С АДРЕССОМ ПАПКИ И ЧИТАЕТ ЕЕ СОДЕРЖИМОЕ В ВИДЕ ФАЙЛОВ ###########
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//функция принимает адресс директории в которой находятся одни файлы, без папок
//и возвращает массив с именами этих файлов
function read_papka_data($dir)
{
	$files;//содержит массив файлов
	if(is_dir($dir)) 	//проверяем наличие директории
	{   
         $files = scandir($dir);    // сканируем (получаем массив файлов)
         array_shift($files); 		// удаляем из массива '.'
         array_shift($files); 		// удаляем из массива '..'
    }
    else
	{
		echo "[read_data()] - ".$dir.' -такой директории нет;<br>';
		exit(1);
	}
	
	return $files;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
#### ФУНКЦИЯ ПРИНИМАЕТ СТРОКУ С АДРЕССОМ ФАЙЛА ЧИТАЕТ ЕГО СОДЕРЖИМОЕ И ВОЗВРАЩАЕТ ЕГО В ВИДЕ ПЕРЕМЕННОЙ ###########
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//функция принимает адресс файла, читает его содержимое и возвращает содержимое файла
function read_file($file_path)
{
//	echo "file_path=$file_path<br>";
	$file_read="";	//в этой переменной находятся имена файлов которые читались и добавлялись уже.
	if(file_exists($file_path))
	{
		$fp=fopen($file_path, "r"); // Открываем файл в режиме чтения
		if($fp)
		{
			$i=0;
			while(!feof($fp))
			{
				$file_read.= fgets($fp, 999);
				$i++;
			}
		}
		else 
		{
			echo "[read_file] - Ошибка при открытии файла".$file_path."<br>";
			exit(1);
		}
		fclose($fp);
	}
	else
	{
		echo "[read_file] - file ".$file_path."  nety<br>";
		exit(1);
	}
	return $file_read;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
#### функция принимает строку и возвращает массив с данными ###########
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//первый элемент - это заглавие
//второй элемент - это ссылка
//третий элемент - это сам текст
function Obr_txt($str,$domen)
{
	//изьять заглавие<h1></h1>
	//1. находим название темы.
	global $name_theam;
	$name_theam="";//содержит название статьи
	$str=preg_replace_callback("#<h1>((?:n|.)+?)</h1>#","f_theam_name",$str);
//	echo "name_theam=$name_theam<br>";

	//2. находим ссылку
	global $name_ssulka;
	$name_ssulka="";//содержит ссылку статьи
	$str=preg_replace_callback("#<h2>((?:n|.)+?)</h2>#","f_ssulka_name",$str);
	//echo "name_ssulka=$name_ssulka<br>";
	

	//3. находим текст
	//находим referrer
	global $referrer;
	$referrer="";//содержит ссылку статьи откуда скачали
	$str=preg_replace_callback("#(<a[^<>]*?)>refferer</a>#","f_referrer",$str);
	
	global $text;
	//echo "text=$str";
	//exit(1);
	$str=preg_replace("#<td[^<>]+>#","<td>",$str);
	$str=preg_replace("#<tr[^<>]+>#","<tr>",$str);
	$str=preg_replace("#<table[^<>]+>#","<table>",$str);
	preg_replace_callback("#(<table>(?:n|.)*?)<tr>(?:n|[^<>])*?<td>(?:n|[^<>])*?<table>((?:n|.)*?)</table>(?:n|[^<>])*?</td></tr>((?:n|.)*?</table>)#","f_text",$str);
	
//	echo "text=$text<br>";
//	exit(1);
	$text=preg_replace("#(src=")([^"']*?)(")#"," width=200 $1".$domen."$2$3",$text);
	$text=preg_replace("#<td[^<>]+>#","<td>",$text);
	$text=preg_replace("#<tr[^<>]+>#","<tr>",$text);
	$text=preg_replace("#<table>#","<table>n<tbody>",$text);
	$text=preg_replace("#</table>#","</tbody>n</table>",$text);
	$text=preg_replace("#<tr><td>((?:n|.)*?)</td>#","<tr><td><strong>$1</strong></td>",$text);
	
	//					 <tr><td><strong>Дата регистрации</strong></td><td>06/15/2011</td></tr>
	//					 <tr><td>((?:n|.)*?)</td><td>((?:n|.)*?)</td></tr>
	$text=preg_replace("#<tr><td>((?:n|.)*?)</td><td>((?:n|.)*?)</td></tr>#",
		"<tr><td width="38%">$1</td><td width="62%">$2<br></td></tr>",$text);	
	
	$text=preg_replace("#>[^<>]*?Рег. номер[^<>]*?<#",">Рег. номер:<",$text);
	$text=preg_replace("#>[^<>]*?Дата регистрации[^<>]*?<#",">Дата регистрации:<",$text);
	$text=preg_replace("#>[^<>]*?Наименование системы сертификации[^<>]*?<#",">Наименование системы сертификации:<",$text);
	$text=preg_replace("#>[^<>]*?Организация, представившая систему на регистрацию[^<>]*?<#",">Организация, представившая систему на регистрацию:<",$text);
	$text=preg_replace("#>[^<>]*?Адрес, телефон, e-mail[^<>]*?<#",">Адрес, телефон, e-mail:<",$text);
	$text=preg_replace("#>[^<>]*?Область распространения системы (объекты сертификации)[^<>]*?<#",">Область распространения системы (объекты сертификации):<",$text);
	$text=preg_replace("#>[^<>]*?Изображение знака[^<>]*?<#",">Изображение знака:<",$text);
	
	$text=preg_replace("#&nbsp#","",$text);
	$text=preg_replace("#>>#",">",$text);
	
	
	$text=$text."n<p> </p>n".$referrer;
	$text="n<p> </p>n".$text."n<p> </p>";
	
	//4.формируем сам массив
	$result[0]=$name_theam;
	$result[1]=$name_ssulka;
	$result[2]=$text;
	return $result;
}

//////////////////////////////////////////////////
//просто калбеск функции
function f_theam_name($matches)
{
	global $name_theam;
	$name_theam=$matches[1];
	return "";
}
function f_ssulka_name($matches)
{
	global $name_ssulka;
	$name_ssulka=$matches[1];
	//тут нужно заменить двойные "--" и более в урле которые идут подтят
	$name_ssulka=preg_replace("#--+#","",$name_ssulka);
	return "";
}
function f_referrer($matches)
{
	global $referrer;
	$referrer=$matches[1];
	$referrer.=" rel="nofollow">referrer</a>";
	$referrer="<noindex>".$referrer."</noindex>";
	$referrer="Источник: ".$referrer;	
	return "";
}
function f_text($matches)
{
	global $text;
	$text=$matches[1];
	$matches[2]=preg_replace("#<tr><td>((?:n|.)*?)</td><td>((?:n|.)*?)</td></tr>(?:n|[^<>])*?<tr><td>((?:n|.)*?)</td><td>((?:n|.)*?)</td></tr>#",
			"<tr><td>$1</td><td>$3</td></tr>n<tr><td>$2</td><td>$4</td></tr>",$matches[2]);
	$text.=$matches[2];
	$text.=$matches[3];
	return "";
}




?>

index.php »

<?php
//ini_set('memory_limit', '3000000000');
set_time_limit (6000);
require_once "config.php";
require_once "function.php";
echo "hellow world<br>";


//читаем содержимое папки
//$files=read_papka_data("new_data_str/");

$files="";
$count=0;
$s="new_data_str/";
$s_mod=$s.$count.".html";
echo $s_mod."<br>";
while(file_exists($s_mod))
{
//	echo $s_mod."<br>";
	$files[$count++]=$s_mod;
	$s_mod=$s.$count.".html";
}

//exit(1);

for($i=0;$i<count($files);$i++)
//for($i=0;$i<10;$i++)
{
	//echo "files[$i]=".$files[$i]."<br>";
	$data=read_file($files[$i]);
	//получить массив с данными
	$mass_data=Obr_txt($data,"http://vs.ru/");
	
	//вызов функции добавления поста
	$id=wp_add_wp_posts(
				"wp_posts",				//таблица с постами
				"wp_term_relationships",//таблица привязки поста к рубрике
				"wp_term_taxonomy",		//таблица где нужно обновить количество постов
				"6",					//айди рубрики
				"1",					//айди автора
				date("Y-m-d H:i:s"),	//дата добавления
				date("Y-m-d H:i:s"),	//еще кокаето датаss
				$mass_data[2],//текст
				$mass_data[0],//заглавие
				$mass_data[1],//ссылка
				date("Y-m-d H:i:s"),	//дата модификации хз. что это
				date("Y-m-d H:i:s"),	//еще какаето дата
				"http://vs.ru/?p="	//ссылка к которой нужно добавить айди вставленной записи (автомат в функции)
				);
	echo $id[0]."<br>";
/*	echo "<pre>";
	print_r($id);
	echo "</pre>";
	*/
	
	//exit(1);
}


exit(1);
//вызов функции добавления поста
$id=wp_add_wp_posts(
			"wp_posts",				//таблица с постами
			"wp_term_relationships",//таблица привязки поста к рубрике
			"wp_term_taxonomy",		//таблица где нужно обновить количество постов
			"6",					//айди рубрики
			"1",					//айди автора
			date("Y-m-d H:i:s"),	//дата добавления
			date("Y-m-d H:i:s"),	//еще кокаето датаss
			"Еб ты бля мазафака бичь! <!--more--> nахаха-ха-ха",//текст
			"Это моя статья",//заглавие
			"aaaaaaatttttt-t-t-tccil6ka",//ссылка
			date("Y-m-d H:i:s"),	//дата модификации хз. что это
			date("Y-m-d H:i:s"),	//еще какаето дата
			"http://wordpress/?p="	//ссылка к которой нужно добавить айди вставленной записи (автомат в функции)
			);
echo "<pre>";
print_r($id);
echo "</pre>";

?>

И приведу ссылку на архив программы которая добавляет в рубрику с ID равным 6 две статьи из папки в которой находятся файлы добавления, при использовании программы нужно изменить настройки в файле config.php – подключится к БД, и в index.php указать в функции вставки поста в бд ваши данные домена.

Ссылка на исходники программы refferer.

Да ребятки также изображения и другие медиафайлы в вордпресс добавляются вручную, вы сами указываете и создаете папки в папке wp-content, туда обычно сохраняется контент сайта.

Если что то не ясно, то спрашивайте в комментариях, не стесняйтесь!

[youtube]https://www.youtube.com/watch?v=o8vnVwFGB7Q[/youtube]

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *