{"id":233257,"date":"2023-02-10T16:28:00","date_gmt":"2023-02-10T13:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233257"},"modified":"2022-11-10T20:09:19","modified_gmt":"2022-11-10T17:09:19","slug":"agregue-una-proxima-publicacion-aleatoria-en-la-plantilla-de-pagina-de-wordpress-usando-sql","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/agregue-una-proxima-publicacion-aleatoria-en-la-plantilla-de-pagina-de-wordpress-usando-sql\/","title":{"rendered":"Agregue una pr\u00f3xima publicaci\u00f3n aleatoria en la plantilla de p\u00e1gina de WordPress usando SQL"},"content":{"rendered":"\n<p>A menudo puede obtener consejos sobre c\u00f3mo mejorar el SEO (optimizaci\u00f3n de motores de b\u00fasqueda) agregando enlaces a sus publicaciones anteriores cuando publica una nueva publicaci\u00f3n. Esto ayuda a aumentar el tr\u00e1fico y funciona de manera similar a los complementos como &#8216;Publicaciones relativas&#8217; pero solo que m\u00e1s simple.<\/p>\n<p>Todas las publicaciones de wordpress se almacenan en la tabla, por ejemplo, <strong>wp_posts<\/strong> y dentro de esta tabla, encontrar\u00e1 <strong>post_title<\/strong>, <strong>post_name<\/strong> y estas columnas son bastante sencillas. Dependiendo de las configuraciones de las URL de su publicaci\u00f3n, puede tener varios formatos de enlaces permanentes que se pueden configurar en la secci\u00f3n Configuraci\u00f3n &#8211; Enlace permanente.<\/p>\n<p>El siguiente c\u00f3digo PHP se puede insertar en la plantilla de su p\u00e1gina, normalmente <strong>single.php<\/strong> que es la plantilla de publicaci\u00f3n \u00fanica o <strong>page.php<\/strong> para la plantilla 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>Cambie <strong>wp_posts<\/strong> en consecuencia, ya que esto puede variar un poco. La consulta SQL devuelve una publicaci\u00f3n aleatoria donde excluye las p\u00e1ginas, o elementos de men\u00fa, enlaces, etc. Y el estado de la publicaci\u00f3n debe publicarse, lo que excluye el borrador. El <strong>l\u00edmite 1<\/strong> devuelve solo 1 publicaci\u00f3n. Entonces, si desea una publicaci\u00f3n anterior, podr\u00eda considerar cambiar esto para <strong>limitar 2<\/strong>.<\/p>\n<p>El enlace permanente en mi sitio se basa en <strong>post_name,<\/strong> que es m\u00e1s compatible con SEO. Bien podr\u00edas personalizar esto. La consulta SQL tambi\u00e9n se puede personalizar. Por ejemplo, es posible que desee devolver publicaciones relevantes en lugar de publicaciones aleatorias haciendo coincidir el <code>title<\/code>valor seg\u00fan el t\u00edtulo de la publicaci\u00f3n actual. O realmente desea devolver su publicaci\u00f3n anterior o siguiente ordenada por fecha de publicaci\u00f3n, es posible que desee utilizar el campo &#8216;post_id&#8217;.<\/p>\n<h3>Comentarios<\/h3>\n<p>Yu: \u00abGenial, el azar es realmente bueno. Tambi\u00e9n es mejor asegurarse de que el aleatorio est\u00e9 relacionado con la publicaci\u00f3n actual. Pero esto no suele ser un gran problema siempre que el blog sea para un solo g\u00e9nero.<\/p>\n<p>Adem\u00e1s, el orden por RAND() funciona bien para miles de registros. (suele ser el caso de un blog normal). Pero quemar\u00e1 su base de datos si tiene millones de registros en la misma tabla que coinciden con los criterios de b\u00fasqueda&quot;.<\/p>\n<p>S\u00ed, el <strong>orden SQL por rand()<\/strong> es un poco complicado y lento. Necesita recuperar todos los registros y ordenarlos aleatoriamente. Se considera de baja eficiencia cuando el tama\u00f1o de la mesa es mediano o grande. Es posible que desee utilizar el siguiente truco para obtener un registro aleatorio de una manera m\u00e1s r\u00e1pida empleando la funci\u00f3n <strong>rand()<\/strong> en 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>Las causas de l\u00edmite<\/strong> de SQL especifican el desplazamiento y el segundo par\u00e1metro especifica la cantidad de registros que se deben obtener.<\/p>\n<h3>Mejor registro aleatorio<\/h3>\n<p>De acuerdo con lo anterior, el <strong>orden por rand()<\/strong> es extremadamente ineficiente si tiene una tabla muy grande porque para la clasificaci\u00f3n (incluso si solo desea un elemento), se invocar\u00e1 la funci\u00f3n <strong>rand()<\/strong> y eso es lo que no hacemos. desear. Podemos mejorar lo anterior usando dos consultas, la primera devuelve el n\u00famero total de publicaciones, y tenemos una funci\u00f3n aleatoria de PHP y obtenemos el registro aleatorio usando la declaraci\u00f3n de <strong>l\u00edmite<\/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\">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>Agregue una pr\u00f3xima publicaci\u00f3n aleatoria en la plantilla de p\u00e1gina de 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":[892,892,716,716,831,1110,800,800,831,840,840,861,861],"tags":[1172],"class_list":{"0":"post-233257","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codigo","9":"category-desarrollador","11":"category-guia-para-principiantes","12":"category-n-a","13":"category-php-2","16":"category-tutoriales","18":"category-wordpress-2","20":"tag-affiai-es"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233257","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=233257"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233257\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224094"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}