2011-12-22 7 views
0

私はプラグインを作成していますが、問題があります。 Wordpressが投稿の&ページをサイトに表示しているときに、カスタムフィールドshow_postが0の場合、その投稿/ページをスキップします(これは簡単な例です)。これはどうすればいいですか?Wordpress - カスタムフィールドが何かと同じ場合、投稿/ページをスキップする

これはプラグイン用でテーマではないので、テーマを編集してそれらの投稿/ページをスキップすることはできません。

答えて

1

プラグインがすべてのテーマとすべてのクエリに対して機能すると仮定します。

あなたは

<?php 
add_filter('posts_where', 'check_show_posts'); 
function check_show_posts($where) { 
    global $wpdb; 
    $query = " 
     SELECT {$wpdb->prefix}posts.ID as ID 
     FROM {$wpdb->prefix}posts 
     INNER JOIN {$wpdb->prefix}postmeta m1 
      ON ({$wpdb->prefix}posts.ID = m1.post_id) 
     WHERE 
     {$wpdb->prefix}posts.post_status = 'publish' 
     AND ({$wpdb->prefix}posts.post_type = 'post' OR {$wpdb->prefix}posts.post_type = 'page') 
     AND (m1.meta_key = 'show_posts' AND m1.meta_value = '0') 
     GROUP BY {$wpdb->prefix}posts.ID 
     DESC; 
     "; 

     $posts = $wpdb->get_col($query); 
     if($posts) { 
      $post_list = implode(',', $posts); 
      $where .= sprintf(' AND ID NOT IN (%s)', $post_list); 
     } 
     return $where; 
} 

アップデートのようなものを使用することができます。クエリがIDを返すか、いないかどうかを確認するためにif($posts)条件を追加しました。

+0

投稿やページが表示されないため、動作しません。 –

+0

理由は、あなたはshow_posts = 0の投稿/ページを持っていない可能性があります。コードを更新し、問題の修正を追加しました。 – tamilsweet

+0

@talimsweetそれは 'AND ID NOT IN(418,400)'を追加しましたが、それらの投稿に正しいメタフィールド/値があるので、そうしてはいけません。 –

関連する問題