is_single() и кириллица
У меня существуют кастомные посты. И, перед добавлением нового мне нужно проверить, не существует ли такой же. Для этой цели я использую проверку is_single().
if(is_single( sanitize_title ( $newImagePost['description'] ) ) )
{
echo "Такой пост есть";
}else{
echo "Такого поста ещё нет";
}
В $newImagePost['description'] содержится точно то же самое, что и если задать тайтл для поиска руками, то есть пост с таким заголовком существует.
Но почему-то если руками задаешь - то WP находит такой пост, а если через переменную (она используется в цикле форич) то нет. В чём может быть проблема? Пробовал и с sanitize_title и без, результат один и тот же.
Может быть вы подскажете какой-то другой метод проверки, существует ли пост (кастомного типа), и если да, то возвращал его ID?
Спасибо.
Ты покажи что внутри переменной, так не понятно, а гадать не хочется...
Проще говоря, пытаюсь понять, как мне найти ID у кастомной записи по заголовку.
Если я делаю is_single('Привет') он это самый "Привет" не находит. И is_single( sanitize_title('Привет') тоже.
Может быть есть какой-то другой способ, более кошерный? С учётом того, что это используется в пакетном импорте кучи постов, поэтому время выполнения, безусловно, важно.
Пока вышел из положения так:
Но это жёстко тормозит систему.
Так is_single же проверяет текущий запрос на соответствие...
Короче дай весь код, ты что-то не то делаешь... Там нужно указать какой пост проверить, потом попробовать его найти в базе... Для быстродействия тут можно проще запрос написать поиск по полю post_name...
Как он должен и может выглядеть?
Весь код на данный момент выглядит так:
foreach ( $imagesList as $key => $newImagePost ) { ... $postTitle = trim($newImagePost['description']); if(is_single($postTitle)) // Не работает { echo "Существует<br>"; }else{ echo "Не существует<br>"; } // Ниже - работает, но тормозит. ( $a = get_page_by_title( $postTitle , '', 'item' ); if($a) { echo '<span class="badge badge-success">Такой пост существует</span><br>'; }else{ echo '<span class="badge badge-danger">Такой пост не существует</span><br>'; }...
is_single тут не подходит вообще... он для текущего запроса страницы предназначен, а не работать с переменными в цикле...
Своя функция тебе нужна похоже, поиск по полю post_name оно индексное
function is_page_by_name( $page_name ) { global $wpdb; $sql = $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s", $page_name ); $page = $wpdb->get_var( $sql ); return !! $page; } // использование if( is_page_by_name( sanitize_title('привет мир') ) ){ // запись с именем 'привет мир' найдена в бд }Спасибо!
И второй вопрос. Так как я обрабатываю это в цикле, где может быть дофига итераций, встаёт вопрос об таймауте. Нет ли у тебя где-то примеров простого вызова ajax, для того, чтобы последовательно проходить итерации? Проще говоря, мне нужно один за другим, делать итерации этого форича.
И, сразу же, последний вопрос: мне приходится для импорта featured image прописывать руками конструкцию внешнюю типа
Тем не менее они у меня лежат в директории локально. Пробовал указать ему полный путь - не хочет. Как-то можно импортировать файлы не через внешний URL? Мне кажется оно так и быстрее будет...
Проще тогда получить ВСЕ тайтлы постов и уже обращаться к массиву значений в поисках соответствия.
Тоже хороший вариант, может даже лучший!
Где-то отвечал на такой вопрос вроде, но найти не могу... В поиске сайта попробуй поискать на эту тему, где-то было...
Конечно нужно через путь получать, тут все тормоза! Найти путь и получай через него. Юзай константу ABSPATH .'...' или $_SERVER['DOCUMENT_ROOT'] .'...'.