2016-03-31 29 views
0

get_posts()機能を使用してカスタム投稿タイプのすべての投稿を取得しているとき、私は取得したい投稿が300件であっても常にメモリサイズ制限に達しますデータベース。WordPressカスタム投稿タイプのすべての投稿を取得する

メモリを増やすことはオプションではなく、ページネーションも有効にしません。

これを引き起こす原因は何か、これをどのように解決できますか。これらの投稿のそれぞれから、後でメタデータを取得し、2つの配列/オブジェクトとそれ以上のものに分割する必要があります。ページリクエストごとに5000件以上の投稿/レコードを処理できる必要があります。

ヒント、アイデア、提案、その他何か?

まず試してみてください。

$args = array(
    'posts_per_page' => 300, 
    'offset'   => 0, 
    'category'   => '', 
    'category_name'  => '', 
    'orderby'   => 'title', 
    'order'    => 'ASC', 
    'post_type'   => 'partners', 
    'post_status'  => 'publish', 
    'suppress_filters' => true, 
    /*'meta_key'  => 'partner-submission-status', 
    'meta_value'  => 'goedgekeurd',*/ 
); 

$posts = get_posts($args); 
var_dump(count($posts)); 

2回目の試行:

$query = $wpdb->get_results(" 
    SELECT p.ID, p.post_title 
    FROM wp_posts as p 
    INNER JOIN wp_postmeta as m 
    on p.ID = m.post_id 
    WHERE p.post_type = 'partners' AND 
    p.post_status = 'publish' 
"); 

var_dump(count($query));die; 

しかし、それらの両方でも(私はget_postsで動作するようにしようとしたvar_dump

+0

に得ることはありません)関数と生のクエリではどちらもメモリサイズ制限を超えます。私は元の投稿にいくつかのコードを追加します。 –

+0

wp-configファイルからWP_MEMORY_LIMITを増やしてみましたか? – DpEN

+0

問題は、76個のカスタムフィールド(メタデータ)があるため、取得するデフォルトのクエリが50000+レコードで、システムがクラッシュするためです。そこで、これらのメタデータを別々のデータベーステーブルにマップして、パートナーごとにレコード(生のクエリ)にしか到達しないように、その投稿タイプの各パートナーごとに1つの行があるようにする必要があります。それに対する提案はありますか? –

答えて

-1
<?php query_posts('post_type=your_post_type&posts_per_page=10'); 
if (have_posts()) : while (have_posts()) : the_post(); ?> 

........... 

<?php endwhile; endif; wp_reset_query(); ?> 
関連する問題