{"id":1620,"date":"2023-03-14T15:48:50","date_gmt":"2023-03-14T14:48:50","guid":{"rendered":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1620"},"modified":"2023-03-14T15:48:52","modified_gmt":"2023-03-14T14:48:52","slug":"stichwortverzeichnis-der-shortcode","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2023\/03\/14\/stichwortverzeichnis-der-shortcode\/","title":{"rendered":"Stichwortverzeichnis: der Shortcode"},"content":{"rendered":"\n<p>In WordPress einen Shortcode zu erzeugen ist recht einfach. Man f\u00fcgt einfach folgenden Code ein:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/**********************Beginn Shortcode erzeugen\nadd_shortcode( 'shortcode_name', 'shortcode_handler_function' );\n\nfunction shortcode_handler_function(){\n\techo \"Ich bin dein Shortcode\";\n\t}\n\n\/\/***************End Shortcode erzeugen<\/code><\/pre>\n\n\n\n<p>Jetzt an beliebiger Stelle in einem Beitrag oder auf einer Seite das K\u00fcrzel [shortcode_name] einf\u00fcgen und hoffen dass es funkt&#8230; ich hab da \u00f6fter eine JSON-Fehlermeldung, die sich durch ab- und wieder anmelden oder Plugin neu aktivieren beheben liess, aber nicht immer. WordPress kann auch sehr zickig sein wenn man versucht einen Shortcode umzubenennen, da gibts gern mal chaotische Fehlermeldungen. Sei&#8217;s drum. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Ich habe mich daf\u00fcr entschieden ein eigenes Plugin f\u00fcr die Erzeugung des Shortcodes zu erstellen, dann hab ich den Code sauber getrennt und tu mir leichter mit dem Fehlerkorrigieren. Der Shortcode soll die CSV-Datei mit den Stichworten zeilenweise einlesen und in ein Array schreiben, daraus basteln wir dann das alfabetisch sortierte Stichwortverzeichnis mit den Links. Wie ich das mit der Unterseite l\u00f6se wei\u00df ich noch nicht, da hei\u00dfts design as you go \ud83d\ude42<\/p>\n\n\n\n<p>Aber jetzt wollen wir mal. <\/p>\n\n\n\n<p>Zuerst mal m\u00fcssen wir unsere CSV-Datei einlesen und den Inhalt auf eine Array-Variable legen. Das geht zum Beispiel so:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/Variable f\u00fcr Liste bereitstellen\r\n\t$listenarray = array();\t\r\n\t\r\n\t\/\/csv-Datei einlesen\r\n\t$listenarray=csv_einlesen();<\/code><\/pre>\n\n\n\n<p>Die Funktion csv_einlesen sieht dann so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function csv_einlesen(){\r\n\t\r\n\t\/\/Verzeichnis ermitteln\r\n\t$dir = plugin_dir_path( __FILE__ );\r\n\t$aktVerzeichnis = $dir;\r\n\t\r\n\t\/\/Der Name der CSV-Datei ist fest verdrahtet, das w\u00e4re nice to have anders\r\n\t$neuName = $aktVerzeichnis.'stichwortliste.csv';\r\n\techo \"Lese aus Datei \".$neuName.\"&lt;\/br>\";\r\n\t\r\n\t\/\/Array anlegen\r\n\t$aktListe = array();\r\n\t\r\n\t\r\n\/\/ Datei \u00f6ffnen, $handle ist der Dateizeiger\r\n$handle = fopen ($neuName,'r');\r\n\/\/Solange nicht EOF erreicht, 1000 ist die maximale Zeilenl\u00e4nge\r\nwhile (($csv_array = fgetcsv ($handle, 1000)) !== FALSE ) {\r\n\r\n  foreach ($csv_array as $index) {\r\n    \/\/echo $index . '&lt;br>';\r\n\t\/\/Hier kommt der Knackpunkt: Neues Stichwort in Array schreiben\r\n\t\t  \/\/***********************************\r\n\t\t  array_push($aktListe, $index);\r\n\t\t  \/\/***********************************\r\n  }\r\n}\r\n\r\nfclose($handle);\r\n\r\n\/\/Debug-Ausgabe\r\necho \"Array eingelesen, Anzahl der W\u00f6rter: \".sizeof($aktListe).\"&lt;\/br>\";\r\n\r\n\r\nreturn $aktListe;\t\r\n\t\r\n}\/\/Ende csv_einlesen<\/code><\/pre>\n\n\n\n<p>Das ist jetzt nicht weiter tragisch, der Witz ist dass das Array mit den eingelesenen Stichw\u00f6rtern als R\u00fcckgabewert der Funktion dient. Damit k\u00f6nnen wir weiterarbeiten.<\/p>\n\n\n\n<p>Als n\u00e4chstes bauen wir ein sch\u00f6nes, alfabetisch geordnetes Stichwortverzeichnis auf, dazu brauchen wir zun\u00e4chst mal ein Array mit allen Buchstaben des Alphabets. Durch das steppen wir durch und geben die Stichworte aus, wenn sie mit dem richtigen Buchstaben anfangen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/Stichworte Alfabetisch gruppiert ausgeben\n\t\n\t\/\/Array mit Alfabet erzeugen\n\t$alphas = range('A', 'Z');\n\n\t\/\/Durch alfabet durchsteppen\n\tforeach($alphas as $letter){\n\t\t\n\t\t\n\t\techo \"&lt;h2>Buchstabe \".$letter.\"&lt;\/h2>&lt;\/br>\";\n\t\t\n\t\t\/\/Nur einf\u00fcgen, wenn mit dem richtigen Buchstaben anf\u00e4ngt\n\t\tforeach($listenarray as $einwort)\n\t\t{\n\t\t\t\n\t\t\t$hilf = substr($einwort,0,1);\n\t\t\t\n\t\t\t\n\t\t\tif ($hilf == $letter){\n\t\t\t\t\t\t\n\t\t\t\techo $einwort.\"&lt;\/br>\";\n\/\/************************************************To Do: Link erzeugen\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t}\/\/ende for each buchstabe<\/code><\/pre>\n\n\n\n<p>Dann h\u00f6rts aber auf. Ich suche noch nach einer eleganten M\u00f6glichkeit, die Liste als Links zu formatieren, die dann eine Unterseite aufmachen. Auf der Unterseite sollen nat\u00fcrlich alle Rezepte zum gew\u00e4hlten Stichwort angezeigt werden. Das funktioniert, solange ich eine statische Seite generiere und deren URL fest verdrahtet mitgebe, der Code f\u00fcr den Link sieht dann so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo '&lt;a href=\"', \"http:\/\/localhost:819\/inselfisch-kochbuch\/alle-eintraege-zu-stichwort\/?stichwort=$einwort'\",' \",\">', $einwort, '&lt;\/a>&lt;\/br>';\t<\/code><\/pre>\n\n\n\n<p>Das ist jetzt aber nicht der Weisheit letzter Schluss, fest verdrahtete Dateinamen sind ganz, ganz schlechter Stil. Da muss ich mir was anderes einfallen lassen. Ich hab jetzt mal eine Anfrage im deutschen WordPress-Forum gestartet, mal schauen ob da was dabei rauskommt. Einstweilen: einen frischen Kaffee!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In WordPress einen Shortcode zu erzeugen ist recht einfach. Man f\u00fcgt einfach folgenden Code ein: Jetzt an beliebiger Stelle in einem Beitrag oder auf einer Seite das K\u00fcrzel [shortcode_name] einf\u00fcgen und hoffen dass es funkt&#8230; ich hab da \u00f6fter eine JSON-Fehlermeldung, die sich durch ab- und wieder anmelden oder Plugin neu aktivieren beheben liess, aber [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1620"}],"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=1620"}],"version-history":[{"count":2,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1620\/revisions"}],"predecessor-version":[{"id":1622,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1620\/revisions\/1622"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}