Advertisement
EurenikZ

MigrateBlogToWordPress Script

Nov 19th, 2023 (edited)
855
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.56 KB | None | 0 0
  1. <?php
  2.  
  3. /*
  4. 1. "wp_posts" leeren
  5. 2. "wp_term_relationships" leeren
  6. 3. "wp_comments" leeren
  7. 4. "wp_term_taxonomy" importieren
  8. 5. "wp_terms" importieren
  9. 6. Script aufrufen
  10. 7. Blog aufrufen
  11. */
  12.  
  13. /*
  14. EINSTELLUNGEN START
  15. Tabellen und Spalten müssen im Script entsprechend angepasst werden.
  16. */
  17.  
  18. $domain = 'MeinBlog.tld';
  19.  
  20. // Verbindung zur alten Datenbank herstellen
  21. $oldDb = new mysqli('localhost', 'BENUTZERNAME_HIER', 'PASSWORT_HIER', 'DATENBANK_HIER');
  22.  
  23. // Verbindung zur neuen Datenbank herstellen
  24. $newDb = new mysqli('localhost', 'BENUTZERNAME_HIER', 'PASSWORT_HIER', 'DATENBANK_HIER');
  25.  
  26. /*
  27. EINSTELLUNGEN ENDE
  28. */
  29.  
  30. // Überprüfen, ob die Verbindungen erfolgreich waren
  31. if ($oldDb->connect_error || $newDb->connect_error) {
  32.     die('Verbindungsfehler: ' . $oldDb->connect_error . ' | ' . $newDb->connect_error);
  33. }
  34.  
  35. // SQL-Abfrage für den Datenbanktransfer
  36. $query = "SELECT * FROM tipps";
  37. $result = $oldDb->query($query);
  38.  
  39. // Überprüfen, ob die Abfrage erfolgreich war
  40. if (!$result) {
  41.     die('Abfragefehler: ' . $oldDb->error);
  42. }
  43.  
  44. $i_blog = 0;
  45. $i_comments = 0;
  46.  
  47. // Blog-Beiträge migrieren
  48. while ($row = $result->fetch_assoc()) {
  49.     $i_blog++;
  50.     // Inhalte ersetzen und formatieren
  51.     $postTitle = mysqli_real_escape_string($newDb, $row['titel']);
  52.     $postContent = mysqli_real_escape_string($newDb, $row['inhalt']);
  53.     $postDate = date('Y-m-d H:i:s', $row['datum']);
  54.     $postModified = date('Y-m-d H:i:s', $row['lastedit']);
  55.     $postAuthor = 1;
  56.  
  57.     // Weitere Inhalte generieren
  58.     $postName = strtolower(str_replace(
  59.         ['--', 'ß', 'ä', 'ü', 'ö', 'Ä', 'Ü', 'Ö'],
  60.         ['-','ss','ae','ue','oe','ae','ue','oe'],
  61.         preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(
  62.             ' ',
  63.             '-',
  64.             str_replace('&', 'und', str_replace(
  65.                 '&amp;',
  66.                 'and',
  67.                 str_replace(
  68.                     ' / ',
  69.                     '-',
  70.                     str_replace(
  71.                         '.',
  72.                         '-',
  73.                         str_replace(
  74.                             ' – ',
  75.                             '-',
  76.                             str_replace(
  77.                                 ' - ',
  78.                                 '-',
  79.                                 str_replace(
  80.                                     '+',
  81.                                     'plus',
  82.                                     $postTitle
  83.                                 )
  84.                             )
  85.                         )
  86.                     )
  87.                 )
  88.             )
  89.         ))
  90.     )));
  91.  
  92.     $guid = 'https://'.strtolower($domain).'/?p=' . $row['id'];
  93.  
  94.     // SQL-Abfrage für den Datenbankeinfügung in die neue Tabelle wp_posts
  95.     $insertQuery = "INSERT INTO wp_posts (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count)
  96.                    VALUES (NULL, $postAuthor, '$postDate', '$postDate', '$postContent', '$postTitle', '', 'publish', 'open', 'open', '', '$postName', '', '', '$postModified', '$postModified', '', 0, '$guid', 0, 'post', '', 0)";
  97.  
  98.     // Überprüfen, ob die Abfrage erfolgreich war
  99.     if (!$newDb->query($insertQuery)) {
  100.         die('Fehler beim Einfügen: ' . $newDb->error);
  101.     }
  102.  
  103.     // Kategorie-ID aus der alten Tabelle "tipps"
  104.     $alteKategorieId = $row['kategorie_id'];
  105.  
  106.     // Neue Kategorie-ID in "wp_terms" um 1 erhöhen
  107.     $neueKategorieId = $alteKategorieId + 1;
  108.  
  109.     // SQL-Abfrage für den Datenbankeinfügung in die neue Tabelle wp_term_relationships
  110.     $insertTermRelationshipsQuery = "INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
  111.                                    VALUES (LAST_INSERT_ID(), $neueKategorieId, 0)";
  112.  
  113.     // Überprüfen, ob die Abfrage erfolgreich war
  114.     if (!$newDb->query($insertTermRelationshipsQuery)) {
  115.         die('Fehler beim Einfügen in wp_term_relationships: ' . $newDb->error);
  116.     }
  117.  
  118.     // SQL-Abfrage für die Aktualisierung der count-Spalte in wp_term_taxonomy
  119.     $updateTermTaxonomyQuery = "UPDATE wp_term_taxonomy SET count = count + 1 WHERE term_id = $neueKategorieId";
  120.  
  121.     // Überprüfen, ob die Abfrage erfolgreich war
  122.     if (!$newDb->query($updateTermTaxonomyQuery)) {
  123.         die('Fehler beim Aktualisieren von wp_term_taxonomy: ' . $newDb->error);
  124.     }
  125. }
  126.  
  127. // Kommentare migrieren
  128. // SQL-Abfrage für die Kommentare in comments
  129. $commentsQuery = "SELECT * FROM comments ORDER BY datum ASC";
  130. $commentsResult = $oldDb->query($commentsQuery);
  131.  
  132. // SQL-Abfrage für die Antworten in comments_answers
  133. $answersQuery = "SELECT * FROM comments_answers ORDER BY datum ASC";
  134. $answersResult = $oldDb->query($answersQuery);
  135.  
  136. // Antworten in ein Array umwandeln
  137. $answersArray = array();
  138. while ($answerRow = $answersResult->fetch_assoc()) {
  139.     $answersArray[] = $answerRow;
  140. }
  141.  
  142. // Schleife für Kommentare
  143. while ($commentRow = $commentsResult->fetch_assoc()) {
  144.     $i_comments++;
  145.     // Inhalte formatieren
  146.     $commentPostID = $commentRow['tipp_id'];
  147.     $commentAuthor = mysqli_real_escape_string($newDb, $commentRow['name']);
  148.     $commentDate = date('Y-m-d H:i:s', $commentRow['datum']);
  149.     $commentContent = mysqli_real_escape_string($newDb, $commentRow['kommentar']);
  150.     $commentEmail = $commentRow['email'];
  151.  
  152.     // SQL-Abfrage für den Datenbankeinfügung in die neue Tabelle wp_comments
  153.     $insertCommentQuery = "INSERT INTO wp_comments (comment_post_ID, comment_author, comment_date, comment_date_gmt, comment_content, comment_author_email, comment_approved, comment_type, comment_parent, user_id)
  154.                           VALUES ($commentPostID, '$commentAuthor', '$commentDate', '$commentDate', '$commentContent', '$commentEmail', 1, 'comment', 0, $user_id)";
  155.  
  156.     // Überprüfen, ob die Abfrage erfolgreich war
  157.     if (!$newDb->query($insertCommentQuery)) {
  158.         die('Fehler beim Einfügen von Kommentaren: ' . $newDb->error);
  159.     }
  160.  
  161.     // Schleife für Antworten
  162.     foreach ($answersArray as $answerRow) {
  163.         // Wenn die Antwort zur aktuellen Kommentar-ID gehört
  164.         if ($answerRow['comment_id'] == $commentRow['id']) {
  165.             // Inhalte formatieren
  166.             $answerPostID = $answerRow['tipp_id'];
  167.             $answerAuthor = mysqli_real_escape_string($newDb, $answerRow['name']);
  168.             $answerDate = date('Y-m-d H:i:s', $answerRow['datum']);
  169.             $answerContent = mysqli_real_escape_string($newDb, $answerRow['antwort']);
  170.             $answerEmail = $answerRow['email'];
  171.  
  172.             // SQL-Abfrage für den Datenbankeinfügung in die neue Tabelle wp_comments für Antworten
  173.             $insertAnswerQuery = "INSERT INTO wp_comments (comment_post_ID, comment_author, comment_date, comment_date_gmt, comment_content, comment_author_email, comment_approved, comment_type, comment_parent, user_id)
  174.                                 VALUES ($answerPostID, '$answerAuthor', '$answerDate', '$answerDate', '$answerContent', '$answerEmail', 1, 'comment', LAST_INSERT_ID(), $user_id)";
  175.  
  176.             // Überprüfen, ob die Abfrage erfolgreich war
  177.             if (!$newDb->query($insertAnswerQuery)) {
  178.                 die('Fehler beim Einfügen von Antworten: ' . $newDb->error);
  179.             }
  180.         }
  181.     }
  182. }
  183.  
  184. // Verbindungen schließen
  185. $oldDb->close();
  186. $newDb->close();
  187.  
  188. echo 'Migration abgeschlossen! '.$i_blog.' Blog-Beiträge und '.$i_comments.' Kommentare wurden migriert.';
  189. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement