Как я могу исключить конкретный идентификатор из этой строки кода?

Я использую этот код для перечисления страниц с конкретным письмом в начале их:

$first_char = 'H'; echo '<table class="alphabet" style="border:0px;border-color:transparent;"> <tbody><tr> <td width="100px;" style="border-color:transparent;"><span class="separator-line"></span></td> <td style="border-color:transparent;padding-left:5px;padding-right:5px;"><span class="letter"><strong>' . $first_char . '</strong></span></td> <td width="100px;" style="border-color:transparent;"><span class="separator-line"></span></td> </tr> </tbody></table>'; $postids=$wpdb->get_col($wpdb->prepare(" SELECT ID FROM $wpdb->posts WHERE SUBSTR($wpdb->posts.post_title,1,1) = %s ORDER BY $wpdb->posts.post_title",$first_char)); if ($postids) { $args=array( 'post__in' => $postids, 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => -1, 'caller_get_posts'=> 1., ); $my_query = null; $my_query = new WP_Query($args); if( $my_query->have_posts()) { while ($my_query->have_posts()) : $my_query->the_post(); ?> <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php endwhile; } wp_reset_query(); // Restore global post data stomped by the_post(). } 

В основном мне нужно уметь исключать из него определенные идентификаторы. Я попытался добавить 'exclude' => '// id' в массив $ args, но ничего не сделал.

Solutions Collecting From Web of "Как я могу исключить конкретный идентификатор из этой строки кода?"

В отдельной заметке 'caller_get_posts' устарел в версии 3.1 – вместо этого используйте 'ignore_sticky_posts' с логическим аргументом.

'exclude' не является аргументом запроса, поэтому WordPress игнорирует его. Сообщение об исключении через запрос выполняется с использованием ключа 'post__not_in' с единственным идентификатором сообщения или массивом идентификаторов. Однако, как указывает @vancoder, аргумент выдает дорогостоящие запросы с вычислительной точки зрения.

Также нецелесообразно применять аргумент 'post__in' а также аргумент 'post__not_in' поскольку установка неявно описывает значение другого. Более простое и эффективное решение доступно, когда вы захотите использовать оба: просто исключите идентификаторы сообщений из аргумента 'post__in' прежде чем применять его к запросу:

 $included_post_ids = $wpdb->get_col( /* ... */ ); $excluded_post_ids = [ /* ids to exclude */ ]; if( !empty( $included_post_ids ) ) { $included_post_ids = array_diff( $included_post_ids, $excluded_post_ids ); $args = [ 'post__in' => $included_post_ids, 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => -1, 'ignore_sticky_posts' => true ]; $my_query = new WP_Query( $args ); // .... } 

Информацию о аргументах запроса можно найти в ссылке WP_Query в Codex .