Hallo Netcupler,
Heute benötige ich mal wieder eure Hilfe um ein kleines Problem in den Griff zu bekommen. Ich habe ein Webhosting (4000er) und ein VPS (500er) da beim Webhosting das Wordpress immer langsamer wurde und die Datenbank Queries immer länger gebraucht haben, dachte ich mir setz doch mal schnell auf dem leeren VPS500 eine MariaDB Docker auf und guck wie schnell die Seite dann ist. Hat auch gut funktioniert und die Seite ist um EINIGES schneller geworden. Jetzt kommen wir aber zum Problem:
Auf der Wordpress Seite verwende ich Beaver Builder, um einen Beitrag / Seite zu duplizieren hat Beaver Builder dafür eine Funktion, wenn ich diese ausführe wird die Seite auch erstellt aber leider werden in der Datenbank einige KB's von wichtigen Daten geschluckt oder kommen da eben nicht an. Ich hab mir die Funktion dann mal angeschaut.
Was passiert:
Original Beitrag (ID 3838) fl_builder_data:
Duplizierter Beitrag (ID 3935) (auch beim zweiten duplizieren, wieder 36270 Zeichen)
Also habe ich es mit einem anderen Beitrag erneut versucht (Ausgang ca. 100.000 Zeichen, nach dem duplizieren dann 36.807 Zeichen). Also verschluckt er irgendwo beim Senden oder Empfangen die Zeichen.
Die Funktion:
static public function duplicate_post() {
global $wpdb;
$post_id = self::get_post_id();
$post = get_post( $post_id );
$current_user = wp_get_current_user();
$template_id = false;
// Duplicate the post.
$data = array(
'comment_status' => $post->comment_status,
// **Gekürzt ...***
);
// Get the new post id.
$new_post_id = wp_insert_post( $data );
// Duplicate post meta.
$post_meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $post_id ) );
if ( count( $post_meta ) !== 0 ) {
$sql = "INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) ";
foreach ( $post_meta as $meta_info ) {
$meta_key = $meta_info->meta_key;
if ( '_fl_builder_template_id' == $meta_key ) {
$meta_value = self::generate_node_id();
} else {
$meta_value = addslashes( $meta_info->meta_value );
}
$sql_select[] = "SELECT {$new_post_id}, '{$meta_key}', '{$meta_value}'";
}
$sql .= implode( ' UNION ALL ', $sql_select );
// @codingStandardsIgnoreStart
$wpdb->query($sql);
// @codingStandardsIgnoreEnd
}
// **Gekürzt ...***
Alles anzeigen
Also eigentlich was ganz einfaches, erstelle einen neuen Beitrag und lese die "postmeta" Daten aus und füge sie dem neuen Beitrag hinzu.
So, dann hab ich mir eine Testseite erstellt, um zu gucken ob er die vollständige postmeta ausließt:
$post_meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $post_id ) );
Zieht alle postmeta Daten richtig aus der Datenbank, die Zeichen passen (116.430)
Also schauen wir mal ob die Daten gesendet werden (in der foreach hab ich folgendes eingebaut:)
echo('postID: '.$new_post_id.'<br> meta_key: '.$meta_key.'<br> metavalue_len: '.strlen($meta_value).'<br>');
Siehe da, auch hier werden die Daten komplett angezeigt und die Länge passt überein.
Also dachte ich mir, eventuell irgendwo Probleme, dass der mariadb Server nicht mehr wie 32kb an Daten annimmt (LONGTEXT ist richtig gesetzt -> bis 4GB), hab dann eine Datenbank angelegt und die 116.430 Zeichen an die Datenbank geschickt. Hier kommen die Daten ohne Probleme in voller Länge an.
Frage:
Fällt euch noch was ein, wo die Daten verloren gehen können ? Oder hab ich gerade einen groben Denkfehler.