WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

is_single() и кириллица

У меня существуют кастомные посты. И, перед добавлением нового мне нужно проверить, не существует ли такой же. Для этой цели я использую проверку is_single().

                if(is_single( sanitize_title ( $newImagePost['description'] ) ) )
				{
					echo "Такой пост есть";
				}else{
					echo "Такого поста ещё нет";
				}

В $newImagePost['description'] содержится точно то же самое, что и если задать тайтл для поиска руками, то есть пост с таким заголовком существует.

Но почему-то если руками задаешь - то WP находит такой пост, а если через переменную (она используется в цикле форич) то нет. В чём может быть проблема? Пробовал и с sanitize_title и без, результат один и тот же.

Может быть вы подскажете какой-то другой метод проверки, существует ли пост (кастомного типа), и если да, то возвращал его ID?

Спасибо.

Заметки к вопросу:
Kama год назад

Ты покажи что внутри переменной, так не понятно, а гадать не хочется...

0
Гость
год назад
  • 0

    Проще говоря, пытаюсь понять, как мне найти ID у кастомной записи по заголовку.

    Если я делаю is_single('Привет') он это самый "Привет" не находит. И is_single( sanitize_title('Привет') тоже.

    Может быть есть какой-то другой способ, более кошерный? С учётом того, что это используется в пакетном импорте кучи постов, поэтому время выполнения, безусловно, важно.

    HelloThere год назад

    Пока вышел из положения так:

                    $postTitle = trim($newImagePost['description']);
    				$a = get_page_by_title(  $postTitle , '', 'item' );

    Но это жёстко тормозит систему.

    Kama год назад

    И, перед добавлением нового мне нужно проверить, не существует ли такой же.

    Так is_single же проверяет текущий запрос на соответствие...

    Короче дай весь код, ты что-то не то делаешь... Там нужно указать какой пост проверить, потом попробовать его найти в базе... Для быстродействия тут можно проще запрос написать поиск по полю post_name...

    HelloThere год назад

    Как он должен и может выглядеть?

    Весь код на данный момент выглядит так:

    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>';
    				}

    ...

    Kama год назад

    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('привет мир') ) ){
    	// запись с именем 'привет мир' найдена в бд
    }
    HelloThere год назад

    Спасибо!

    И второй вопрос. Так как я обрабатываю это в цикле, где может быть дофига итераций, встаёт вопрос об таймауте. Нет ли у тебя где-то примеров простого вызова ajax, для того, чтобы последовательно проходить итерации? Проще говоря, мне нужно один за другим, делать итерации этого форича.

    HelloThere год назад

    И, сразу же, последний вопрос: мне приходится для импорта featured image прописывать руками конструкцию внешнюю типа

    $file = "http://domain.com/import/photos/" . $curDir . "/" . $newImagePost['filename'] . "or.jpg";

    Тем не менее они у меня лежат в директории локально. Пробовал указать ему полный путь - не хочет. Как-то можно импортировать файлы не через внешний URL? Мне кажется оно так и быстрее будет...

    campusboy год назад

    Проще тогда получить ВСЕ тайтлы постов и уже обращаться к массиву значений в поисках соответствия.

    Kama год назад

    Проще тогда получить ВСЕ тайтлы постов

    Тоже хороший вариант, может даже лучший!

    Проще говоря, мне нужно один за другим, делать итерации этого форича.

    Где-то отвечал на такой вопрос вроде, но найти не могу... В поиске сайта попробуй поискать на эту тему, где-то было...

    Как-то можно импортировать файлы

    Конечно нужно через путь получать, тут все тормоза! Найти путь и получай через него. Юзай константу ABSPATH .'...' или $_SERVER['DOCUMENT_ROOT'] .'...'.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация