{"id":234193,"date":"2023-02-10T16:19:00","date_gmt":"2023-02-10T13:19:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234193"},"modified":"2022-11-11T23:43:01","modified_gmt":"2022-11-11T20:43:01","slug":"ajouter-une-publication-aleatoire-suivante-dans-le-modele-de-page-wordpress-a-laide-de-sql","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/ajouter-une-publication-aleatoire-suivante-dans-le-modele-de-page-wordpress-a-laide-de-sql\/","title":{"rendered":"Ajouter une publication al\u00e9atoire suivante dans le mod\u00e8le de page WordPress \u00e0 l&rsquo;aide de SQL"},"content":{"rendered":"\n<p>Vous pouvez souvent obtenir des conseils sur l&rsquo;am\u00e9lioration du r\u00e9f\u00e9rencement (optimisation pour les moteurs de recherche) en ajoutant des liens vers vos messages pr\u00e9c\u00e9dents lorsque vous publiez un nouveau message. Cela aide \u00e0 augmenter le trafic et fonctionne de la m\u00eame mani\u00e8re que les plugins tels que &quot;Relative Posts&quot;, mais en plus simple.<\/p>\n<p>Tous les messages wordpress sont stock\u00e9s dans une table, par exemple <strong>wp_posts<\/strong> et \u00e0 l&rsquo;int\u00e9rieur de cette table, vous trouverez <strong>post_title<\/strong>, <strong>post_name<\/strong> et ces colonnes sont assez simples. Selon les configurations de vos URL de publication, vous pouvez avoir diff\u00e9rents formats de permaliens qui peuvent \u00eatre configur\u00e9s dans la section Param\u00e8tres &#8211; Lien permanent.<\/p>\n<p>Le code PHP suivant peut \u00eatre ins\u00e9r\u00e9 dans votre mod\u00e8le de page, normalement <strong>single.php<\/strong> qui est le mod\u00e8le de publication unique ou <strong>page.php<\/strong> pour le mod\u00e8le de page.<\/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>Modifiez <strong>wp_posts<\/strong> en cons\u00e9quence car cela peut varier un peu. La requ\u00eate SQL renvoie une publication al\u00e9atoire o\u00f9 elle exclut les pages, ou les \u00e9l\u00e9ments de menu, les liens, etc. Et le statut de la publication doit \u00eatre publi\u00e9, ce qui exclut le brouillon. La <strong>limite 1<\/strong> ne renvoie qu&rsquo;un seul message. Donc, si vous voulez un article pr\u00e9c\u00e9dent, vous pouvez envisager de le modifier pour <strong>limiter 2<\/strong>.<\/p>\n<p>Le lien permanent sur mon site est bas\u00e9 sur le <strong>post_name<\/strong> qui est plus convivial pour le r\u00e9f\u00e9rencement. Vous pourriez bien personnaliser cela. La requ\u00eate SQL peut \u00e9galement \u00eatre personnalis\u00e9e. Par exemple, vous souhaiterez peut-\u00eatre renvoyer des publications pertinentes au lieu de publications al\u00e9atoires en faisant correspondre la <code>title<\/code>valeur en fonction du titre de la publication actuelle. Ou vous voulez vraiment retourner son message pr\u00e9c\u00e9dent ou suivant tri\u00e9 par date de publication, vous pouvez utiliser le champ &lsquo;post_id&rsquo;.<\/p>\n<h3>commentaires<\/h3>\n<p>Yu \u2013 \u00ab\u00a0Cool, le hasard est vraiment sympa. Assurez-vous \u00e9galement que le message al\u00e9atoire est li\u00e9 au message actuel. Mais ce n&rsquo;est g\u00e9n\u00e9ralement pas un gros probl\u00e8me tant que le blog est destin\u00e9 \u00e0 un seul genre.<\/p>\n<p>De plus, la commande par RAND() fonctionne correctement pour des milliers d&rsquo;enregistrements. (g\u00e9n\u00e9ralement le cas pour un blog normal). Mais cela br\u00fblera votre base de donn\u00e9es si vous avez des millions d&rsquo;enregistrements dans la m\u00eame table qui correspondent aux crit\u00e8res de recherche.&quot;<\/p>\n<p>Oui, l&rsquo; <strong>ordre SQL par rand()<\/strong> est un peu d\u00e9licat et lent. Il doit r\u00e9cup\u00e9rer tous les enregistrements et les trier de mani\u00e8re al\u00e9atoire. Il est consid\u00e9r\u00e9 comme peu efficace lorsque la taille de la table est moyenne ou grande. Vous pouvez utiliser l&rsquo;astuce suivante pour obtenir un enregistrement al\u00e9atoire plus rapidement en utilisant la fonction <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>Les causes de limite<\/strong> SQL sp\u00e9cifient le d\u00e9calage et le second param\u00e8tre sp\u00e9cifie le nombre d&rsquo;enregistrements \u00e0 extraire.<\/p>\n<h3>Meilleur enregistrement al\u00e9atoire<\/h3>\n<p>D&rsquo;apr\u00e8s ce qui pr\u00e9c\u00e8de, l&rsquo; <strong>ordre par rand()<\/strong> est extr\u00eamement inefficace si vous avez une tr\u00e8s grande table car pour le tri (m\u00eame si vous ne voulez qu&rsquo;un seul \u00e9l\u00e9ment), la fonction <strong>rand()<\/strong> sera invoqu\u00e9e et c&rsquo;est ce que nous ne faisons pas vouloir. Nous pouvons am\u00e9liorer ce qui pr\u00e9c\u00e8de en utilisant deux requ\u00eates, la premi\u00e8re renvoie le nombre total de messages, et nous avons une fonction al\u00e9atoire PHP et obtenons l&rsquo;enregistrement al\u00e9atoire en utilisant l&rsquo; instruction <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\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ajouter un prochain article al\u00e9atoire dans le mod\u00e8le de page 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":[893,893,717,717,832,1110,801,801,832,841,841,862,862],"tags":[1167],"class_list":{"0":"post-234193","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-code-2","9":"category-developpeur","11":"category-guide-pour-les-debutants","12":"category-n-a","13":"category-php-3","16":"category-tutoriels","18":"category-wordpress-3","20":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234193"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234193\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224094"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}