Intereting Posts
WordPress не может определить размер эскизов? Случайная фотография WP Страница Navi. 404 при использовании сообщений на странице параметра Плагин WordPress обновляет / устанавливает файл как неизменный для предотвращения изменения определенных файлов? Проверьте, является ли пользовательский пост родителем? Настроить отдельные части списка – Список категорий Плагин сообщений Легкий способ импортировать сообщение из Word? Панель администратора и проблема с фиксированным заголовком? Запретить пользователям авторскую роль от редактирования уже ожидающих сообщений Multisite: различия между субдоменом и режимом подкаталога? Может ли это быть после установки? Автоматически добавлять абзацы в настраиваемое поле? Таможенная таксономия как категории: Удалить вкладку «наиболее часто используемые»? Как работает короткий код? Как изменить контактный формуляр 7 Выход успешных / ошибок ответа Сортировка по типу пользовательской публикации (множественный цикл)

Можем ли мы получить сообщение без пули?

Когда я вставляю сообщение, я обнаружил, что есть медленный вызов wp_unique_post_slug изнутри insert_post (в базе данных, которую я использую для проверки, есть 155 000 сообщений – вживую будет намного больше). Поскольку я не верю, что слизня важна для того, что я делаю (человек, который просматривает наш сайт, вероятно, никогда не увидит ни одного просмотра страницы для этого типа сообщения), есть ли что-нибудь, что я могу сделать, это может либо ускорить звоните или (еще лучше) устраните его.

Глядя на код для insert_post, я не мог видеть способ сделать это без изменения ядра (что я бы предпочел не делать). Код, который я использую:

$post = array( 'post_title' => 'post_title', 'post_type' => 'character', 'post_status' => 'publish' ); $post_id = wp_insert_post( $post ); 

Редактировать:

Как представляется, людям не хватает информации, которую я написал в этом вопросе. Вот проблема, ясная, как я могу это сделать.

Проблема:

Медленная работа. Я отследил это до функции wp_unique_post_slug вызванной из wp_insert_post

Код, вызывающий wp_insert_post :

 $post = array( 'post_title' => 'post_title', 'post_type' => 'character', 'post_status' => 'publish' ); $post_id = wp_insert_post( $post ); 

(да, это все строки, а не переменные, присваиваемые $ post)

Дополнительная информация:

Статус публикации должен быть «опубликован», поскольку эти сообщения предоставляются пользователю (хотя и не в стандартном стиле WordPress).

Я мог бы исправить это, отредактировав ядро, но это идея BAD по ряду причин.

Слиз не важен, так как пользователь не должен переходить на одностраничный вид этого типа контента.

Solutions Collecting From Web of "Можем ли мы получить сообщение без пули?"

Я знаю, что это действительно старый вопрос, но сегодня я имел дело с чем-то похожим, и я нашел решение – если wp_unique_post_slug() является узким местом производительности, а значение post_name не имеет значения, тогда задайте post_name manualy для некоторого случайного значения .

В последнее время wp_insert_post действие wp_insert_post слишком долго (20-30 с). Он сохраняет заказ пользовательского почтового типа order не видимый посетителям, с post_title = "Order" (название сообщения не имеет значения). Это привело к тысячам сообщений с заголовком «Заказ», и WP автоматически генерировал почтовые имена ( post_name ) как «порядок-1», «порядок-2», «заказ-3», … «порядок-6152». ..

И с каждым wp_insert_post WP искали бесплатное почтовое имя, начиная с «order» и увеличивая число суффикса, и каждый шаг был одним из запросов БД. Таким образом, в моем случае WP выполнил более 6 000 запросов БД до вставки одного сообщения в базу данных.

Установка случайного post_name в вызове wp_insert_post () отключает вызов wp_unique_post_slug ().

Проверка источника -> Отменить случаи

Когда вы посмотрите на источник wp_unique_post_slug() , вы увидите, что первые две строки

 if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) OR ( 'inherit' == $post_status AND 'revision' == $post_type ) ) return $slug; 

Это означает, что нет ничего рассчитанного, запрошенного или обработанного, если

  • Статус сообщения – черновик , ожидающий или авто-черновик

ИЛИ

  • Статус сообщения inherit а Post Type – revision

Как вы можете видеть из источника wp_insert_post() где wp_unique_post_slug() , он передает статус точно так же, как и вы.

 $post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent ); 

Возможное решение

В случае, если тип сообщения не является общедоступным, но доступен только из пользовательского интерфейса администратора, тогда вам просто нужно игнорировать статус сообщения, настроить его на черновик, ожидание, что угодно (при вставке сообщения), и вы в порядке, и ничего не будет обрабатываться.

Каждая другая попытка завершится неудачей, так как $wpdb->get_var() не имеет фильтра.

MAYBE … решение

Вы все равно можете использовать drop. Замена класса $wpdb / object. Просто скопируйте содержимое файла ~/wp-includes/wp-db.php в новый файл с именем db.php и поместите его в папку ~/wp-content (или как вы его назвали).

Затем измените $wpdb->get_var() чтобы прервать его, если он вызывается из контекста wp_unique_post_slug() . Тогда это зависит от вашего творчества и навыков, если это быстрее, чтобы прервать это.

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

Заметки:

  • Если вы оставите аргумент post_status пустым, он автоматически назначит draft .
  • Для типов post post, когда ни одна категория не назначена, автоматически присваивается категория по умолчанию. Но только если статус сообщения не является auto-draft .
  • Если post_date_gmt пуст, и вы добавляете черновик, тогда значение будет автоматически установлено на '0000-00-00 00:00:00' .
  • Если post_name (заголовок) пуст, а статус draft , auto-draft или pending , тогда заголовок не будет очищен.
  • Не устанавливайте дату публикации сейчас или ранее, так как статус будет преобразован в «будущее» (в случае, если статус все еще «публикуется»).