WordPress как на ладони

cron — 12 (24) постов на каждый день

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

Хочу создать дубль сайта на домене COM и поменять полностью сео и медиа и имена и т.д..

Задачи

  1. Поменять всем постам статус из publish на future.
  2. (Главная) Публиковать или рандомно или каждый час запись. 10-15 постов в день.

Опыта с крон нет - интересует ваше мнение и примеры.


есть старое рабочее решение - но оно максимально примитивно - код ложится в корень и потом запускается по URL (запускал 2 года назад - последний раз) - он разобьет даты на выбранный диапазон, останется поменять статус постов (код даже это сделает сам) и всего

<?php
	require_once(dirname(__FILE__).'/wp-load.php');

	set_time_limit(300);
	$wpdb->show_errors();

	// диапазон раскидывания постов:
	//  от (текущая_дата - $days_minus дней)
	//  до (текущая дата + $days_plus дней)

	$days_minus = 250;
	$days_plus = 0;

	// дальше магия

	$sql = 'SELECT `ID` FROM `'.$wpdb->prefix.'posts`
			WHERE
				`post_type`="post"
			AND
				(`post_status`="future" OR `post_status`="publish")
	';

	if ( $posts = $wpdb->get_results($sql) )
	{
		// Меняем дату у постов
		foreach ($posts as $post)
		{
			$sql = 'UPDATE `'.$wpdb->prefix.'posts` SET
					   `post_date`= DATE_ADD(
										FROM_DAYS( FLOOR( TO_DAYS(NOW())
														  + (RAND()*'.$days_plus.')
														  - (RAND()*'.$days_minus.')
												   )
										),
										INTERVAL (FLOOR(RAND()*86400)) SECOND
					   ),
					   `post_date_gmt`=`post_date`,
					   `post_modified`=`post_date`,
					   `post_modified_gmt`=`post_date`
				   WHERE
					   `id`=%d
				   LIMIT 1
			';

			$psql = $wpdb->prepare($sql, $post->ID);

			$wpdb->query($psql);
		}

		// Обновляем статусы постов

		$sql = 'UPDATE `'.$wpdb->prefix.'posts` SET
				  `post_status`="future"
				WHERE
				  `post_date`>NOW()
				AND
				  `post_type`="post"
				AND
				  (`post_status`="future" OR `post_status`="publish")
		';

		$wpdb->query($sql);

		$sql = 'UPDATE `'.$wpdb->prefix.'posts` SET
						`post_status`="publish"
					  WHERE
						`post_date`<=NOW()
					  AND
						`post_type`="post"
					  AND
						(`post_status`="future" OR `post_status`="publish")
		';

		$wpdb->query($sql);
	}

	die('Complete');
0
kolshix
5.7 лет назад 779
  • 0

    Я тут вижу 2 решения.

    1. Если постам выставить дату публикации в будущем то этот пост не будет отображаться (ну по крайней мере по дефолту). Прошлись по всем постам и раздали дату публикации.
    2. Выставить статус черновика, и кроном запускать функцию которая будет менять статус. https://wp-kama.ru/function/wp_cron . В крон передаете начальное время и интервал через который надо дергать функцию.
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация