web-dev-qa-db-fra.com

Vérifier si le post du titre existe déjà

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

5
rogy

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 .

2
s_ha_dum
0
Altef four