query_post по заголовку?
Возможно ли создать цикл постов используя WP_Query или query_posts на основе заголовка?
например
// Использование массива аргументов
$args = array('post_title'='LIKE '.$str.'% ');
$res = WP_Query($arg);
// цикл...
// пробуем так...
$mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title like 'Abb%' ");
echo count($mypostids).", "; // работает, но не получается вывести массив ID для следующих аргументов?
$args = array(
'post__in'=> $mypostids
);
$res = WP_Query($args);
while( $res->have_posts() ) : $res->the_post(); ...

functions.php
<?php
// Добавляем фильтр для поиска записей по части заголовка
add_filter( 'posts_where', 'title_like_posts_where', 10, 2 );
function title_like_posts_where( $where, $wp_query ) {
global $wpdb;
// Проверяем наличие параметра post_title_like в запросе
if ( $post_title_like = $wp_query->get( 'post_title_like' ) ) {
// Добавляем условие LIKE к SQL запросу для поиска по заголовку
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\'';
}
return $where;
}
?>
Использование:
// Подготовка аргументов для запроса
$args = array(
'post_title_like' => $str // Искомая строка в заголовке
);
// Выполняем запрос
$res = new WP_Query($args);

Отлично работает, за исключением второго аргумента (ссылка на $wp_query
), который, похоже, не является частью callback-функции фильтра (см. http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where) и вызовет ошибку.

на самом деле код верный, по крайней мере в WP 4.1.1. Это кодекс упускает второй аргумент, поэтому если вы объявляете 2 аргумента в add_filter
, как в примере, всё работает корректно. Ещё одно преимущество этого решения — оно работает для пользовательских типов записей.

Этот ответ должен быть принят, так как он демонстрирует решение с использованием встроенных функций WordPress, а не кастомного SQL-запроса.

Кажется, здесь пропущен первый символ %
. Сразу после LIKE \'
. Я добавил его, и всё заработало (4.2.4)

Да, действительно пропущен первый %
, тоже добавил, и теперь работает :) (может, стоит отредактировать ответ?)

В итоге получилось заставить это работать с помощью этого поста. Спасибо, ребята;
$finalArgs = array (
'posts_per_page'=>5,
'order' => 'ASC',
'post_type' => 'school'
);
// Создаем новый экземпляр
$searchSchools = new WP_Query( $finalArgs );
$mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title LIKE '".$str."%' ");
$args = array(
'post__in'=> $mypostids,
'post_type'=>'school',
'orderby'=>'title',
'order'=>'asc'
);
$res = new WP_Query($args);
while( $res->have_posts() ) : $res->the_post();
global $post;
$EstablishmentNumber = get_post_meta($post->ID,'EstablishmentNumber', true);
$schl = array('id'=>$EstablishmentNumber, 'label'=>$post->post_title , 'value'=>$EstablishmentNumber );
$matchedSchools[] = $schl;
endwhile;

Получить заголовок из другого цикла
$title = get_the_title();
и использовать переменную $title при необходимости.
<?php
global $post, $current_post_id, $title;
function filter_where($where = ''){
global $title;
$where .= "AND post_title = '$title'";
return $where;
}
add_filter('posts_where', 'filter_where');
$query = new WP_Query(array('post_type' => 'sessions') );
if ( have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
/* Цикл здесь */
endwhile; endif;
wp_reset_query(); ?>

Эти ответы выглядят для меня как попытка взлома WordPress.
Смотрите тот же вопрос на Stack Overflow:
https://stackoverflow.com/questions/25761593/wp-query-with-post-title-like-something-and-category
Этот код работает, если вам нужно выполнить поисковый запрос по заголовку с сортировкой по названию:
$the_query = new WP_Query(
array(
'post_type' => 'watches',
'posts_per_page' => 5,
'orderby' => 'title',
's' => 'my title'
)
);
Данный пример запроса предназначен для типа записей "watches", а параметр 's' (поисковый запрос) позволяет искать записи по их заголовкам в этом запросе.
