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);
Просто попробовал добавить это ниже add_filter, как показано в примере. Это ничего не делало для меня, такие же результаты. Правильно ли я это делаю? – user123123
Вторая вещь, которая приходит мне на ум, пытается найти приоритет. В вашем коде, где вы применяете фильтр, в качестве третьего параметра есть целое число 10. Вы пытались изменить это? –
У меня нет, какое значение вы бы предложили? – user123123