{"id":233301,"date":"2023-02-10T16:11:00","date_gmt":"2023-02-10T13:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233301"},"modified":"2022-11-10T20:22:33","modified_gmt":"2022-11-10T17:22:33","slug":"adicionar-uma-proxima-postagem-aleatoria-no-modelo-de-pagina-do-wordpress-usando-sql","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/adicionar-uma-proxima-postagem-aleatoria-no-modelo-de-pagina-do-wordpress-usando-sql\/","title":{"rendered":"Adicionar uma pr\u00f3xima postagem aleat\u00f3ria no modelo de p\u00e1gina do WordPress usando SQL"},"content":{"rendered":"\n<p>Muitas vezes voc\u00ea pode obter conselhos sobre como melhorar o SEO (Search Engine Optimization) adicionando links \u00e0s suas postagens anteriores ao publicar uma nova postagem. Isso ajuda a aumentar o tr\u00e1fego e funciona de forma semelhante a plugins como &#8216;Posts Relativos&#8217;, mas apenas mais simples.<\/p>\n<p>Todas as postagens do wordpress s\u00e3o armazenadas na tabela, por exemplo, <strong>wp_posts<\/strong> e dentro desta tabela, voc\u00ea encontrar\u00e1 <strong>post_title<\/strong>, <strong>post_name<\/strong> e essas colunas s\u00e3o bastante diretas. Dependendo das configura\u00e7\u00f5es de seus URLs de postagem, voc\u00ea pode ter v\u00e1rios formatos de permalinks que podem ser configurados na se\u00e7\u00e3o Configura\u00e7\u00f5es \u2013 Permanlink.<\/p>\n<p>O c\u00f3digo PHP a seguir pode ser inserido em seu modelo de p\u00e1gina, normalmente <strong>single.php<\/strong> que \u00e9 o modelo de postagem \u00fanica ou <strong>page.php<\/strong> para modelo de p\u00e1gina.<\/p>\n<pre><code>\u00a0 global $wpdb; \/\/ include the $wpdb\n\u00a0 $query = \"select `post_title` as `title`, `post_name` as `name` from `wp_posts` where `post_type`='post' and `post_status`='publish' order by rand() limit 1\";\n\u00a0 $results = $wpdb-&gt;get_results($query); \/\/ run the query on the database\n\u00a0 if ($results) { \n\u00a0 \u00a0 $domain = $_SERVER['SERVER_NAME'];\n\u00a0 \u00a0 foreach ($results as $toppost) {\n\u00a0 \u00a0 \u00a0 \u00a0 echo \"&lt;a href=\"&lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/$domain\/\".$toppost-\" rel=\"nofollow\"&gt;&lt;span&gt;http&lt;\/span&gt;&lt;span&gt;:\/\/$&lt;\/span&gt;&lt;span&gt;domain&lt;\/span&gt;&lt;span&gt;\/\".$&lt;\/span&gt;&lt;span&gt;toppost&lt;\/span&gt;&lt;span&gt;-&lt;\/span&gt;&lt;\/a&gt;&gt;name.\"\/\"&gt;&lt;img title=\"Next Post: \".$toppost-&gt;title.\"\" src=\"&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/helloacm.com\/static\/nextpost2.png\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;helloacm&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;static&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;nextpost2&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;png&lt;\/span&gt;&lt;\/a&gt;\" alt=\"Next Post: \".$toppost-&gt;title.\"\" \/&gt;&lt;\/a&gt;\";\n\u00a0 \u00a0 }\n\u00a0 }<\/code><\/pre>\n<p>Altere <strong>wp_posts<\/strong> de acordo, pois isso pode variar um pouco. A consulta SQL retorna um post aleat\u00f3rio onde exclui as p\u00e1ginas, ou menu_items, links etc. E o status do post deve ser publicado o que exclui o rascunho. O <strong>limite 1<\/strong> retorna apenas 1 post. Portanto, se voc\u00ea quiser uma postagem anterior, considere alterar isso para <strong>limitar 2<\/strong>.<\/p>\n<p>O permalink no meu site \u00e9 baseado no <strong>post_name,<\/strong> que \u00e9 mais amig\u00e1vel para SEO. Voc\u00ea pode muito bem personalizar isso. A consulta SQL tamb\u00e9m pode ser personalizada. Por exemplo, voc\u00ea pode querer retornar postagens relevantes em vez de postagens aleat\u00f3rias, correspondendo o <code>title<\/code>valor de acordo com o t\u00edtulo da postagem atual. Ou voc\u00ea realmente deseja retornar sua postagem anterior ou seguinte classificada por data de publica\u00e7\u00e3o, voc\u00ea pode usar o campo &#8216;post_id&#8217;.<\/p>\n<h3>Coment\u00e1rios<\/h3>\n<p>Yu \u2013 &#8220;Legal, aleat\u00f3rio \u00e9 muito bom. Tamb\u00e9m \u00e9 melhor garantir que o aleat\u00f3rio esteja relacionado ao post atual. Mas isso geralmente n\u00e3o \u00e9 um grande problema, desde que o blog seja para um \u00fanico g\u00eanero.<\/p>\n<p>Al\u00e9m disso, a ordem por RAND() funciona bem para milhares de registros. (geralmente o caso de um blog normal). Mas ele queimar\u00e1 seu banco de dados se voc\u00ea tiver milh\u00f5es de registros na mesma tabela que correspondam aos crit\u00e9rios de pesquisa.&quot;<\/p>\n<p>Sim, a <strong>ordem SQL por rand()<\/strong> \u00e9 um pouco complicada e lenta. Ele precisa buscar todos os registros e classificados aleatoriamente. \u00c9 considerada baixa efici\u00eancia quando o tamanho da mesa \u00e9 m\u00e9dio ou grande. Voc\u00ea pode usar o seguinte truque para obter um registro aleat\u00f3rio de maneira mais r\u00e1pida, empregando a fun\u00e7\u00e3o <strong>rand()<\/strong> no PHP.<\/p>\n<pre><code>\/\/ get total number of records\n$query = \"select count(1) from `table`\";\n$result = mysql_query($query) or die(mysql_error());\n$total = mysql_result($result, 0, 0);\n\n\/\/ get a random\n$r = rand(0, $total - 1);\n\/\/ return a number between 0 and $total - 1 inclusive using PHP\n$query = \"select * from `table` limit $r, 1\";\n$result = mysql_query($query) or die(mysql_error());<\/code><\/pre>\n<p><strong>As causas do limite<\/strong> SQL especificam o deslocamento e o segundo par\u00e2metro especifica o n\u00famero de registros a serem buscados.<\/p>\n<h3>Melhor registro aleat\u00f3rio<\/h3>\n<p>De acordo com o acima, a <strong>ordem por rand()<\/strong> \u00e9 extremamente ineficiente se voc\u00ea tiver uma tabela muito grande porque para a ordena\u00e7\u00e3o (mesmo que voc\u00ea queira apenas um item), a fun\u00e7\u00e3o <strong>rand()<\/strong> ser\u00e1 invocada e \u00e9 isso que n\u00e3o queremos querer. Podemos melhorar o acima usando duas consultas, a primeira retorna o n\u00famero total de postagens, e temos uma fun\u00e7\u00e3o aleat\u00f3ria do PHP e obtemos o registro aleat\u00f3rio usando a instru\u00e7\u00e3o <strong>limit<\/strong>.<\/p>\n<pre><code>global $wpdb; \/\/ include the $wpdb\n$query= \"select count(1) from `wp_posts` where `post_type`='post' and `post_status`='publish'\";\n$cnt = $wpdb-&gt;get_var($query); \/\/ run the query on the database and return single variable\n$rand = mt_rand(0, $cnt - 1);\n$query= \"select `post_title` as `title`, `post_name` as `name` from `wp_posts` where `post_type`='post' and `post_status`='publish' limit $rand,1\";\n$results = $wpdb-&gt;get_results($query); \/\/ run the query on the database\n\/\/ the rest are the same<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Adicionar uma pr\u00f3xima postagem aleat\u00f3ria no modelo de p\u00e1gina do WordPress<\/p>\n","protected":false},"author":1,"featured_media":224094,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,898,722,722,837,1110,806,806,837,846,846,867,867],"tags":[1170],"class_list":["post-233301","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-n-a","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=233301"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233301\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/224094"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}