web-dev-qa-db-fra.com

Requête SQL pour extraire uniquement le "courant" wp_posts?

La table wp_posts semble conserver toutes les révisions de la même chose, très similaire mais vraisemblablement différente, posts/pages/que ce soit.

Je connais un peu SQL mais pas WordPress. Je dois extraire uniquement les enregistrements qui figureraient sur le site public; donc juste la révision la plus récente, et pas toutes les lignes remplacées. Vous ne savez pas comment filtrer les champs. Évidemment, quelque chose de plus compliqué que:

select *
from wp_posts
where post_status in ('publish','revision')
order by post_modified desc

qui a des "doublons" et semble manquer quelque chose.

7
John Mee

Plutôt que de construire une requête à partir de rien, il est plus facile de voir ce qu'est exactement une requête WordPress lorsque la fonction API est utilisée:

get_posts(array(
             'numberposts' => -1,
         ));

var_dump( $wpdb->last_query );

Donne SQL suivant:

SELECT wp_posts.* FROM wp_posts 
WHERE 1=1 
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC
9
Rarst

Vous devriez utiliser ceci comme Wordpress fait le gros du travail ici:

$args = array(
    'showposts' => 10,
);
$posts = query_posts();
var_dump($posts);

Vous en apprendrez plus sur l’ajout d’arguments à query_posts http://codex.wordpress.org/Class_Reference/WP_Query

Vous devez également utiliser la classe de base de données Wordpress lors de la création de requêtes MYSQL manuelles. Vous pouvez en apprendre plus ici: http://codex.wordpress.org/Class_Reference/wpdb Wordpress comprend également une fonction très utile pour échapper des données dans les requêtes afin de protéger votre opération: esc_sql ($ string);

Vous pouvez utiliser la classe Wordpress db comme ceci:

global $wpdb;
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish'");

Utiliser $ wpdb-> avant votre nom de table ajoute le préfixe de base de données attribué. Ceci est important car vous pouvez avoir plusieurs installations Wordpress dans une base de données en utilisant les préfixes de table. $ wpdb-> va récupérer le contexte de préfixe correct.

0
Brian Fegter