2017-01-15 3 views
0

Я работаю над аддоном для wordpress - woocommerce. Я использую плагин «Woocommerce Product Addons» - с этим аддоном я могу вставить, например, выпадающий список выбора для свойства «цвет», который содержит три цвета - красный, желтый, черный. Этот аддон находится на каждом сайте продукта, но имя формы имеет для каждого продукта другое имя. Именно по этой причине я не знаю, как получить данные с меньшим количеством кода.

На одном сайте продукта я есть список выбора с этим именем:

<select class="addon addon-select" name="addon-12822-variante-0"> 

А на другом сайте продукта я есть один и тот же аддон, но другое название:

<select class="addon addon-select" name="addon-12834-variante-0"> 

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

Мне нужен один код, который может работать на всех сайтах продуктов, вот почему я думал, может быть, я могу как-то вставить регулярное выражение внутри $ _POST ['regex'], но как это работает?

Мне нужно это регулярное выражение "((аддон) - ((d) +) -) (farbe) - (0 | 1 | 2 | 3)".

что в конце концов у меня есть что-то вроде

$variant = $_POST['regexp']; 

, который работает автоматически на каждом сайте продукта.

Я надеюсь, что есть какое-либо обходное решение и заранее спасибо за каждое предложение.

+0

Это делает то, что вы ищете? '/ Addon- [1-9] + - variante- [012] {1} /'. Чтобы проверить, зациклируйте значения post, проверьте, что preg_match истинно, тогда сделайте все, что вам нужно. – atoms

+0

Эй, это не регулярное выражение, которое не работает. Я просто спрашиваю, как использовать в этой позиции регулярное выражение вообще? Потому что я только что нашел функцию php «preg_match», но я думаю, что это не совсем то, что я ищу, или, если это так, я не знаю, как ее использовать внутри $ _POST [''] – kratze

+0

А я вижу жаль. Ок-что-то вроде foreach: atoms

ответ

3

Вы можете использовать preg_grep, чтобы извлечь необходимые элементы из массива $ _POST:

$addonFields = array_flip(preg_grep('(your_pattern)', array_flip($_POST))); 
+0

Спасибо, я думаю, это то, что я ищу. Я попробую и сообщит вам. – kratze

1

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

<?php foreach($_POST as $sPostKey => $sPostVal){ 
    if(preg_match($pattern, $sPostVal)){ 
    //do something with match 
    } 
} ?> 

Предполагая, что $ pattern является регулярным выражением. $ SPostKey ключ и $ sPostVal содержит данные

1

Вы можете использовать array_keys, чтобы получить keys в array и после этого с помощью preg_grep вы можете получить правильный keys. Со следующей строкой вы получите индексный массив со всеми полями addons, содержащимися в $_POSTarray.

Примечание: С array_values вы получите новый array с новым заказали keys, чтобы вы могли получить значение, которое вы хотите получить, что надлежащий индекс.

array_values(preg_grep('/^addon\-\d+\-variante-\d+$/', array_keys($_POST))); 

Здесь Вы Ideone пример, чтобы понять функциональность предыдущего кода.

Теперь, следующая функция получает значение первой addon переменного от $_POST переменных для вас (Предположив, что вы хотите получить одну addon переменного в каждой странице):

function getAddonValue($post){ 

    $reg = '/^addon\-\d+\-variante-\d+$/'; 

    return $post[array_values(preg_grep($reg, array_keys($post)))[0]]; 

} 

Здесь Вы Ideone фрагмент с полным примером.

Смежные вопросы