WordPress的 - 当自定义字段等于某事时跳过帖子/页面

问题描述:

我正在写一个插件,但我遇到了问题。当Wordpress在网站上显示帖子&页面时,当自定义字段show_post等于0(这是一个简化示例)时,我希望它跳过该帖子/页面。我该怎么做呢?WordPress的 - 当自定义字段等于某事时跳过帖子/页面

请记住,这是一个插件,而不是一个主题,所以我不能只编辑主题跳过这些帖子/页面。

假设您希望插件适用于所有主题和所有查询。

您可以使用类似

<?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; 
} 

更新:加入if($posts)条件检查,如果该查询返回的ID或没有。

+0

它不起作用,因为它现在不显示任何帖子或页面。 – 2011-12-23 11:47:35

+0

原因可能是您没有show_posts = 0的任何帖子/页面。更新了代码并为该问题添加了修复程序。 – tamilsweet 2011-12-23 13:39:28

+0

@talimsweet它增加了'和ID不在(418,400)',但它不应该这样做,因为这些帖子有正确的元字段/值。 – 2011-12-23 13:50:26