Как сопоставить поля записей wordpress через плагин WP All Import?

Ссылка скопирована
1 ответ

Добрый день! Ситуация такая - у нас есть сайт на котором выгружаются треки от логистической компании. Клиенты вносят свои треки, а мы с помощью WP All Import синхронизируем их с выгрузкой от логиста. Но проблема в том, что логист к нашим номерам треков часто добавляет какие то свои приставки. И при выгрузке если номер трека не совпадает с тем, что в табличке от логиста, он пропускает его и данные по треку не обновляются. Как прописать в WP All Import, чтобы он сопоставлял записи так, чтобы он мог выгружать запись при условии ,что в title (мы title берем за условие) содержится хотя бы часть нужного нам текста.

Пример клиент заносит трек 9261290336107502977461 (title записи). У логиста он выглядит так 420198049261290336107502977461. Это один и тот же трек, но его не пропускает на обновление WP ALL Import, так как не совпадение. Как сделать так, что бы он его пропускал на обновление? Где то настройки в нем должны быть такие

Дополнительно:

Почему не синхронизацировать по ID (или другим полям)?

  • Refguser, идет синхронизация по номеру трека. Там других полей нет. А номера треков отличаются у логиста и те, что вносят пользователями приставками которые добавляет логист. Там 2 поял - номер трека и его статус. По другим полям не получится синхронизировать
  • lupinosov, показывай структуру (поля) файла импорта.
  • Refguser, там дав поля track-number (это title для записи) и статус
  • lupinosov, ну тогда готовь файл прежде чем скармливать его плагину. Удали в экселе (или аналоге) "добавку". Для этого можно написать макрос чтобы одной кнопкой делалось.

    Или, как вариант скрипт на php - скормил ему csv а на выходе получил с правильными кодами.

  • Refguser, ну вот я так и делаю) проблема в том - я не знаю всех приставок)) Они могут быть разные
  • lupinosov, их и не нужно знать. Нужно пользоваться регулярками - удалить (или оставить) только нужно кол-во символов
  • Refguser, но треки имеют разные длины и разные приставки могут устанавливаться логистом. Я не могу их знать каждый раз. Но основной трек остается одинаковым
  • lupinosov, если длина приставки и/или длина основного трека гуляет (в общем нет единственно верного признака отсечки), тогда задача не решаемая технически (без смены структуры данных). Только организационно.
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Игорь Волков Ответ

    В WP All Import сопоставление записей нужно строить вокруг уникального ключа. Если логист добавляет к вашему трек-номеру приставки, прямое сравнение “как есть” не сработает. Нужно нормализовать значение: убрать приставки, пробелы, лишние символы или выделить ваш внутренний номер регуляркой.

    В WP All Import можно использовать PHP-функции в поле сопоставления. Например, создать функцию в functions.php или отдельном плагине:

    function normalize_track_number($value) {
        $value = trim((string) $value);
        $value = mb_strtoupper($value);
        $value = preg_replace('/[^A-ZА-Я0-9-]/u', '', $value);
     
        // пример: убрать известные приставки логиста
        $value = preg_replace('/^(LOG-|TRK-|CN-)/u', '', $value);
     
        return $value;
    }

    function normalize_track_number($value) { $value = trim((string) $value); $value = mb_strtoupper($value); $value = preg_replace('/[^A-ZА-Я0-9-]/u', '', $value); // пример: убрать известные приставки логиста $value = preg_replace('/^(LOG-|TRK-|CN-)/u', '', $value); return $value; }

    Затем в WP All Import используйте нормализованное значение как Unique Identifier или записывайте его в meta-поле и обновляйте записи по нему.

    Если приставки разные и непредсказуемые, лучше хранить два поля:

    • оригинальный трек логиста;
    • нормализованный внутренний трек.

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

    Если номер всегда находится внутри строки, можно вытаскивать его регуляркой. Например, если ваш номер — 8-12 цифр:

    function extract_internal_track($value) {
        if (preg_match('/d{8,12}/', $value, $m)) {
            return $m[0];
        }
        return trim($value);
    }

    function extract_internal_track($value) { if (preg_match('/d{8,12}/', $value, $m)) { return $m[0]; } return trim($value); }

    Перед массовым импортом обязательно сделайте dry run на копии и проверьте 20-30 строк: что обновилось, что создалось заново, какие номера не совпали.

    Итог: не пытайтесь сопоставлять грязные треки напрямую. Нормализуйте номер функцией и используйте уже очищенное значение как ключ обновления в WP All Import.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно