[WordPressのカスタマイズ] 関数リファレンスのサイトが遅いので保存しておく get_posts編

ワードプレスの関数を調べたいけど、なぜか

http://wpdocs.sourceforge.jp/関数リファレンス

のサイトは重いですよね。

それで、コピーをしておきます。

スポンサーリンク

get posts

get_postsはメインクエリーに影響を与えないが、複数のnew WP_Queryを使用するほうが好ましい。

get_posts は WP_Query を使用しているから?のようです。

query_posts も WP_Query を使用していますが、グローバル変数 $wp_query を書き換えてメインループを直接変更しているので、使う場合は注意のようです。

★get_postsとwp_queryの違い

get_posts()は、指定していないパラメーター引数のディフォルト値も返り値としてもつようです。
一方、query_posts()とWP_Queryの場合は、明示的に指定したパラメーター引数しか持っていないようです。

点線部分は引用です。


get_posts の最も適切な使い方は、パラメータに基づいて投稿データを作成することです。最近の投稿あるいはパラメータに一致した投稿を取得します。複数のループを作成するのに get_posts を使用する事もできます。ただしこの場合は new WP_Query を使用して WP_Query を直接参照するほうが好ましいでしょう。
get_pages とパラメータが似ていますが実装方法はかなり異なっており、適切に使う必要があります。get_posts は WP_Query を使用していますが、get_pages はデータベースに直接クエリを投げます。それぞれ実装の差異を反映したパラメータになっています。
query_posts も WP_Query を使用していますが、グローバル変数 $wp_query を書き換えてメインループを直接変更しているので、使う場合は注意してください。一方、get_posts は新しい WP_Query オブジェクトを参照するため、メインループに影響を与えません。


使い方

get_postsに変数を与えてそれをsetup_postadaでセットするようです。

最後は、wp_reset_postdata()しないといけないようです。


    5, 'offset'=> 1, 'category' => 1 ); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
 5,
    'offset'           => 0,
    'category'         => '',
    'orderby'          => 'post_date',
    'order'            => 'DESC',
    'include'          => '',
    'exclude'          => '',
    'meta_key'         => '',
    'meta_value'       => '',
    'post_type'        => 'post',
    'post_mime_type'   => '',
    'post_parent'      => '',
    'post_status'      => 'publish',
    'suppress_filters' => true ); ?>

使えるパラメータ

WP Queryを内部で使用している?ので同じのようです。

http://wpdocs.sourceforge.jp/Class_Reference/WP_Query


パラメータ

投稿者パラメータ

ある投稿者に関連付けられた投稿を表示する。

  • author (int) – ユーザーID。
  • author_name (string) – ‘ニックネーム‘ (ユーザー名ではなく)。
  • author__in (array) – ユーザーID (バージョン 3.7以降で利用可能)。
  • author__not_in (array) – ユーザーID (バージョン 3.7以降で利用可能)。

ひとりの投稿者の投稿を表示する

ユーザーIDを用いて、ある投稿者の記事を表示する場合:

$query = new WP_Query( 'author=123' );

'user_nicename'を用いて、ある投稿者の記事を表示する場合:

$query = new WP_Query( 'author_name=rami' );

複数の投稿者の投稿を表示する

複数の、特定の投稿者の記事を表示する場合:

$query = new WP_Query( 'author=2,6,17,38' );

ある投稿者による記事を除外する

‘-‘(マイナス)記号をユーザーIDの頭につけることで、あるひとりの投稿者による記事を除く、すべての記事を表示できます:

$query = new WP_Query( 'author=-12' );

複数の投稿者を扱う

複数の投稿者の記事を表示する:

$query = new WP_Query( array( 'author__in' => array( 2, 6 ) ) );

以下の方法で複数の投稿者を除外することもできます:

$query = new WP_Query( array( 'author__not_in' => array( 2, 6 ) ) );

カテゴリーパラメータ

