• Почему запрос следующего вида выдает ошибку (обращение к wp_posts через $wpdb->posts):
    $sql = 'SELECT id, post_title, post_type FROM'.$wpdb->posts.'WHERE post_type="post" OR post_type="page" ORDER BY post_type';

    Ошибка:

    Undefined offset: 0 in D:\localhost\wp\wp-content\plugins\plugin\plugin.php

    А запрос с прямым обращение к таблице wp_posts работает нормально:
    $sql = 'SELECT id, post_title, post_type FROM wp_posts WHERE post_type="post" OR post_type="page" ORDER BY post_type';

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Не знаю, про какой оффсет оно говорит, но в фрагменте FROM'.$wpdb->posts.'WHERE явно не хватает пробелов после FROM и перед WHERE.

    Извините за ложный след ошибка про оффсет относится не к самому запросу, а к его результату, который ниже используется.

    Пробелы не помогли. Результат запроса по-прежнему пуст. так в чем же тут дело?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Возможно, не хватает global $wpdb; перед запросом.

    в том то и дело что хватает, этот запрос работает при прямом обращении к wp_posts и не работает при указанном выше:

    <?global $wpdb;
    
          $sql = 'SELECT id, post_title, post_type FROM ' .$wpdb->posts. 'WHERE post_type="post" OR post_type="page" ORDER BY post_type';
          $res = $wpdb->get_results($sql, ARRAY_A) ; 
    
          //max element
          $length = array();
          foreach ($res as $name) {
    
             $length[] = mb_strlen($name['post_title']);
          }
    
          $count  = count($length);
          $max = $length[0];
          for ($i=0; $i<$count; $i++) {
             if ($length[$i] > $max) {
             	$max = $length[$i];
             }
          }
    ?>

    <?global $wpdb;

    Простите, это что за диковинная конструкция?

    ' .$wpdb->posts. 'WHERE

    И опять нет пробела. Ну нельзя же так наплевательски относиться к синтаксису.

    global $wpdb;
    А как нужно объявлять глобальные переменные?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    <?php
          global $wpdb;
          ...
    ?>

    выглядит привычнее 🙂 Однако ваш вариант тоже работает. Предполагаю, что достаточно поставить пробел перед WHERE, как заметил YuBe.

    пробелы не помогают. Я уже пробовала.

    Спасибо всем, не бейте меня сильно, просто затмение мозгов какое-то. Кавычки ставила не в том шаблоне, который реально тестировался. Все получилось.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «$wpdb->posts и wp_posts» закрыта для новых ответов.