web-dev-qa-db-ja.com

"現在の" wp_postsのみを抽出するSQLクエリ?

Wp_postsテーブルには、同一のもの、非常によく似ているものの異なるものと思われるものがすべて含まれているようです。

私はSQLに多少慣れていますが、WordPressには慣れていません。一般向けサイトに表示されるレコードだけを抽出する必要があります。最新のリビジョンだけで、すべての上位の行ではありません。フィールドをフィルタリングする方法がわからない。明らかにもっと複雑なことがあります。

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

これは「重複」しており、いくつかのものを見逃しているようです。

7
John Mee

最初からクエリを構築するのではなく、API関数が使用されている場合にWordPressが正確に何をクエリしているのかを確認する方が簡単です。

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

var_dump( $wpdb->last_query );

以下のSQLを与えます。

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

Wordpressがここで重い作業をするので、これを使うべきです:

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

Query_posts /に引数を追加することについてもっと学びましょう http://codex.wordpress.org/Class_Reference/WP_Query

手動のMYSQLクエリを作成するときには、Wordpressデータベースクラスも使用する必要があります。あなたはここでより多くを学ぶことができます: http://codex.wordpress.org/Class_Reference/wpdb Wordpressはまたあなたの操作を安全に保つために質問でデータをエスケープするための素晴らしい機能を含みます。

あなたはこのようにWordpressのdbクラスを使うことができます:

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

テーブル名の前に$ wpdb->を使用すると、割り当てられたデータベースプレフィックスが先頭に追加されます。テーブルプレフィックスを使用して1つのデータベースに複数のWordpressをインストールできるため、これは重要です。 $ wpdb->は正しいプレフィックスコンテキストをつかみます。

0
Brian Fegter