Je rencontre un réel problème lors de la mise à jour d'une table de base de données à l'aide de champs personnalisés avancés dans un type de publication personnalisé.
J'ai une table dans la base de données appelée "wp_company_profiles" avec les champs "adresse_1" et "adresse_2", et j'ai deux champs personnalisés avancés configurés avec les mêmes valeurs. J'essaie de mettre en place un crochet qui mettra à jour les champs de la table lorsqu'un message particulier sera mis à jour.
Vous trouverez ci-dessous le code que j'utilise, mais je ne comprends pas pourquoi cela ne fonctionnera pas.
function update_company_profile($post_ID) {
global $wpdb;
if ($parent_id = wp_is_post_revision( $post_id )) $post_ID = $parent_id;
$address_1 = get_post_meta($post_ID, 'address_1', true);
$address_2 = get_post_meta($post_ID, 'address_2', true);
$sql = $wpdb->query("UPDATE wp_company_profiles SET
address_1 = '{$address_1}',
address_2 = '{$address_2}',
WHERE pid = {$post_ID}");
$wpdb->query($sql);
}
add_action('save_post', 'update_company_profile');
Vous exécutez la requête deux fois et transmettez le résultat de la première requête à la seconde requête. Essayez ceci. Vous pouvez également envisager d'utiliser la fonction de mise à jour de wpdb au lieu d'exécuter une requête arbitraire, car il ne semble pas que vous procédiez à une purification des données ou à des contrôles de non-conformité. Si vous souhaitez interroger, vous devez utiliser prepare.
function update_company_profile($post_ID) {
global $wpdb;
if ($parent_id = wp_is_post_revision( $post_id )) $post_ID = $parent_id;
$address_1 = get_post_meta($post_ID, 'address_1', true);
$address_2 = get_post_meta($post_ID, 'address_2', true);
$sql = $wpdb->prepare("UPDATE wp_company_profiles SET
address_1 = '%s',
address_2 = '%s',
WHERE pid = %d", $address_1, $address_2, $post_ID);
$wpdb->query($sql);
}
add_action('save_post', 'update_company_profile');