{"id":897,"date":"2018-02-24T17:19:28","date_gmt":"2018-02-24T16:19:28","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=897"},"modified":"2018-03-19T17:12:36","modified_gmt":"2018-03-19T16:12:36","slug":"beitraege-aus-wordpress-holen-einige-vorueberlegungen","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/02\/24\/beitraege-aus-wordpress-holen-einige-vorueberlegungen\/","title":{"rendered":"Beitr\u00e4ge aus WordPress holen: einige Vor\u00fcberlegungen"},"content":{"rendered":"<p>Nochmal kurz als Ged\u00e4chtnisst\u00fctze: wir brauchen eigentlich nur drei Felder, und zwar:<\/p>\n<pre>$article-&gt;title\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = 'This is my super cool title!';\r\n$article-&gt;alias\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = JFilterOutput::stringURLSafe('This is my super cool title!');\r\n$article-&gt;introtext\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = '&lt;p&gt;This is my super cool article!&lt;\/p&gt;';<\/pre>\n<p>Den title k\u00f6nnen wir straight aus der wp_contents \u00fcbernehmen, das ist der post_title. F\u00fcr den alias bietet sich das Feld post_name an, der w\u00e4re auch schon URLsafe. Und der introtext kommt aus dem Feld post_content. Sieht doch schon mal ganz gut aus.<\/p>\n<h2>Was nicht gehen wird<\/h2>\n<p>So leid es mir tut, aber Bilder und Links k\u00f6nnen wir leider nicht \u00fcbernehmen, die m\u00fcssen wir vor dem Import rausputzen. Warum? Ganz einfach, weil sich beide auf eine spezifische URL beziehen, die wir in Joomla nicht nachstellen k\u00f6nnen. Nochmal kurz zur Erinnerung, ein im Beitragseditor eingef\u00fcgtes Bild sieht im Quelltext so aus:<\/p>\n<div id=\"attachment_898\" style=\"width: 762px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-898\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-898\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/caption_screenshot.jpg\" alt=\"caption_screenshot\" width=\"752\" height=\"54\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/caption_screenshot.jpg 752w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/caption_screenshot-300x22.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/caption_screenshot-624x45.jpg 624w\" sizes=\"(max-width: 752px) 100vw, 752px\" \/><p id=\"caption-attachment-898\" class=\"wp-caption-text\">caption_screenshot<\/p><\/div>\n<p>Mit dem caption-Shortcode kann Joomla nat\u00fcrlich auch nix anfangen, der muss raus. Mit dem Link gehts uns nicht viel anders, wenn der so aussieht:<\/p>\n<div id=\"attachment_899\" style=\"width: 675px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-899\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-899\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ahref_screenshot.jpg\" alt=\"ahref_screenshot\" width=\"665\" height=\"38\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ahref_screenshot.jpg 665w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ahref_screenshot-300x17.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ahref_screenshot-624x36.jpg 624w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><p id=\"caption-attachment-899\" class=\"wp-caption-text\">ahref_screenshot<\/p><\/div>\n<p>&#8230;muss eigentlich der ganze Tag weg bis auf den Text &#8222;Haferflockenm\u00fcsli a la Oma&#8220;, mal sehen ob wir das hinkriegen.<\/p>\n<h2>Was drinbleiben kann<\/h2>\n<p>Ich geh mal nur vom Inselfisch-Kochbuch aus, da muss jeder sehen, wie das bei ihm selber aussieht und die Ersetzungen ggf. anpassen. Ich hab nicht so sehr viele Formatierungen verwendet, das sind eigentlich nur die \u00dcberschriften h1&#8230;maximal h4, ab und zu mal eine nummerierte oder unnummerierte Liste, und gelegentlich ein &lt;strong&gt;, das kann alles drinbleiben. Shortcodes oder auch Gallerys oder sowas hab ich gar nicht verwendet, da muss nix passieren. Downloadlinks haben wir gar keine, und auch keine Gimmicks wie Slider oder sowas, das habe ich im Zuge der barrierefreien Restrukturierung alles eliminiert &#8211; gute Sache! Jetzt ist n\u00e4mlich nur noch relativ sauberer HTML-Code im post_content \u00fcbrig, den man in den meisten F\u00e4llen \u00fcbernehmen k\u00f6nnen wird.<\/p>\n<h2>Zuerst mal: Export aus WordPress<\/h2>\n<p>Ich zieh mir\u00a0 nur die oben genannten drei Felder post_title, post_content und post_name ab, Kriterien post_type = post und post_status = publish. Nachgedanke: die ID nehmen wir auch noch mit, die ist ja unique und macht uns im phpmyadmin das Leben leichter. Davon nehm ich mal nur eine Handvoll Datens\u00e4tze zum Testen, nicht gleich alle \u00fcber 300. Die schiebe ich in eine neue MySQL-Tabelle\u00a0 und dann frisch ans Werk!<\/p>\n<h2>Nicht konvertierbare Tags rausschmeissen<\/h2>\n<p>Den caption-Shortcode mitsamt dem img-Tag werden wir so los:<\/p>\n<div id=\"attachment_967\" style=\"width: 573px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-967\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-967\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/replace_caption.jpg\" alt=\"replace_caption\" width=\"563\" height=\"72\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/replace_caption.jpg 563w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/replace_caption-300x38.jpg 300w\" sizes=\"(max-width: 563px) 100vw, 563px\" \/><p id=\"caption-attachment-967\" class=\"wp-caption-text\">replace_caption<\/p><\/div>\n<p>Sorry, das gibts nur als Screenshot weil WordPress den Sourcecode verhunzt hat! Das ist \u00fcbrigens nicht auf meinem Mist gewachsen, das hat Tante Google hergegeben &#8211; sehr praktisch.<\/p>\n<p>Ebenso k\u00f6nnen wir dank fleissigen googlens die alt-Tags entfernen, aber den Linktext stehen lassen:<\/p>\n<pre>$text = preg_replace('#&lt;a.*?&gt;(.*?)&lt;\/a&gt;#i', '\\1', $text);<\/pre>\n<p>Das wars aber auch schon mit den Bereinigungen! Die ganzen &lt;h<strong>x<\/strong>&gt; und so weiter k\u00f6nnen stehenbleiben, wir wollen ja die \u00dcberschriftsformatierungen und all das mitnehmen.<\/p>\n<h2>Testausgabe mit der PHP Bridge<\/h2>\n<p>Ich hab mir ein Miniformular gebastelt, das nur aus einem &#8222;absenden&#8220; Button besteht, und zum Testen in die if (isset($_POST[&#8218;absenden&#8216;])){&#8230;} Bedingung\u00a0 folgenden Code gepackt:<\/p>\n<p>$db = JFactory::getDBO();<\/p>\n<p>$query = &#8222;SELECT * FROM 00_rohdaten where id = 224;&#8220;;<br \/>\n$db-&gt;setQuery($query);<\/p>\n<p>$result = $db-&gt;query();<br \/>\n$results = $db-&gt;loadObjectList();<\/p>\n<p>foreach ($results as $zeile) :<br \/>\necho $zeile-&gt;id;<br \/>\necho $zeile-&gt;titel;<br \/>\n$text = $zeile-&gt;content;<\/p>\n<p>\/\/caption-shortcode mitsamt img-tag weg<br \/>\n$text = preg_replace(&#8218;\/\\\\.*\\\\[.caption\\\\]\/&#8216;, &#8220;, $text);<\/p>\n<p>\/\/a href weg, Linktext stehen lassen<br \/>\n$text = preg_replace(&#8218;#&lt;a.*?&gt;(.*?)&lt;\/a&gt;#i&#8216;, &#8218;\\1&#8216;, $text);<\/p>\n<p>\/\/bereinigten text ausgeben<br \/>\necho $text;<br \/>\n\/\/echo $zeile-&gt;content;<br \/>\necho &#8222;&lt;br&gt;&#8220;;<br \/>\nendforeach;<br \/>\nIn den Select muss nat\u00fcrlich der richtige Tabellenname rein, und die ID des Datensatzes, den man zum Testen ausgeben m\u00f6chte. In der Foreach-Schleife werden dann die Ersetzungen f\u00fcr den Content ausgef\u00fchrt und das Endergebnis ausgegeben, so hat man eine ganz gute Kontrolle dar\u00fcber, wie der importierte Datensatz in Joomla aussehen wird.<\/p>\n<h2>Und wie gehts jetzt weiter?<\/h2>\n<p>Ich tendiere dazu, mir die bereinigten Rohdaten in eine separate Tabelle schreiben zu lassen, und aus dieser dann die Import-Logik zu f\u00fcttern. Aber dar\u00fcber muss ich noch ein wenig nachdenken, und dann gibts einen neuen Beitrag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nochmal kurz als Ged\u00e4chtnisst\u00fctze: wir brauchen eigentlich nur drei Felder, und zwar: $article-&gt;title\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = &#8218;This is my super cool title!&#8216;; $article-&gt;alias\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = JFilterOutput::stringURLSafe(&#8218;This is my super cool title!&#8216;); $article-&gt;introtext\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = &#8218;&lt;p&gt;This is my super cool article!&lt;\/p&gt;&#8216;; Den title k\u00f6nnen wir straight aus der wp_contents \u00fcbernehmen, das ist der post_title. F\u00fcr den alias bietet sich das [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[37,28,7,4,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/897"}],"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=897"}],"version-history":[{"count":11,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/897\/revisions"}],"predecessor-version":[{"id":968,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/897\/revisions\/968"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}