{"id":1664,"date":"2023-03-19T14:21:28","date_gmt":"2023-03-19T13:21:28","guid":{"rendered":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1664"},"modified":"2023-03-19T14:54:09","modified_gmt":"2023-03-19T13:54:09","slug":"inhaltsverzeichnis-revisited-wg-php-8-und-sauber-als-shortcode","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2023\/03\/19\/inhaltsverzeichnis-revisited-wg-php-8-und-sauber-als-shortcode\/","title":{"rendered":"Inhaltsverzeichnis revisited: wg PHP 8 und sauber als Shortcode"},"content":{"rendered":"<p>Ich hab mir schon vor Jahren ein Inhaltsverzeichnis f\u00fcr meine WordPress-Webseiten gebastelt, das hatte ich damals mit PHP Code for Posts realisiert. Jetzt bei der Umstellung auf PHP 8 f\u00e4llt es auf die Nase, ich musste es also eh noch mal \u00fcberarbeiten. Es war ein relativ kleines Problem: ich hab in den Funktionsaufrufen f\u00fcr die Ausgabe pro Buchstabe keine Hochkommata f\u00fcr den Parameter dringehabt, das sah so aus:<\/p>\n<pre>BuchstabenAusgabe(A);<\/pre>\n<p>PHP 8 h\u00e4tte es aber gern so:<\/p>\n<pre>BuchstabenAusgabe(\"A\");<\/pre>\n<p>Bei der Gelegenheit hab ich es gleich in einen Shortcode gepackt und den Aufruf der Ausgabe mit einem Array gel\u00f6st, und weils so sch\u00f6n geklappt hat gehen wir es hier mal im Galopp nochmal durch.<\/p>\n<p>Als Erstes kommt der Plugin-Header und die Definition des Shortcodes:<\/p>\n<pre><code>\/*\r\nPlugin Name: Inhaltsverzeichnis\r\nPlugin URI: http:\/\/localhost\/zum-schwarzen-pinguin\/wp-content\/plugins\/inhaltsverzeichnis\r\nDescription: Erzeugt einen Shortcode [el_inhaltsverzeichnis] , der ein Inhaltsverzeichnis aller ver\u00f6ffentlichten Beitr\u00e4ge aus der Tabelle posts erstellt\r\nVersion: 3.0\r\nAuthor: Evi Leu\r\nAuthor URI: http:\/\/www.evileu.de\r\n*\/\r\nadd_shortcode( 'el_inhaltsverzeichnis', 'el_inhaltsverzeichnis_handler_function' );<\/code><\/pre>\n<pre>function el_inhaltsverzeichnis_handler_function(){\r\necho \"&lt;h2&gt;Inhaltsverzeichnis&lt;\/h2&gt;\";...<\/pre>\n<p>Dann rufe ich die Funktion zur buchstabenweisen Ausgabe mit Hilfe eines Arrays f\u00fcr das Alfabet auf:<\/p>\n<pre>\/\/Array mit Alfabet erzeugen\r\n$alphas = range('A', 'Z');\r\n\r\n\/\/Durch alfabet durchsteppen\r\nforeach($alphas as $letter){\r\n\/\/Alle Beitr\u00e4ge zu einem Buchstaben ausgeben\r\nBuchstabenAusgabe(\"$letter\");\r\n}<\/pre>\n<p>Mit dem Buchstaben gehe ich in die Tabelle posts und hole mir die passenden Eintr\u00e4ge heraus. Daraus wird eine Liste mit Links erzeugt, das geht sch\u00f6n mit der guid.<\/p>\n<pre>function BuchstabenAusgabe($aktBuchstabe){\r\nglobal $wpdb;\r\n\r\n\/\/Beginn Originalcode\r\n$table_name = $wpdb-&gt;prefix . 'posts';\r\n\r\n\/\/Datens\u00e4tze z\u00e4hlen &amp; Ausgabe Anzahl\r\n\r\n$count_query = \"select count(*) from $table_name where post_status='publish' and post_type = 'post' and post_title like '$aktBuchstabe%'\";\r\n$num = $wpdb-&gt;get_var($count_query);\r\n\r\n\/\/Ausgabe nur wenn auch Datens\u00e4tze vorhanden sind\r\nif ($num&gt;0) { \r\necho \"&lt;h2&gt;$aktBuchstabe:&amp;nbsp\".$num.\"&amp;nbsp Beitr\u00e4ge&lt;\/h2&gt;\";\r\n\r\n\/\/Alle Datens\u00e4tze vom Typ post und published ausgeben\r\n\r\n$alleposts = $wpdb-&gt;get_results( \"SELECT post_title, \r\npost_status, post_type,\r\nguid FROM $table_name\r\nwhere post_status='publish' and post_type = 'post' and post_title like '$aktBuchstabe%'\r\norder by post_title\");\r\n\r\nforeach ( $alleposts as $einpost ) \r\n{ \r\necho '&lt;a href=\"', $einpost-&gt;guid, '\/\",\"&gt;', $einpost-&gt;post_title, '&lt;\/a&gt;&lt;\/br&gt;';\r\n\r\n}\r\n\r\n} \/\/Ende if Anzahl gr\u00f6sser Null\r\n\/\/Ende Originalcode\r\n}\/\/ende function BuchstabenAusgabe\r\n<\/pre>\n<p>Das wars schon, Shortcode an beliebiger Stelle einsetzen und schwupps hat man ein sch\u00f6nes Inhaltsverzeichnis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich hab mir schon vor Jahren ein Inhaltsverzeichnis f\u00fcr meine WordPress-Webseiten gebastelt, das hatte ich damals mit PHP Code for Posts realisiert. Jetzt bei der Umstellung auf PHP 8 f\u00e4llt es auf die Nase, ich musste es also eh noch mal \u00fcberarbeiten. Es war ein relativ kleines Problem: ich hab in den Funktionsaufrufen f\u00fcr die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,11,7,4,8,63,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1664"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=1664"}],"version-history":[{"count":5,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1664\/revisions"}],"predecessor-version":[{"id":1669,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1664\/revisions\/1669"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}