✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Как оживить старые сообщения с помощью PHP и Crontab (WordPress)

35

Предположим, у вас в блоге довольно много достойных постов, и вам интересно, есть ли способ публиковать их в Twitter/Facebook (или других социальных сетях) автоматически и регулярно.

Это несложно. Хотя этот пост поможет вам публиковать сообщения в твиттере, принцип аналогичен для других социальных сетей. В этом посте представлена ​​функция PHP для публикации в твиттере.

Мы не хотим публиковать один и тот же контент/статьи снова и снова в течение короткого периода времени. Поэтому нам нужно создать таблицу SQL, в которой хранится история переопубликованных постов.

--
-- Table structure for table `twitter`
--

CREATE TABLE IF NOT EXISTS `twitter` (`id` bigint(32) unsigned NOT NULL,
  `url` varchar(255) NOT NULL,
  `posttime` datetime NOT NULL) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

В таблице есть три поля: одно — первичный ключ (автоматическое увеличение), второе — URL-адрес, который был повторно опубликован, а третье — дата и время.

Все поля должны быть правильно проиндексированы.

ALTER TABLE `twitter`
 ADD PRIMARY KEY (`id`), ADD KEY `url` (`url`,`posttime`), ADD KEY `posttime` (`posttime`);

Теперь, если у вас есть WordPress, вам нужно запросить действительные сообщения и случайным образом выбрать одно из них.

  // database constants
  require('db.php');
  // twitter function
  require('twitter.php');
  mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
  mysql_select_db(DB_NAME);
  $today = date("Y-m-d h:i:s");
  // get total number of valid posts
  $query = "
      select 
        count(1)
      from 
        `wp_posts`
      where 
        (`post_type` = 'page' or `post_type` = 'post') and 
        (`post_status` = 'publish')
  ";
  $result = mysql_query($query) or die(mysql_error());
  $total = mysql_result($result, 0, 0);
  $cnt = 0;
  if ($total > 0) {
    while (1) {
      // pick a random npost
      $idx = mt_rand(0, $total - 1);
      $query = "
        select 
          `post_name`, `post_title` 
        from 
          `wp_posts`
        where 
          (`post_type` = 'page' or `post_type` = 'post') and 
          (`post_status` = 'publish')
        limit $idx, 1
      ";
      $result = mysql_query($query) or die(mysql_error());
      $row = mysql_fetch_array($result);
      // post URL
      $url = "<a class="vglnk" target="_blank" href="http://www.codingforspeed.com/".$row['post_name']."/" rel="nofollow"><span>http</span><span>://</span><span>www</span><span>.</span><span>codingforspeed</span><span>.</span><span>com</span><span>/".$</span><span>row</span><span>['</span><span>post</span><span>_</span><span>name</span><span>']."/</span></a>";
      $title = $row['post_title'];
      $query2 = "select date(`posttime`) from `twitter` where `url` = '$url' order by `posttime` desc limit 1";
      $result2 = mysql_query($query2) or die(mysql_error());
      if (mysql_num_rows($result2) > 0) {
        $last = mysql_result($result2, 0, 0);
        // last reposted date/time
        $diff = abs((strtotime($today) - strtotime($last)) / 24 / 3600);
        if ($diff <= 90) {
          $cnt ++;
          if ($cnt > 16) { // max retry time to avoid endless loop
            break;  
          }
          continue; // try next random post
        }
      }
      // record the post in the table
      $query = "
        insert into `twitter`
        set 
          `url` = '$url',
          `posttime` = '$today'
      ";
      mysql_query($query) or die(mysql_error());
      $msg = "#Repost ".$title;
      echo "$msg $url";
      postTwitter($msg, $url);
      break;
    }
  }

Идея здесь состоит в том, чтобы получить случайный пост и проверить, был ли он повторно опубликован за последние 90 дней (при необходимости изменить), если нет, опубликовать его и записать в базу данных. В противном случае попробуйте следующие случайные сообщения, пока не будет сделано несколько попыток. Если такие «действительные» сообщения не найдены (например, нет новых статей в течение длительного времени), он обнаружит это и прервет цикл.

Также проверьте этот пост для получения случайной строки с использованием SQL.

Следующее, что нужно сделать, это правильно протестировать его и поместить в crontab, например, один раз в день.

0 8 * * * php /home/justyy.lai/auto.php > /dev/null 2>&1

Публикация сообщений в Twitter настраивается, и я добавил хэш-тег «#Repost», чтобы отличать его от других обычных сообщений. Я также связываю свою учетную запись в Twitter со страницей в Facebook, чтобы каждый раз, когда твиты публикуются в Twitter, статус также синхронизируется, что намного проще для меня.

Источник записи: helloacm.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее