wp_insert_term возвращает: срок действия ссылки, по которой вы перешли, истек.

Вопрос или проблема

Как следует из названия, при попытке программатически вставить несколько терминов, WordPress возвращает сообщение Ссылка, по которой вы следовали, истекла. хотя значения PHP в .htaccess и php.ini были обновлены.

Код, пытающийся вставить термины, выглядит следующим образом:

add_action('init', function () {
    $taxonomyName="category";

    $states = [
        "AK" => "Аляска",
        "AL" => "Алабама",
        "AR" => "Арканзас",
        "AS" => "Американское Самоа",
        "AZ" => "Аризона",
        "CA" => "Калифорния",
        "CO" => "Колорадо",
        "CT" => "Коннектикут",
        "DC" => "Округ Колумбия",
        "DE" => "Делавэр",
        "FL" => "Флорида",
        "GA" => "Джорджия",
        "GU" => "Гуам",
        "HI" => "Гавайи",
        "IA" => "Айова",
        "ID" => "Айдахо",
        "IL" => "Иллинойс",
        "IN" => "Индиана",
        "KS" => "Канзас",
        "KY" => "Кентукки",
        "LA" => "Луизиана",
        "MA" => "Массачусетс",
        "MD" => "Мэриленд",
        "ME" => "Мэн",
        "MI" => "Мичиган",
        "MN" => "Миннесота",
        "MO" => "Миссури",
        "MS" => "Миссисипи",
        "MT" => "Монтана",
        "NC" => "Северная Каролина",
        "ND" => "Северная Дакота",
        "NE" => "Небраска",
        "NH" => "Нью-Гэмпшир",
        "NJ" => "Нью-Джерси",
        "NM" => "Нью-Мексико",
        "NV" => "Невада",
        "NY" => "Нью-Йорк",
        "OH" => "Огайо",
        "OK" => "Оклахома",
        "OR" => "Орегон",
        "PA" => "Пенсильвания",
        "PR" => "Пуэрто-Рико",
        "RI" => "Род-Айленд",
        "SC" => "Северная Каролина",
        "SD" => "Южная Дакота",
        "TN" => "Теннесси",
        "TX" => "Техас",
        "UT" => "Юта",
        "VA" => "Вирджиния",
        "VI" => "Виргинские острова",
        "VT" => "Вермонт",
        "WA" => "Вашингтон",
        "WI" => "Висконсин",
        "WV" => "Западная Вирджиния",
        "WY" => "Вайоминг",
    ];
    foreach ($states as $slug => $name) {
        wp_insert_term($name, $taxonomyName, [
            'slug' => $slug,
        ]);
    }
}, 999);

Значения в .htaccess и php.ini следующие:

   max_execution_time 5000
   max_input_time 5000
   max_input_vars 5000
   memory_limit 1000M
   post_max_size 750M
   session.gc_maxlifetime 1440
   upload_max_filesize 750M

Что я упустил?

Ответ или решение

Ошибка "The link you followed has expired" в WordPress, обычно связана с ограничениями, установленными в конфигурационных файлах PHP, и возникает при попытке управлять сроком выполнения скриптов или чрезмерно больших загрузках данных. Хотя вы уже обновили значения в файлах .htaccess и php.ini, все же проблема сохраняется. Давайте рассмотрим возможные причины и решения для устранения этой ошибки.

Теория

Когда PHP-скрипт выполняется в течение длительного времени, сервер может прервать его выполнение, если он превышает установленные лимиты на выполнение или работу с входными данными. Это объясняет, почему изменение max_execution_time или max_input_time может быть критично. Однако, несмотря на значительное увеличение этих параметров, ошибка все еще возникает. Скорее всего, это связано с тем, что ваши изменения не вступили в силу по ряду причин:

  1. Неправильная конфигурация Apache или PHP:

    • Изменения, внесенные в .htaccess и php.ini, могут не влиять на текущую версию PHP, используемую вашим сервером. Например, если ваш хостинг использует специфичную систему управления, как это бывает в некоторых панелях (например, cPanel), изменения могут быть локализованы в другом файле конфигурации.
  2. Кеширование конфигурации:

    • Некоторые серверы могут кешировать конфигурационные параметры. Перезапуск сервера или перезагрузка PHP может помочь во вступлении изменений.
  3. Ограничение со стороны хостинга:

    • Некоторые хостинг-провайдеры устанавливают жесткие лимиты на выполнение скриптов, которые вы не можете увеличить без перехода на более премиум-уровень услуги.

Пример

Расмотрим код, представленный в вашем вопросе:

add_action('init', function () {
    $taxonomyName = "category";
    $states = [ /* список штатов */ ];

    foreach ($states as $slug => $name) {
        wp_insert_term($name, $taxonomyName, [
            'slug' => $slug,
        ]);
    }
}, 999);

Этот код вставляет множество терминов в таксономию "category". Потенциально, выполнение такой операции через init может вызывать истощение ресурса, вызывая проблему. Даже при увеличенных лимитах в PHP, такие массовые операции следует проводить с осторожностью.

Применение

Что можно сделать в вашей ситуации:

  1. Проверка конфигурации PHP:

    • Убедитесь, что ваши изменения в файлах .htaccess и php.ini действительно изменяют конфигурацию. Вы можете создать тестовый PHP-файл с вызовом phpinfo() и распечатать все текущие настройки PHP, чтобы убедиться, что изменения видны и применимы.
  2. Оптимизация кода:

    • Разделите ваши операции добавления терминов так, чтобы они выполнялись в несколько этапов. Вместо того чтобы добавлять все состояния за один раз, используйте крон-задачи или разделите нагрузку на несколько транзакций.
  3. Обновление и перезагрузка:

    • Перезапустите ваш веб-сервер или службу PHP-FPM, чтобы изменения в конфигурации вступили в силу.
  4. Журналирование и отладка:

    • Добавьте журналирование в ваш код, чтобы определять, где именно процесс может занимать слишком много времени. Это позволит понять, какие операции требуют больше времени и ресурсов.
  5. Связь с хостинг-провайдером:

    • Если изменения ни к чему не привели, свяжитесь с вашим хостинг-провайдером для получения информации о возможных ограничениях на уровне сервера.
  6. Рассмотрение альтернативных решений:

    • Посмотрите, возможно ли использовать WP-CLI для массовых операций с терминами. WP-CLI работает в командной строке и позволяет выполнять многие задачи без ограничения времени PHP.

Применение вышеуказанных рекомендаций и тщательное изучение конфигурационных файлов и системного окружения поможет вам устранить проблему с истекшей ссылкой в WordPress. Это позволит вашему коду работать эффективно и устойчиво в долгосрочной перспективе.

Оцените материал
Добавить комментарий

Капча загружается...