WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Парсинг заголовков и url в записи.

У меня есть спаршеные записи но плагин парсит заголовки не так как надо было. А url и вовсе не тянет.

Я используя библиотеку simple_html_dom вывожу нужные заголовки и url с сайта.
Но не могу правильно их переписать в существующие записи.
То есть не стоит цель спарсить всё заново, а лишь переписать заголовки с url.

$html = file_get_html('ссылка на страницу сайта с ссылками на запипи');
$my_posts = get_posts('category=7'); //Категория рубрик

foreach($html->find('.art_list a') as $html_title) // Находим и перебираем нужные теги
{
	echo '<a href="'. $html_title->href .'">'.$html_title->plaintext.'</a>';
//Выводит ссылки с сайта (не обязательно, просто, чтобы увидеть какие данные мы получаем)
	foreach ($my_posts as $post) //Перебераем посты
	{
		$my_post = [
			'ID' => $post->ID,
			'post_title' => $html_title->plaintext,
			'post_name' => substr($html_title->href, 25)
		];//Записываем данные для постов
		wp_update_post(wp_slash($my_post)); //Перезаписываем
	}
}

Казалось бы всё работает но, на самом деле оно на каждый пост записывает данные последнего найденой ссылки с другого сайта.

То есть у меня есть в 7 категории 3 поста, и после перезаписи у всех один и тот же заголовок и url.

Не понимаю как грамотно построить алгоритм.

0
Richa
1.8 года назад 3
  • 1
    el-lable620 el-lable.ru

    Ну так у вас так скрипт и работает.
    Вы получаете какие-то $html_title-ы проходитесь по ним в цикле и каждый раз результат записываете всем своим $my_posts.
    Естественно у вас последний результат записывается вашим трем постам.

    На самом деле, совершенно не понятна задумка.
    Например если у вас ссылок больше чем записей.

    $html = file_get_html('ссылка на страницу сайта с ссылками на запипи');
    $my_posts = get_posts('category=7'); //Категория рубрик
    
    //foreach($html->find('.art_list a') as $html_title) // Находим и перебираем нужные теги
    foreach($html->find('.art_list a') as $n => $html_title)
    {
    	echo '<a href="'. $html_title->href .'">'.$html_title->plaintext.'</a>'; 
    	//Выводит ссылки с сайта (не обязательно, просто, чтобы увидеть какие данные мы получаем)
    	/*foreach ($my_posts as $post) //Перебераем посты
    	{*/
    		$my_post = [
    			'ID' => /*$post*/$my_posts[$n]->ID,
    			'post_title' => $html_title->plaintext,
    			'post_name' => substr($html_title->href, 25)
    		];//Записываем данные для постов
    		wp_update_post(wp_slash($my_post)); //Перезаписываем
    	/*}*/
    }
    Richa 1.8 года назад

    Спасибо вам за ответ. Вообще сначала планировал парсить посты. Но так как вставл в тупик не понимал как мне ещё и контент достать, решил просто переписать титлы и урлы. Нооо потом я придумал как достать и контент и создать заново посты.

    <?php
    
    include "путь/simple_html_dom.php";
    
    require_once (dirname(__FILE__) . '/wp-load.php');
    require_once (dirname(__FILE__) . '/wp-admin/includes/admin.php');
    
    $html = file_get_html('ссылка на страницу с ссылками на посты');
    
    foreach($html->find('.art_list .art-tpl__title a') as $html_title)
    {
    	$html_post = file_get_html('домен'.$html_title->href);
    
    	echo '<a href="'. $html_title->href .'">'.$html_title->plaintext.'</a></br>';
    	foreach($html_post->find('#printMe') as $html_post_print_me)
    	{
    		// echo '<div>'. $html_post_print_me->plaintext .'</div>';
    		$post_data = [
    			'post_name' => substr($html_title->href, 31),
    			'post_title' => $html_title->plaintext,
    			'post_content' => $html_post_print_me,
    			'post_status' => 'publish',
    			'post_category' => [10],
    		];
    
    		$post_id = wp_insert_post($post_data);
    	}
    }
    ?>

    И таким образом я с нужными заголовками и url спарсил 6к статей с оригинального сайта.

    P.S да и вообще я бы с этим делом не заморачивался, но так как от заказчика стояла задача и url перенести, пришлось придумывать решение. Ибо имеющиеся плагины этой функции не предоставляют.

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