あるカテゴリーに関連付けられた投稿を表示する。

  • cat (int) – use category id.
  • category_name (string) – use category slug (NOT name).
  • category__and (array) – use category id.
  • category__in (array) – use category id.
  • category__not_in (array) – use category id.

1つのカテゴリの記事を表示

カテゴリIDを使用して、そのカテゴリ(さらにそのカテゴリの子カテゴリ)に属する記事を表示:

$query = new WP_Query( 'cat=4' );

カテゴリスラッグを使用して、そのカテゴリ(さらにそのカテゴリの子カテゴリ)に属する記事を表示:

$query = new WP_Query( 'category_name=staff' );

複数のカテゴリから記事を表示

カテゴリIDを使用して、それらのカテゴリに属する記事を表示:

$query = new WP_Query( 'cat=2,6,17,38' );

カテゴリスラッグを使用して、それらのカテゴリに属する記事を表示:

$query = new WP_Query( 'category_name=staff,news' );

カテゴリに属する記事を除外

IDに’-‘(マイナス記号)が付いたカテゴリの記事を除くすべての記事を表示:

$query = new WP_Query( 'cat=-12,-34,-56' );

複数カテゴリの扱い

複数のカテゴリに属する記事を表示。下記はカテゴリID 2と6の両方に属する記事を表示します:

$query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );

カテゴリID 2または6の記事を表示するには、前述の cat か、または category__in(これらのカテゴリの子カテゴリの記事は表示されないことに注意してください)を使うことで実現します:

$query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) );

下記の方法で、複数のカテゴリの記事を除外することもできます:

$query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );

タグパラメータ

あるタグに関連付けられた投稿を表示する。

  • tag (string) – use tag slug.
  • tag_id (int) – use tag id.
  • tag__and (array) – use tag ids.
  • tag__in (array) – use tag ids.
  • tag__not_in (array) – use tag ids.
  • tag_slug__and (array) – use tag slugs.
  • tag_slug__in (array) – use tag slugs.

1つのタグの記事を表示

タグのスラッグを使って、このタグを持つ記事を表示:

$query = new WP_Query( 'tag=cooking' );

タグのIDを使って、このタグを持つ記事を表示:

$query = new WP_Query( 'tag_id=13' );

複数のタグから記事を表示

これらのいずれかのタグを持つ記事を表示:

$query = new WP_Query( 'tag=bread,baking' );

これらのすべてのタグを持つ記事を表示:

$query = new WP_Query( 'tag=bread+baking+recipe' );

複数タグの扱い

タグID 37 と 47 の両方にタグ付けられた記事を表示:

$query = new WP_Query( array( 'tag__and' => array( 37, 47 ) ) );

タグID 37 と 47 いずれかの記事を表示するには、前述の tag か、もしくは tag__in を使って明示的に特定することで実現します:

$query = new WP_Query( array( 'tag__in' => array( 37, 47 ) ) );

タグID 37 と 47 、2つのタグのいずれも持たない記事を表示:

$query = new WP_Query( array( 'tag__not_in' => array( 37, 47 ) ) );

The tag_slug__in and tag_slug__and behave much the same, except match against the tag’s slug.

タクソノミーパラメータ

あるタクソノミーに関連付けられた投稿を表示する。

  • {tax} (string) – use taxonomy slug. Deprecated as of Version 3.1 in favor of ‘tax_query‘.
  • tax_query (array) – use taxonomy parameters (available with Version 3.1).
    • taxonomy (string) – Taxonomy.
    • field (string) – Select taxonomy term by (‘id’ or ‘slug’)
    • terms (int/string/array) – Taxonomy term(s).
    • operator (string) – Operator to test. Possible values are ‘IN’, ‘NOT IN’, ‘AND’.

Important Note: tax_query takes an array of tax query arguments arrays (it takes an array of arrays) – you can see this in the second example below. This construct allows you to query multiple taxonomies by using the relation parameter in the first (outer) array to describe the boolean relationship between the taxonomy queries.

