{"id":232798,"date":"2023-01-29T17:37:00","date_gmt":"2023-01-29T14:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232798"},"modified":"2023-02-10T16:28:36","modified_gmt":"2023-02-10T13:28:36","slug":"como-revivir-publicaciones-antiguas-usando-php-y-crontab-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-revivir-publicaciones-antiguas-usando-php-y-crontab-wordpress\/","title":{"rendered":"C\u00f3mo revivir publicaciones antiguas usando PHP y Crontab (WordPress)"},"content":{"rendered":"\n<p>Supongamos que tiene un buen n\u00famero de publicaciones decentes en su blog y se pregunta si hay alguna manera de publicar en Twitter\/Facebook (u otras redes sociales) de forma autom\u00e1tica y regular.<\/p>\n<p>Esto no es dif\u00edcil. Aunque esta publicaci\u00f3n lo guiar\u00e1 para publicar en Twitter, el principio es similar para otras redes sociales. <a href=\"https:\/\/helloacm.com\/php-function-to-post-to-twitter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Esta publicaci\u00f3n<\/a> presenta la funci\u00f3n PHP para publicar en Twitter.<\/p>\n<p>No queremos publicar el mismo contenido\/art\u00edculos una y otra vez en un corto per\u00edodo de tiempo. Por lo tanto, necesitamos crear una tabla SQL que almacene el historial de las publicaciones que se han vuelto a publicar.<\/p>\n<pre><code>--\n-- Table structure for table `twitter`\n--\n\nCREATE TABLE IF NOT EXISTS `twitter` (`id` bigint(32) unsigned NOT NULL,\n  `url` varchar(255) NOT NULL,\n  `posttime` datetime NOT NULL) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;<\/code><\/pre>\n<p>La tabla tiene tres campos, uno es la clave principal (incremento autom\u00e1tico), el segundo campo es la ubicaci\u00f3n de la URL que se volvi\u00f3 a publicar y el tercero es la fecha y la hora.<\/p>\n<p>Todos los campos deben estar debidamente indexados.<\/p>\n<pre><code>ALTER TABLE `twitter`\n ADD PRIMARY KEY (`id`), ADD KEY `url` (`url`,`posttime`), ADD KEY `posttime` (`posttime`);<\/code><\/pre>\n<p>Ahora, si tiene un wordpress, debe consultar las publicaciones v\u00e1lidas y elegir una al azar.<\/p>\n<pre><code>\u00a0 \/\/ database constants\n\u00a0 require('db.php');\n\u00a0 \/\/ twitter function\n\u00a0 require('twitter.php');\n\u00a0 mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());\n\u00a0 mysql_select_db(DB_NAME);\n\u00a0 $today = date(\"Y-m-d h:i:s\");\n\u00a0 \/\/ get total number of valid posts\n\u00a0 $query = \"\n \u00a0 \u00a0 \u00a0select \n \u00a0 \u00a0 \u00a0 \u00a0count(1)\n \u00a0 \u00a0 \u00a0from \n \u00a0 \u00a0 \u00a0 \u00a0`wp_posts`\n \u00a0 \u00a0 \u00a0where \n \u00a0 \u00a0 \u00a0 \u00a0(`post_type` = 'page' or `post_type` = 'post') and \n \u00a0 \u00a0 \u00a0 \u00a0(`post_status` = 'publish')\n \u00a0\";\n\u00a0 $result = mysql_query($query) or die(mysql_error());\n\u00a0 $total = mysql_result($result, 0, 0);\n\u00a0 $cnt = 0;\n\u00a0 if ($total &gt; 0) {\n\u00a0 \u00a0 while (1) {\n\u00a0 \u00a0 \u00a0 \/\/ pick a random npost\n\u00a0 \u00a0 \u00a0 $idx = mt_rand(0, $total - 1);\n\u00a0 \u00a0 \u00a0 $query = \"\n \u00a0 \u00a0 \u00a0 \u00a0select \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`post_name`, `post_title` \n \u00a0 \u00a0 \u00a0 \u00a0from \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`wp_posts`\n \u00a0 \u00a0 \u00a0 \u00a0where \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(`post_type` = 'page' or `post_type` = 'post') and \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(`post_status` = 'publish')\n \u00a0 \u00a0 \u00a0 \u00a0limit $idx, 1\n \u00a0 \u00a0 \u00a0\";\n\u00a0 \u00a0 \u00a0 $result = mysql_query($query) or die(mysql_error());\n\u00a0 \u00a0 \u00a0 $row = mysql_fetch_array($result);\n\u00a0 \u00a0 \u00a0 \/\/ post URL\n\u00a0 \u00a0 \u00a0 $url = \"&lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/www.codingforspeed.com\/\".$row['post_name'].\"\/\" rel=\"nofollow\"&gt;&lt;span&gt;http&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;www&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;codingforspeed&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/\".$&lt;\/span&gt;&lt;span&gt;row&lt;\/span&gt;&lt;span&gt;['&lt;\/span&gt;&lt;span&gt;post&lt;\/span&gt;&lt;span&gt;_&lt;\/span&gt;&lt;span&gt;name&lt;\/span&gt;&lt;span&gt;'].\"\/&lt;\/span&gt;&lt;\/a&gt;\";\n\u00a0 \u00a0 \u00a0 $title = $row['post_title'];\n\u00a0 \u00a0 \u00a0 $query2 = \"select date(`posttime`) from `twitter` where `url` = '$url' order by `posttime` desc limit 1\";\n\u00a0 \u00a0 \u00a0 $result2 = mysql_query($query2) or die(mysql_error());\n\u00a0 \u00a0 \u00a0 if (mysql_num_rows($result2) &gt; 0) {\n\u00a0 \u00a0 \u00a0 \u00a0 $last = mysql_result($result2, 0, 0);\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ last reposted date\/time\n\u00a0 \u00a0 \u00a0 \u00a0 $diff = abs((strtotime($today) - strtotime($last)) \/ 24 \/ 3600);\n\u00a0 \u00a0 \u00a0 \u00a0 if ($diff &lt;= 90) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $cnt ++;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if ($cnt &gt; 16) { \/\/ max retry time to avoid endless loop\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break;\u00a0 \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 continue; \/\/ try next random post\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \/\/ record the post in the table\n\u00a0 \u00a0 \u00a0 $query = \"\n \u00a0 \u00a0 \u00a0 \u00a0insert into `twitter`\n \u00a0 \u00a0 \u00a0 \u00a0set \n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`url` = '$url',\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0`posttime` = '$today'\n \u00a0 \u00a0 \u00a0\";\n\u00a0 \u00a0 \u00a0 mysql_query($query) or die(mysql_error());\n\u00a0 \u00a0 \u00a0 $msg = \"#Repost \".$title;\n\u00a0 \u00a0 \u00a0 echo \"$msg $url\";\n\u00a0 \u00a0 \u00a0 postTwitter($msg, $url);\n\u00a0 \u00a0 \u00a0 break;\n\u00a0 \u00a0 }\n\u00a0 }<\/code><\/pre>\n<p>La idea aqu\u00ed es obtener una publicaci\u00f3n aleatoria y verificar si se ha vuelto a publicar en los \u00faltimos 90 d\u00edas (modificar si es necesario), si no, publicarla y registrarla en la base de datos. De lo contrario, intente las siguientes publicaciones aleatorias hasta que se hayan intentado varias veces. Si no se encuentran publicaciones &#8216;v\u00e1lidas&#8217; (por ejemplo, no hay art\u00edculos nuevos durante mucho tiempo), lo detectar\u00e1 y abandonar\u00e1 el bucle.<\/p>\n<p>Tambi\u00e9n verifique esta <a href=\"https:\/\/wordpress.mediadoma.com\/es\/agregue-una-proxima-publicacion-aleatoria-en-la-plantilla-de-pagina-de-wordpress-usando-sql\/\" title=\"publicaci\u00f3n\">publicaci\u00f3n<\/a> para obtener una fila aleatoria usando SQL.<\/p>\n<p>Lo siguiente es probarlo correctamente y ponerlo en el <strong><a href=\"https:\/\/helloacm.com\/crontab-generator\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crontab<\/a><\/strong>, por ejemplo, una vez al d\u00eda.<\/p>\n<pre><code>0 8 * * * php \/home\/justyy.lai\/auto.php &gt; \/dev\/null 2&gt;&amp;1<\/code><\/pre>\n<p>El mensaje que se publica en Twitter se puede personalizar y agregu\u00e9 una etiqueta &quot;#Repost&quot; para distinguirlo de otras publicaciones normales. Tambi\u00e9n vinculo mi cuenta de Twitter a una p\u00e1gina de Facebook, de modo que cada vez que los twits se el estado tambi\u00e9n est\u00e1 sincronizado, lo que es mucho m\u00e1s f\u00e1cil para m\u00ed.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo revivir publicaciones antiguas usando PHP y Crontab<\/p>\n","protected":false},"author":1,"featured_media":220869,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[674,892,831,992,800,840,861],"tags":[1172],"class_list":["post-232798","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-al-blog","category-codigo","category-guia-para-principiantes","category-marketing-de-contenidos","category-php-2","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/232798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=232798"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/232798\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/220869"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=232798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=232798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=232798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}