2015-06-30 2 views
-1

My if ($ filter == 'on') в функции ugrestriction_filter, похоже, не работает в этом коде при просмотре сообщения. Я выполняю это с functions.php. Это работает при просмотре страницы. Как я могу сделать эту работу?если логика в posts_where не работает wordpress

Вот мой код:

// Join metadata 
function ugrestriction_join($join) { 
global $wp_query, $wpdb; 

    $join .= "LEFT JOIN ($wpdb->postmeta) ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) "; 


return $join; 
} 

add_filter('posts_join', 'ugrestriction_join'); 


// Prevent duplicates 

function ugrestriction_distinct($where) { 
global $wpdb; 

    return "DISTINCT"; 

return $where; 
} 
add_filter('posts_distinct', 'ugrestriction_distinct'); 


    // Filter posts 
    function ugrestriction_filter($where, $wp_query) 
    { 
     global $wpdb, $post, $current_user, $wp_query; 
     get_currentuserinfo(); 
     $user_id = $current_user->ID; 
     $page_id = $wp_query->get_queried_object_id(); 
     $post_id = $post->ID; 

     $meta_key1 = '_ugrestriction'; 
     $meta_key1_value = 'on'; 

     $postids=$wpdb->get_col($wpdb->prepare( 
      "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = 'on'", "_ugrestriction" 
     )); 


     //$postids = array("70", "1", "2", "3"); 

     if (in_array($post_id, $postids)) { 
      $filter = 'on'; 
     } elseif (in_array($page_id, $postids)) { 
      $filter = 'on'; 
     } 


     if ($filter == 'on') { 
      $where .= " AND ($wpdb->postmeta.meta_key = '_ugrestriction' AND $wpdb->postmeta.meta_value = 'on' AND " . $wpdb->posts . " .post_author =". $user_id .")"; 
     } 

      return $where; 
    } 

    add_filter('posts_where', 'ugrestriction_filter', 10, 2); 

ответ

3

Из документации:

Некоторые функции, извлекать сообщения не работают фильтры, поэтому posts_where функции фильтра вы прикрепляются не будет изменять запрос. Чтобы преодолеть это, установите suppress_filters к ложным в массиве аргументов , переданные функции

Source

вы пробовали это?

+0

Просто попробовал добавить это ниже add_filter, как показано в примере. Это ничего не делало для меня, такие же результаты. Правильно ли я это делаю? – user123123

+0

Вторая вещь, которая приходит мне на ум, пытается найти приоритет. В вашем коде, где вы применяете фильтр, в качестве третьего параметра есть целое число 10. Вы пытались изменить это? –

+0

У меня нет, какое значение вы бы предложили? – user123123