Simple Taxonomy Query:

Display posts tagged with ‘bob’, under ‘people’ custom taxonomy:

$query = new WP_Query( array( 'people' => 'bob' ) );

Display posts tagged with ‘bob’, under ‘people’ custom taxonomy, using ‘tax_query':

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'people',
            'field' => 'slug',
            'terms' => 'bob'
        )
    )
);
$query = new WP_Query( $args );

Multiple Taxonomy Handling:

Display posts from several custom taxonomies:

$query = new WP_Query( array( 'people' => 'bob', 'language' => 'english' ) );

Display posts from several custom taxonomies, using ‘tax_query':

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'movie_janner',
            'field' => 'slug',
            'terms' => array( 'action', 'commedy' )
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

Display posts that are in the ‘quotes’ category OR have the ‘quote’ format:

$args = array(
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => array( 'quotes' )
        ),
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array( 'post-format-quote' )
        )
    )
);
$query = new WP_Query( $args );

投稿&固定ページパラメータ

投稿および固定ページに基づいてコンテンツを表示する。

  • p (int) – use post id.
  • name (string) – use post slug.
  • page_id (int) – use page id.
  • pagename (string) – use page slug.
  • post_parent (int) – use page id. Return just the child Pages.
  • post__in (array) – use post ids. Specify posts to retrieve.
  • post__not_in (array) – use post ids. Specify post NOT to retrieve.

Show Post/Page by ID

Display post by ID:

$query = new WP_Query( 'p=7' );

Display page by ID:

$query = new WP_Query( 'page_id=7' );

Show Post/Page by Slug

Display post by slug:

$query = new WP_Query( 'name=about-my-life' );

Display page by slug:

$query = new WP_Query( 'pagename=contact' );

Show Child Posts/Pages

Display child page using the slug of the parent and the child page, separated by a slash (e.g. ‘parent_slug/child_slug’):

$query = new WP_Query( 'pagename=contact_us/canada' );

Display child pages using parent page ID:

$query = new WP_Query( 'post_parent=93' );

Multiple Posts/Pages Handling

Display only the specify posts:

$query = new WP_Query( array( 'post__in' => array( 2, 5, 12, 14, 20 ) ) );

Display all posts but NOT the specified ones:

$query = new WP_Query( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );

Note: you cannot combine ‘post__in’ and ‘post__not_in’ in the same query.

タイプ&ステータスパラメータ

