Как сделать замену шорткода переменной?

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

Имеется текст

"Здравствуйте, уважаемый [name-s4CwX], Спасибо Вам за регистрацию в [company-dJ76dGkddbi-daXq]. Вы указали телефон [input-text-ubdvlkdB] ..... "

"Здравствуйте, уважаемый [name-s4CwX], Спасибо Вам за регистрацию в [company-dJ76dGkddbi-daXq]. Вы указали телефон [input-text-ubdvlkdB] ..... "

И имеется POST массив с такими же именами

$_POST["name-s4CwX"]="Николай"; $_POST["company-dJ76dGkddbi-daXq"]="Рога и копыта"; $_POST["input-text-ubdvlkdB"]="+7 000 00 00 00";

$_POST["name-s4CwX"]="Николай"; $_POST["company-dJ76dGkddbi-daXq"]="Рога и копыта"; $_POST["input-text-ubdvlkdB"]="+7 000 00 00 00";

Как можно сделать замену шорткодов нужными переменными? Прикол в том что чифры в шорткодах формируются рандомно.

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

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

  • Хеш код у каждого щорткода разный - name-s4CwX, name-dJ76dGkddbi-daXq, name-grt65Enhg

    Поєтому я думал сначала сделать регуляркой выборку всех шорткодов, чтоб иметь их массив:
    $from = ["[name-s4CwX]", "[company-dJ76dGkddbi-daXq]", "[input-text-ubdvlkdB]"]
    и потом как-то поменять в цикле
    str_replace($from[$i], $_POST[$from[$i]], $text);
    Но что-то туплю к вечеру, а сроки подгорают (

  • $text="Здравствуйте, уважаемый [name-s4CwX], Спасибо Вам за регистрацию в [company-dJ76dGkddbi-daXq]. Вы указали телефон [input-text-ubdvlkdB] ..... "; foreach ($_POST as $key => $value) {          $text = str_replace("["$.key."]", $value, $text); }

    $text="Здравствуйте, уважаемый [name-s4CwX], Спасибо Вам за регистрацию в [company-dJ76dGkddbi-daXq]. Вы указали телефон [input-text-ubdvlkdB] ..... "; foreach ($_POST as $key => $value) { $text = str_replace("["$.key."]", $value, $text); }

    Раз сроки горят, то ответ как на фрилансе ...
    Ну и ессно [name-s4CwX] в перемнной $text должно совпадать с ключем в $_POST

    • Огромное спасибо!

    Здесь можно обойтись и без регулярных выражений:
    https://www.php.net/manual/ru/control-structures.f...
    https://www.php.net/manual/ru/function.str-replace.php

    • К сожалению обычными реплейсами тут не обойтись - я не знаю наперед какие шорткоды будут в тексте
    • Алекс Иванов, предлагаю другой вариант, делаем строку
      Здравствуйте, уважаемый [name], Спасибо Вам за регистрацию в [company]. Вы указали телефон [input-text]

      Здравствуйте, уважаемый [name], Спасибо Вам за регистрацию в [company]. Вы указали телефон [input-text]

      Теперь у вас есть статичные теги (они у вас и до этого были в тексте, просто имена изменили).
      И теперь можно сделать str_replace(). А при помощи mb_stripos() смотрим какой у нас ключ в массиве: name, company или input-text. ИКогда находим соотв. ключ, то меняем тег в тексте

      Или символы и в "тексте", и в "массиве" - рандомные?

    • maksam07, Я бы рад, но повлиять на это не могу. Строка уже подается, так же как и POST запрос (
    • Алекс Иванов, строка и пост запрос подаются одновременно? То есть строка находится в пост запросе?
    • maksam07, да, строка тоже идет в ПОСТ $_POST['thank_you_text']
    • Алекс Иванов, так если ключи в $_POST совпадают с шорткодами, в чём проблема?
    • Михаил Ливач, не могу понять как их сопоставить (
    • Алекс Иванов, 2 ссылки из моего основного комментария решают эту проблему)
    • maksam07, вы могли бы набросать как?
    • Алекс Иванов, все данные из запроса предлставьте
    • maksam07, Вот такой пост приходит на страницу
      $_POST["name-s4CwX"]="Николай";
      $_POST["company-dJ76dGkddbi-daXq"]="Рога и копыта";
      $_POST["input-text-ubdvlkdB"]="+7 000 00 00 00";
      $_POST['thank_you_text'] ="Здравствуйте, уважаемый [name-s4CwX], Спасибо Вам за регистрацию в [company-dJ76dGkddbi-daXq]. Вы указали телефон [input-text-ubdvlkdB] ..... "

      Повторю - то чтожирным - меняется при каждой итерации. Хз зачем так сделали, но я ен могу на это повлиять

    • foreach ($array as $k => $v) {     $text = str_replace("[$k]", $v, $text); }

      foreach ($array as $k => $v) { $text = str_replace("[$k]", $v, $text); }

      Алекс Иванов, если нужно удалить 'thank_you_text' из массива, то поможет unset

    • dodo512, выходит все же надо регуляркой в массив вынести все шорткоды, как ни крути. верно?
    • Алекс Иванов, вам уже несколько часов пытаются втолковать что достаточно foreach и str_replace.
      Вместо $array ставьте $_POST.
    • dodo512, так надо иметь массив того что и на что менять же (.
      Надо привязать $k $v к моим переменным которые в тексте
    • dodo512, или вы имеете ввиду что $array - это мой $_POST?
    • Алекс Иванов, так массив того что и на что менять уже есть.
      $array - это ваш $_POST.
      foreach кладёт ключ в $k и значение в $v.
      Осталось передать нужные значения в str_replace.
      https://3v4l.org/EREg7
    • Алекс Иванов, у вас какой-то когнитивный затык:

      $_POST["name-s4CwX"]="Николай";
      $_POST["company-dJ76dGkddbi-daXq"]="Рога и копыта";
      $_POST["input-text-ubdvlkdB"]="+7 000 00 00 00";
      $_POST['thank_you_text'] ="Здравствуйте, уважаемый [name-s4CwX], Спасибо Вам за регистрацию в [company-dJ76dGkddbi-daXq]. Вы указали телефон [input-text-ubdvlkdB] ..... "

      Вы видите меняющуюся часть, но не видите, что в $_POST['thank_you_text'] ключи представлены целиком - и префикс, и меняющийся суффикс. И шорткоды в $_POST['thank_you_text'] меняются сообразно остальным ключам в $_POST. Поэтому программно нет разницы, есть там что-то меняющееся или нет, вы банальным str_replace() делаете замену в цикле, как выше показал dodo512

    Нужно решить такую задачу?

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

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

    Для замены шорткода переменной необходимо использовать функцию обратного вызова (callback function), которая будет обрабатывать шорткод и возвращать значение переменной, которую необходимо подставить вместо шорткода.

    Прежде всего, необходимо определить шорткод, который будет заменяться переменной. Например, если у нас есть шорткод [my_variable], который мы хотим заменить переменной $my_variable, то можно использовать следующий код:

    ```php
    function replace_my_variable_shortcode() {
    return $my_variable;
    }
    add_shortcode('my_variable', 'replace_my_variable_shortcode');
    ```

    В данном примере мы создаем функцию replace_my_variable_shortcode, которая возвращает значение переменной $my_variable. Затем мы используем функцию add_shortcode, чтобы связать шорткод [my_variable] с функцией замены replace_my_variable_shortcode.

    После этого в любом месте нашего сайта, где будет использоваться шорткод [my_variable], он будет автоматически заменяться значением переменной $my_variable.

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

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

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

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

    комментарий

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

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