wake-up-neo.net

Einfügen von Post-Meta aus SQL

Ich versuche, Post-Meta durch $ wpdb zu ersetzen und auf Probleme zu stoßen. Ich habe funktionierendes SQL, kann es aber nicht zum Laufen bringen, wenn ich es für mein WP Plugin codiere.

Zusätzliche Anmerkung:

Das gespeicherte Post-Meta ist beispielsweise die Anzahl der Twitter-Follower, für die ich die Nummer in der Datenbank speichern muss, damit ich das Ergebnis in eine Tabelle exportieren kann

Hier ist mein Arbeits-SQL. Wenn ich das in PHPmyAdmin schreibe, werden alle Post-Metas aktualisiert:

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT wp_posts.ID, 'agency_details_seo_grade', 'test'
FROM wp_posts
WHERE wp_posts.post_status = 'publish' and wp_posts.post_type = 'agencies'";

Hier ist mein fehlgeschlagener Versuch, es in WP zu setzen. Als Ergebnis ist nichts passiert (kein Meta geändert und keine Fehlermeldung):

// Failed attempt to put into functions.php
function add_grading_post_meta() {
    global $wpdb;
    $wpdb->prepare("SELECT ID,'','test2'", $wpdb->query("INSERT INTO wp_postmeta ($post_id,meta_key,meta_value)"));
}

Ich versuche, dies zum Laufen zu bringen, damit ich es mit wp_cron verwenden kann, bevor ich es mit Planungsfunktionen WP benutze. Für jede Hilfe in diesem ersten Schritt wäre ich dankbar, wenn Sie viele Stunden mit diesem Projekt verbringen könnten, in dem Sie PHP lernen.

Bearbeiten:

Hier ist eine weitere Version, die ich ohne Erfolg ausprobiert habe. Ich habe es aufgrund eines @ czerspalace-Kommentars geändert, der vom alten Stack Exchange-Post bereitgestellt wird.

function add_grading_post_meta() {
    global $wpdb;

    $Twitter_followers = 'agency_details_Twitter_followers';
    $Twitter_count = 'test3';

    $sql = "INSERT INTO $wpdb->wp_postmeta (post_id,meta_key,meta_value) VALUES   (%d,'%s',%s) ON DUPLICATE KEY UPDATE meta_value = %s";
    $sql = $wpdb->prepare($sql,$post_id,$Twitter_followers,$Twitter_count);
    $wpdb->query($sql);
}
1
Julian Flynn

Eigentlich wäre die übliche Methode, dies in WordPress zu tun, die Verwendung von <?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?> gemäß dem Codex: https://codex.wordpress.org/Function_Reference/update_post_meta . Es ergibt einen kürzeren Code und die Absicht des Codes ist klarer.

1
adelval

Ihre Verwendung von $wpdb->prepare ist sehr fehlerhaft. Ich weiß ehrlich gesagt nicht einmal genau, welche Abfrage Sie erhalten möchten. Der Code ist so kaputt, dass ich nicht einmal ableiten kann, was Sie versuchen. Ich vermute jedoch, dass Sie so etwas wollen:

$post_id = 1;
$key = 'abc';
$value = 'def';
$qry = "INSERT INTO wp_postmeta (post_id,meta_key,meta_value) VALUES (%d,%s,%s)";
$qry = $wpdb->prepare(
  $qry,
  $post_id,
  $key,
  $value
);
var_dump($qry);
$wpdb->query($qry);

Beachten Sie, was passiert. Sie erstellen einen "Format" -String mit Platzhaltern für Ihre dynamischen Daten. Dann übergeben Sie das durch prepare zusammen mit den Ersetzungszeichenfolgen für die Platzhalter und erhalten eine Zeichenfolge zurück, die durch query gesendet wird.

0
s_ha_dum