Intereting Posts
Каков наилучший способ создания фабрики для единичных тестовых объектов? Я не могу получить доступ к администратору WP Рассчитать налог на отпускную цену без учета скидки Невозможно передать переменную в базу данных Как вы удаляете метадокс таксономии категории (иерархической)? Как использовать%, например% в sql statement wordpress WordPress пользовательский столбец Как я могу программно создавать «дочерние» страницы при активации темы? Различные шаблоны для каждого уровня категории Вызов функции-члена has_posts () для не-объекта в нормальном цикле Использование произвольного состояния сообщения без его регистрации Использование настраиваемого поля в качестве настраиваемого заголовка сообщения Показать сообщения на странице по категории и тегам Как мне получить мои сообщения в алфавитном порядке? перенаправление на дочернюю тему на основе города интернет-пользователей во Франции с проверкой ip-адреса

Почему `get_permalink ()` создает добавление. Запрос БД без $ post-> filter?

В настоящее время я работаю над настраиваемым циклом / запросом, где мне нужно добавить постоянную ссылку на сообщение в массив сообщений, которые я извлекаю из БД.

К сожалению, get_permalink() создает один дополнительный запрос БД для каждого вызова, который может стать довольно интенсивным, поскольку я перечисляю все сообщения на одной странице.

Сначала я подумал, что это могут быть вызовы get_option( 'permalink_structure' ); или get_option( 'default_category' ); нет параметров автоматической загрузки, но оба они загружаются автоматически. Доказательство здесь:

 function wpse_list_autoloaded_opts() { $results = $wpdb->get_results( " SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes' " ); echo '<pre>'; foreach( $results as $result ) if ( 'permalink_structure' === $result->option_name OR 'default_category' === $result->option_name ) echo "Name: {$result->option_name}, Value: {$result->option_value}<br />"; echo '<pre>'; } add_action( 'shutdown', 'wpse_list_autoloaded_opts' ); 

EDIT: Хорошо, мне удалось отследить его до следующих строк внутри функции get_permalink() .

 if ( is_object($id) && isset($id->filter) && 'sample' == $id->filter ) { $post = $id; $sample = true; } else { $post = &get_post($id); $sample = false; } 

Итак, теперь мой Q: Как я могу избежать использования else части, которая вызывает get_post() и выполняет дополнительный запрос?


EDIT 2: Теперь выяснилось, что docBlock get_permalink() не так, как Codex . Вы также можете передать весь объект $post в функцию. Это решает часть if ( is_object($id) .

Все еще открыто: откуда я могу получить $post->filter со значением 'sample' ?


EDIT 3: добавление $post->filter = 'sample' для каждого объекта post решает проблему. Но остается то, что я могу что-то сломать. 'sample' в $id/$post->filter кажется довольно странным, и я не могу узнать, откуда он.

Solutions Collecting From Web of "Почему `get_permalink ()` создает добавление. Запрос БД без $ post-> filter?"