ある投稿タイプまたは投稿ステータスに関連付けられた投稿を表示する。

  • post_type (string / array) – 投稿を[[投稿タイプ]によって取得する。デフォルト値は ‘post‘。’tax_query‘ がクエリーにセットされている場合、デフォルト値は ‘any‘ になります。
    • post‘ – 投稿。
    • page‘ – 固定ページ。
    • revision‘ – 履歴 (リビジョン) 。
    • attachment‘ – an attachment. The default WP_Query sets ‘post_status’=>’published’, but attachments default to ‘post_status’=>’inherit’ so you’ll need to set the status to ‘inherit’ or ‘any’.
    • any‘ – retrieves any type except revisions and types with ‘exclude_from_search’ set to true.
    • Custom Post Types (e.g. movies)
  • post_status (string / array) – use post status. Retrieves posts by Post Status, default value is ‘publish‘.
    • publish‘ – a published post or page.
    • pending‘ – post is pending review.
    • draft‘ – a post in draft status.
    • auto-draft‘ – a newly created post, with no content.
    • future‘ – a post to publish in the future.
    • private‘ – not visible to users who are not logged in.
    • inherit‘ – a revision. see get_children.
    • trash‘ – post is in trashbin (available with Version 2.9).
    • any‘ – retrieves any status except those from post types with ‘exclude_from_search’ set to true.

Show Post by Type

Display only pages:

$query = new WP_Query( 'post_type=page' );

Display ‘any‘ post type (retrieves any type except revisions and types with ‘exclude_from_search’ set to TRUE):

$query = new WP_Query( 'post_type=any' );

Display multiple post types, including custom post types:

$query = new WP_Query( array( 'post_type' => array( 'post', 'page', 'movie', 'book' ) ) );

Show Post by Status

Display only drafts:

$query = new WP_Query( 'post_status=draft' );

Display multiple post status:

$query = new WP_Query( array( 'post_status' => array( 'pending', 'draft', 'future' ) ) );

Display all attachments:

$query = new WP_Query( array( 'post_status' => 'any', 'post_type' => 'attachment' ) );

ページ送りパラメータ

  • showposts (int) – number of post to show per page. Deprecated as of Version 2.1 in favor of ‘posts_per_page’.
  • posts_per_page (int) – number of post to show per page (available with Version 2.1). Use 'posts_per_page'=>-1 to show all posts. Note if the query is in a feed, wordpress overwrites this parameter with the stored ‘posts_per_rss’ option. To reimpose the limit, try using the ‘post_limits’ filter, or filter ‘pre_option_posts_per_rss’ and return -1
  • posts_per_archive_page (int) – number of posts to show per page – on archive pages only. Over-rides showposts andposts_per_page on pages where is_archive() or is_search() would be true
  • nopaging (bool) – show all posts or use pagination. Default value is ‘false’, use paging.
  • paged (int) – number of page. Show the posts that would normally show up just on page X when using the “Older Entries” link.

Show x Posts per page

Display 3 posts per page:

$query = new WP_Query( 'posts_per_page=3' );

Show All Post

Display all posts in one page:

$query = new WP_Query( 'posts_per_page=-1' );

Display all posts by disabling pagination:

$query = new WP_Query( 'nopaging=true' );

Show Posts from page x

Display posts from page number 6:

$query = new WP_Query( 'paged=6' );

Show Posts from Current Page

Display posts from current page:

$query = new WP_Query( 'paged=' . get_query_var( 'page' ) );

Pagination Note: You should set get_query_var( 'page' ); if you want your query to work with pagination. Since WordPress 3.0.2, you do get_query_var( 'page' ) instead of get_query_var( 'paged' ). The pagination parameter ‘paged‘ for WP_Query()remains the same.

オフセットパラメータ

  • offset (int) – number of post to displace or pass over.

Pass over 3 Posts

Display posts from the 4th one:

$query = new WP_Query( 'offset=3' ) );

Show 5 Posts starting from the second one

Display 5 posts per page which follow the most recent (1):

$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 1 ) );

Note: Setting offset parameter will ignore the paged parameter.

順序&順序ベースパラメータ

取得した投稿を並び替える。

  • order (string) – Designates the ascending or descending order of the ‘orderby‘ parameter. Defaults to ‘DESC’.
    • ASC‘ – ascending order from lowest to highest values (1, 2, 3; a, b, c).
    • DESC‘ – descending order from highest to lowest values (3, 2, 1; c, b, a).
  • orderby (string) – Sort retrieved posts by parameter. Defaults to ‘date’.
    • none‘ – No order (available with Version 2.8).
    • ID‘ – Order by post id. Note the captialization.
    • author‘ – Order by author.
    • title‘ – Order by title.
    • date‘ – Order by date.
    • modified‘ – Order by last modified date.
    • parent‘ – Order by post/page parent id.
    • rand‘ – Random order.
    • comment_count‘ – Order by number of comments (available with Version 2.9).
    • menu_order‘ – Order by Page Order. Used most often for Pages (Order field in the Edit Page Attributes box) and forAttachments (the integer fields in the Insert / Upload Media Gallery dialog), but could be used for any post type with distinct ‘menu_order‘ values (they all default to 0).
    • meta_value‘ – Note that a ‘meta_key=keyname‘ must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect).
    • meta_value_num‘ – Order by numeric meta value (available with Version 2.8). Also note that a ‘meta_key=keyname‘ must also be present in the query. This value allows for numerical sorting as noted above in ‘meta_value‘.

