Wie bearbeite ich mySQL wp_posts Tabelle von Plugin php?

Ich muss ein Plugin ändern, das der Tabelle wp_posts Einträge hinzufügt. Momentan fehlt es daran, dass es einige (andere) pluginspezifische Spalten nicht anvisieren kann. Ich bemühe mich, das Plugin zu bearbeiten, damit ich diese Spalten auch mit dem Plugin ändern kann.

Wie würde ich generell auf diese Tabelle zielen und dann Einträge erstellen / bearbeiten?

Ich denke an so etwas wie diesen Pseudocode:

function editTable() { $table = getTable(wp_posts); $tableRow = table.row(1234); $tableRow.column(1234) = "new data entry"; } 

Ich nehme an, dies ist möglich, weil das Plugin, das ich ändern möchte, Änderungen an der Tabelle wp_posts vornimmt. Ich stelle jedoch fest, dass mein Pseudocode weit weg sein könnte. Wie mache ich das?

Solutions Collecting From Web of "Wie bearbeite ich mySQL wp_posts Tabelle von Plugin php?"

Es gibt zwei Möglichkeiten, die mir bekannte wp_posts Tabelle zu bearbeiten. Die erste ist mit den functionen wp_update_post() und wp_insert_post() . Dies sind typische WP-functionen, die wie alle anderen verwendet werden. Sie müssen nur die richtigen Parameter übergeben. Beispielsweise:

 $my_post = array( 'ID' => $updatePostID, // User defined variable; the post id you want to update. 'post_title' => 'Update Title', 'post_content' => 'Update Content', ); // Update the post into the database $post_id = wp_update_post( $my_post, true ); // Returns 0 if no error; returns post id if there was an error. // Check if table was updated without error. For debugging. Remove from your code if it all works, before publishing. if (is_wp_error($post_id)) { $errors = $post_id->get_error_messages(); foreach ($errors as $error) { echo $error; } } 

Übergeben Sie einfach ein Array mit den vordefinierten Feldnamen an die functionen und diese werden dann korrekt ausgeführt. Die Update-function ist natürlich für Updates gedacht und die Insert-function erzeugt neue Tabelleneinträge (Zeilen). Es gibt jedoch eine Einschränkung. Diese beiden functionen funktionieren nur auf den vordefinierten WP-Feldern. Wenn Ihre Tabelle also einige benutzerdefinierte Felder enthält, müssen Sie die class $wpdb .

Die andere Möglichkeit, Ihre mySQL-Tabellen aus WordPress zu aktualisieren, besteht darin, die class $wpdb direkt zu verwenden. Diese class ist weit umfangreicher als die functionen wp_update_post() und wp_insert_post() . Der erste Unterschied besteht darin, dass viele andere mySQL-Tabellen bearbeitet werden können, nicht nur die Tabelle wp_posts . Es kann auch Nicht-WP-Felder bearbeiten. Beispielsweise:

 global $wpdb; // This calls the use of the class. I actually do not think this is necessary, but I do it anyway. $dbresult = $wpdb->update($wpdb->posts, // Returns 0 if no errors. Post ID if errors occurred. // Notice posts instead of wp-posts. Prefixes are not necessary with this class. ['post_title' => 'Update Title', 'post_content' => 'Update Content', 'custom_field' => $customField, ], // User defined table column and variable. ['ID' => $updatePostID, ]); // User defined variable; the post id. if (false === $dbresult) { echo 'An error occurred while updating...'; $errors = $post_id->get_error_messages(); } 

Ich bin mit keiner dieser Optionen sehr vertraut, aber es scheint einen massiven Unterschied in der Breite der functionalität zu geben, so dass es Überlegungen geben kann, bevor Sie eine über die andere verwenden. Ich habe zu diesem Zweck eine Frage gestellt: Was macht wp_update_post (), dass die class $ wpdb nicht tut? Eine Antwort sagt:

Die Nachteile von $wpdb sind, dass Sie SQL kennen müssen und Sie müssen sich der normalen Datenbereinigung bewusst sein und wann prepare() und welche functionen Ihre Aussage bereits vorbereiten, welche kaum Nachteile haben. Die $wpdb class ist von Natur aus leistungsstärker als die Standard-WordPress-functionen, da Sie Zugriff auf alle Daten haben, $wpdb Sie das richtige SQL zum Abrufen, Ändern oder Entfernen kennen.

TL; DR $wpdb ist leistungsfähiger, aber weniger freundlich und errorsverzeihend.

Das macht Sinn für mich. Im Grunde tüfteln Sie nicht mit $ wpdb, wenn Sie nicht wissen, was Sie tun oder unbedingt tun müssen.