J'écris un plugin qui prend un flux XML et le publie dans WordPress à l'aide de wp-cron
Tout fonctionne bien, sauf que les nouveaux messages continuent d'être ajoutés.
Donc, je travaille sur un système pour vérifier si un poste de ce titre existe déjà.
J'ai écrit ça, mais ça revient toujours 'existe déjà'
global $wpdb;
$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_title = %s', $article->heading);
$wpdb->query( $query );
if ( $wpdb->num_rows ) {
error_log('already exists');
} else {
wp_insert_post($post, $wp_error);
}
Je suis assez nouveau pour travailler avec le côté base de données de WordPress et j'ai vu le $wpdb
lorsque je cherchais de l'aide. Maintenant, je n’ai défini cela nulle part, mais l’endroit que je lisais semble suggérer qu’il a été construit.
Toute aide appréciée!
Merci
Oui $wpdb
est intégré et chargé par WordPress Core à chaque chargement de page.
Je ne vois pas de problème critique avec votre code. Je vais suggérer des améliorations parce que je vois des endroits où les choses pourraient mal se passer, mais surtout, cela devrait fonctionner. Cela me fait penser que $article->heading
ne correspond pas au post_title
inséré. Alors...
Essayez de normaliser votre titre avec sanitize_title_with_dashes
qui est la façon dont WordPress construit le slug de publication, puis recherchez plutôt ce slug.
global $wpdb;
$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_name = %s', sanitize_title_with_dashes($article->heading));
$cID = $wpdb->get_var( $query );
Votre requête recherche maintenant post_name
, qui est le slug ou le lien permanent, et j'ai changé $wpdb->query
en $wpdb->get_var
puisque vous recherchez une seule variable, que nous enregistrons en $cID
.
Utilisez un meilleur chèque pour votre conditionnel.
if ( !empty($cID) ) {
Cependant, cela pourrait ne pas être la bonne approche du tout. Recherchez l'API XML_RPC mentionnée par @kaiser. Il a des capacités post-insertion .
<?php post_exists( "post_name" ); ?>
https://developer.wordpress.org/reference/functions/post_exists/