WordPress как на ладони
wordpress jino

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

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

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

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

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

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

Спасибо.

Kama 7 месяцев назад

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

0
Гость 7 месяцев назад
  • 0

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

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

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

    HelloThere 7 месяцев назад

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

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

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

    Kama 7 месяцев назад

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

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

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

    HelloThere 7 месяцев назад

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

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

    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 7 месяцев назад

    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 7 месяцев назад

    Спасибо!

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

    HelloThere 7 месяцев назад

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

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

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

    campusboy 7 месяцев назад

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

    Kama 7 месяцев назад

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

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

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

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

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

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

    HelloThere 7 месяцев назад

    То есть конструкция такого вида сработает?

    $file = $_SERVER['DOCUMENT_ROOT'] . "/blalbla" .  $newImagePost['filename'] . "or.jpg";
    				if( is_single( $post_id ) )
    				{
    					wp_sideload_image( $post_id, $file, $desc = $newImagePost['description'] );
    				}else{
    
    				}
    				wp_sideload_image( $post_id, $file, $desc =  $newImagePost['description'] );
    HelloThere 7 месяцев назад

    К сожалению, у меня выдаёт что-то вроде:

    [0]=> string(212) "File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini."

    Путь к файлу верный, всё путём. Что это может быть? Хостер?

    HelloThere 7 месяцев назад

    Проверил настройки хостера:
    post_max_size: 100M
    upload_max_filesize: 100M

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