{"id":233245,"date":"2023-02-10T16:21:00","date_gmt":"2023-02-10T13:21:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233245"},"modified":"2022-11-10T20:05:46","modified_gmt":"2022-11-10T17:05:46","slug":"laegg-till-ett-naesta-slumpmaessigt-inlaegg-i-wordpress-sidmall-med-hjaelp-av-sql","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/laegg-till-ett-naesta-slumpmaessigt-inlaegg-i-wordpress-sidmall-med-hjaelp-av-sql\/","title":{"rendered":"L\u00e4gg till ett n\u00e4sta slumpm\u00e4ssigt inl\u00e4gg i WordPress sidmall med hj\u00e4lp av SQL"},"content":{"rendered":"\n<p>Du kan ofta f\u00e5 r\u00e5d om hur du kan f\u00f6rb\u00e4ttra SEO (Search Engine Optimization) genom att l\u00e4gga till l\u00e4nkar till dina tidigare inl\u00e4gg n\u00e4r du publicerar ett nytt inl\u00e4gg. Detta hj\u00e4lper till att \u00f6ka trafiken och det fungerar p\u00e5 samma s\u00e4tt som plugins som &quot;Relative Posts&quot;, men bara enklare.<\/p>\n<p>Alla wordpress-inl\u00e4gg lagras i tabell t.ex. <strong>wp_posts<\/strong> och i denna tabell hittar <strong>du post_title<\/strong>, <strong>post_name<\/strong> och dessa kolumner \u00e4r ganska enkla. Beroende p\u00e5 konfigurationerna av dina inl\u00e4ggswebbadresser kan du ha olika format av permal\u00e4nkar som kan konfigureras i avsnittet Inst\u00e4llningar \u2013 Permanl\u00e4nk.<\/p>\n<p>F\u00f6ljande PHP-kod kan infogas i din sidmall, normalt <strong>single.php<\/strong> som \u00e4r mallen f\u00f6r ett inl\u00e4gg eller <strong>page.php<\/strong> f\u00f6r sidmall.<\/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>\u00c4ndra <strong>wp_posts d\u00e4refter<\/strong> eftersom detta kan variera lite. SQL-fr\u00e5gan returnerar ett slumpm\u00e4ssigt inl\u00e4gg d\u00e4r det exkluderar sidorna, eller menu_items, l\u00e4nkar etc. Och inl\u00e4ggets status ska publiceras vilket exkluderar utkastet. Gr\u00e4nsen <strong>1<\/strong> returnerar endast 1 inl\u00e4gg. S\u00e5 om du vill ha ett tidigare inl\u00e4gg kan du \u00f6verv\u00e4ga att \u00e4ndra detta till <strong>limit 2<\/strong>.<\/p>\n<p>Permal\u00e4nken p\u00e5 min sida \u00e4r baserad p\u00e5 <strong>post_name<\/strong> som \u00e4r mer SEO-v\u00e4nlig. Du kan v\u00e4l anpassa detta. SQL-fr\u00e5gan kan ocks\u00e5 anpassas. Du kanske till exempel vill returnera relevanta inl\u00e4gg ist\u00e4llet f\u00f6r slumpm\u00e4ssiga inl\u00e4gg genom att matcha <code>title<\/code>v\u00e4rdet enligt det aktuella inl\u00e4ggets titel. Eller om du verkligen vill returnera dess f\u00f6reg\u00e5ende eller n\u00e4sta inl\u00e4gg sorterat efter publiceringsdatum, kanske du vill anv\u00e4nda f\u00e4ltet &#8217;post_id&#8217;.<\/p>\n<h3>Kommentarer<\/h3>\n<p>Yu \u2013 &quot;Cool, random \u00e4r riktigt trevligt. Det \u00e4r ocks\u00e5 b\u00e4ttre att se till att den slumpm\u00e4ssiga \u00e4r relaterad till det aktuella inl\u00e4gget. Men detta brukar inte vara en stor fr\u00e5ga s\u00e5 l\u00e4nge bloggen \u00e4r f\u00f6r en enskild genre.<\/p>\n<p>Ocks\u00e5 best\u00e4llningen av RAND() fungerar bra f\u00f6r tusentals poster. (vanligtvis fallet f\u00f6r en vanlig blogg). Men det kommer att br\u00e4nna din databas om du har miljontals poster i samma tabell som matchar s\u00f6kkriterierna.&quot;<\/p>\n<p>Ja, SQL- <strong>ordningen efter rand()<\/strong> \u00e4r lite knepig och l\u00e5ngsam. Den m\u00e5ste h\u00e4mta alla poster och sorteras slumpm\u00e4ssigt. Det anses vara l\u00e5g effektivitet n\u00e4r storleken p\u00e5 bordet \u00e4r medelstort eller stort. Du kanske vill anv\u00e4nda f\u00f6ljande knep f\u00f6r att f\u00e5 en slumpm\u00e4ssig post p\u00e5 ett snabbare s\u00e4tt genom att anv\u00e4nda funktionen <strong>rand()<\/strong> i 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>SQL- <strong>gr\u00e4nsen<\/strong> orsaker anger offset och den andra parametern anger antalet poster som ska h\u00e4mtas.<\/p>\n<h3>B\u00e4ttre Random Record<\/h3>\n<p>Enligt ovanst\u00e5ende \u00e4r <strong>ordningen efter rand()<\/strong> extremt ineffektiv om du har en mycket stor tabell eftersom f\u00f6r sorteringen (\u00e4ven om du bara vill ha ett objekt) kommer <strong>rand()-<\/strong> funktionen att anropas och det \u00e4r vad vi inte g\u00f6r. vilja. Vi kan f\u00f6rb\u00e4ttra ovanst\u00e5ende genom att anv\u00e4nda tv\u00e5 fr\u00e5gor, den f\u00f6rsta returnerar det totala antalet inl\u00e4gg, och vi har en PHP slumpm\u00e4ssig funktion och f\u00e5r den slumpm\u00e4ssiga posten genom att anv\u00e4nda <strong>limit<\/strong> &#8211; satsen.<\/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\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u00e4gg till ett n\u00e4sta slumpm\u00e4ssigt inl\u00e4gg i WordPress sidmall<\/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":[901,724,838,848,901,1110,807,807,838,848,724,868,868],"tags":[1173],"class_list":{"0":"post-233245","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koda","8":"category-utvecklaren","9":"category-guide-foer-nyboerjare","10":"category-handledningar","12":"category-n-a","13":"category-php-9","18":"category-wordpress-9","20":"tag-affiai-sv"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233245"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233245\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/224094"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}