Show Posts sorted by Title, Descending order

Display posts sorted by post title in a descending order:

$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );

Show Random Post

Display one random post:

$query = new WP_Query( array ( 'orderby' => 'rand', 'posts_per_page' => '1' ) );

Show Popular Posts

Display posts ordered by comment count:

$query = new WP_Query( array( 'orderby' => 'comment_count' ) );

Show Products sorted by Price

Display posts with ‘Product’ type ordered by ‘Price’ custom field:

$query = new WP_Query( array ( 'post_type' => 'product', 'orderby' => 'meta_value', 'meta_key' => 'price' ) );

Multiple ‘orderby’ values

Display pages ordered by ‘title’ and ‘menu_order':

$query = new WP_Query( array( 'post_type' => 'page', 'orderby' => 'title menu_order', 'order' => 'ASC' ) );
このページ「関数リファレンス/WP Query」はまだ書きかけで、情報が不足しています。続きを書いて WordPress を手助けしましょう.

Do you know how to sort the query if the meta_value is an array? Write it here :)

先頭固定投稿パラメータ

Show Sticky Posts or ignore them.

  • caller_get_posts (bool) – ignore sticky posts or not. Deprecated as of Version 3.1 in favor of ‘ignore_sticky_posts‘.
  • ignore_sticky_posts (bool) – ignore sticky posts or not. Default value is 0, don’t ignore. Ignore/exclude sticky posts being included at the beginning of posts returned, but the sticky post will still be returned in the natural order of that list of posts returned.

Show Sticky Posts

Display just the first sticky post:

$sticky = get_option( 'sticky_posts' );
$query = new WP_Query( 'p=' . $sticky[0] );

Display just the first sticky post, if none return the last post published:

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

Display just the first sticky post, if none return nothing:

