web-dev-qa-db-fra.com

Insertion de Post Meta From SQL

J'essaie de mettre à jour/remplacer les méta-posts de post par $ wpdb et de rencontrer des problèmes. Je travaille avec SQL, mais je ne peux pas le faire fonctionner lors du codage de mon plugin WP.

Note supplémentaire:

Le méta de publication en cours est, par exemple, le nombre d'abonnés Twitter, il me faut enregistrer le nombre dans la base de données pour pouvoir exporter le résultat dans un tableau.

Voici mon SQL de travail. Quand je mets ceci dans PHPmyAdmin, il met à jour toutes les méta de post:

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'";

Voici ma tentative infructueuse de le mettre dans WP. Rien ne s'est passé comme résultat (pas de méta modifiée ni de message d'erreur):

// 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)"));
}

J'essaie de faire en sorte que cela fonctionne afin de pouvoir l'utiliser avec wp_cron avant la prochaine étape d'utilisation avec les fonctions de planification WP. Toute aide serait la bienvenue pour cette première étape, ce qui nous aurait coûté de nombreuses heures sur ce projet d’apprentissage de PHP.

Modifier:

Voici une version de plus que j'ai essayée sans succès. Je l'ai changé en raison du commentaire @czerspalace, codage fourni par l'ancien poste Stack Exchange.

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

En fait, la manière habituelle de faire cela dans WordPress serait d'utiliser <?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?> selon le codex: https://codex.wordpress.org/Function_Reference/update_post_meta . Cela donne un code plus court, et l'intention du code est plus claire.

1
adelval

Votre utilisation de $wpdb->prepare est très cassée. Honnêtement, je ne sais même pas exactement quelle requête vous essayez d’obtenir. Le code est tellement cassé que je ne peux même pas déduire ce que vous essayez de faire. Cependant, je suppose que vous voulez quelque chose comme ça:

$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);

Remarquez ce qui se passe. Vous créez une chaîne "format" avec des espaces réservés pour vos données dynamiques. Ensuite, vous transmettez cela par prepare avec les chaînes de remplacement pour les espaces réservés, puis récupérez une chaîne qui est envoyée par query.

0
s_ha_dum