$sticky = get_option( 'sticky_posts' );
$args = array(
    'posts_per_page' => 1,
    'post__in'  => $sticky,
    'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );
if ( $sticky[0] ) {
    // insert here your stuff...
}

Don’t Show Sticky Posts

Exclude all sticky posts from the query:

$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

Exclude sticky posts from a category. Return ALL posts within the category, but don’t show sticky posts at the top. The ‘sticky posts’ will still show in their natural position (e.g. by date):

$query = new WP_Query( 'ignore_sticky_posts=1&posts_per_page=3&cat=6' );

Exclude sticky posts from a category. Return posts within the category, but exclude sticky posts completely, and adhere to paging rules:

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$sticky = get_option( 'sticky_posts' );
$args = array(
    'cat' => 3,
    'ignore_sticky_posts' => 1,
    'post__not_in' => $sticky,
    'paged' => $paged
);
$query = new WP_Query( $args );

時間パラメータ

ある期間に関連付けられた投稿を表示する。

  • year (int) – 4 digit year (e.g. 2011).
  • monthnum (int) – Month number (from 1 to 12).
  • w (int) – Week of the year (from 0 to 53). Uses the MySQL WEEK command Mode=1.
  • day (int) – Day of the month (from 1 to 31).
  • hour (int) – Hour (from 0 to 23).
  • minute (int) – Minute (from 0 to 60).
  • second (int) – Second (0 to 60).

Returns posts for just the current date:

$today = getdate();
$query = new WP_Query( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );

Returns posts for just the current week:

$week = date('W');
$year = date('Y');
$query = new WP_Query( 'year=' . $year . '&w=' . $week );

Returns posts dated December 20:

$query = new WP_Query( 'monthnum=12&day=20' );

Note: The queries above return posts for a specific date period in history, i.e. “Posts from X year, X month, X day”. They are unable to fetch posts from a timespan relative to the present, so queries like “Posts from the last 30 days” or “Posts from the last year” are not possible with a basic query, and require use of the posts_where filter to be completed. The examples below use the posts_where filter, and should be modifyable for most time-relative queries.

Return posts for March 1 to March 15, 2009:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts for March 1 to March 15, 2010
    $where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Return posts from the last 30 days:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts in the last 30 days
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Return posts 30 to 60 days old

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts  30 to 60 days old
    $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-30 days')) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

カスタムフィールドパラメータ

あるカスタムフィールドに関連付けられた投稿を表示する。

  • meta_key (string) – Custom field key.
  • meta_value (string) – Custom field value.
  • meta_compare (string) – Operator to test the ‘meta_value‘. Possible values are ‘!=’, ‘>’, ‘>=’, ‘<‘, or ‘<=’. Default value is ‘=’.
  • meta_query (array) – Custom field parameters (available with Version 3.1).
    • key (string) – Custom field key.
    • value (string|array) – Custom field value (Note: Array support is limited to a compare value of ‘IN’, ‘NOT IN’, ‘BETWEEN’, or ‘NOT BETWEEN’)
    • compare (string) – Operator to test. Possible values are ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’. Default value is ‘=’.
    • type (string) – Custom field type. Possible values are ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’. Default value is ‘CHAR’.

Simple Custom Field Query:

Display posts where the custom field key is ‘color’, regardless of the custom field value:

$query = new WP_Query( 'meta_key=color' );

Display posts where the custom field value is ‘blue’, regardless of the custom field key:

$query = new WP_Query( 'meta_value=blue' );

Display Page where the custom field value is ‘blue’, regardless of the custom field key:

$query = new WP_Query( 'meta_value=blue&post_type=page' );

Display posts where the custom field key is ‘color’ and the custom field value is ‘blue':

$query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );

Display posts where the custom field key is ‘color’ and the custom field value IS NOT ‘blue':

$query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue', 'meta_compare' => '!=' ) );

Display ‘product'(s) where the custom field key is ‘price’ and the custom field value that is LESS THAN OR EQUAL TO 22. Note the value 99 will be considered greater than 100 as the data is stored as ‘strings’, not ‘numbers’.

$query = new WP_Query( array( 'meta_key' => 'price', 'meta_value' => '22', 'meta_compare' => '<=', 'post_type' => 'product' ) );

Display posts with a custom field value of zero (0), regardless of the custom field key:

$query = new WP_Query( array ( 'meta_value' => '_wp_zero_value' ) );

Single Custom Field Handling:

Display posts from a single custom field:

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'NOT LIKE'
        )
    )
 );
$query = new WP_Query( $args );

(Note that meta_query expects nested arrays, even if you only have one query.)

Multiple Custom Field Handling:

Display posts from several custom field:

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'NOT LIKE'
        ),
        array(
            'key' => 'price',
            'value' => array( 20, 100 ),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
 );
$query = new WP_Query( $args );

Display posts that have meta key ‘color’ NOT LIKE value ‘blue’ OR meta key ‘price’ with values BETWEEN 20 and 100:

 $args = array(
    'post_type' => 'product',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'NOT LIKE'
        ),
        array(
            'key' => 'price',
            'value' => array( 20, 100 ),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
  );
 $query = new WP_Query( $args );

権限パラメータ

ユーザーが適切な権限を持っている場合、公開済み投稿およびプライベート投稿を表示する。

$query = new WP_Query( array( 'post_status' => array( 'publish', 'private' ), 'perm' => 'readable' ) );


まとめ

get_postsは、記事内でループを作る場合よくつかっているのですが、WP_Queryを使うほうがむしろよいようですね。

勉強になりました。

なお、複数のget_postsの結果をPHPの配列関数でマージ(結合)できるようです。

スポンサーリンク

Leave a Reply