PHP - значение выходного массива, содержащее заданный текстовый маркер c - PullRequest
1 голос
/ 19 февраля 2020

Я использую функцию для вывода коллекции продуктов в Shopify на страницу WordPress.

Большинство данных отображаются корректно, за исключением пользовательского значения, которое вводится в качестве тега в Shopify. Используя API, я затем пытаюсь получить этот спецификационный c тег для субтитра продукта, который отформатирован с помощью att: Subtitle: перед каждым пользовательским значением / текстом продукта.

Это код, который я получил to (я прокомментировал другие неудачные попытки в середине) - это внутри общего кода, чтобы показать 4 продукта из коллекции Shopify:

 // Using tags to output custom data from products
$tags = $current_product['tags'];

// $tags is a string, this turns the values into an array
$product_tags = explode(',', $tags);

// Evaluate if there is a string with att:Subtitle in the product tags
// https://tecadmin.net/check-string-contains-substring-in-php/
$subtitle_attribute_key = "att:Subtitle:";

if (strpos($tags, 'att:Subtitle:') !== false) {  
    // Returns a numbered value corresponding to my subtitle attribute
    // $key = array_search($subtitle_attribute_key, $product_tags);
    $sub = strpos($tags, $subtitle_attribute_key);

    // Turns the numbered value into a text value
    // $numArray = explode(" ", $sub);
    // var_dump($numArray);
    $value = print_r($sub, true);
    // $value = array_search("att:Subtitle:",$product_tabs);
    // $value = array_search("att:Subtitle:", $tabs); // Warning: array_search() expects parameter 2 to be array, null given
    // $result = $product_tags['$value']; // my attempt to return the text

    // Remove att:Subtittle: in front of the subtitle value to output the clean final value
    $subtitle = ltrim($value, 'att:Subtitle:');
}

До сих пор это получается как числовое значение, где я Я показываю $ subtitle ... но я не могу понять, как вместо этого отобразить пользовательское текстовое значение.

Есть идеи?

Спасибо

Редактировать: Я работать с продуктами, которые имеют несколько тегов, и я не контролирую их. Из тегов я пытаюсь найти тот, который начинается с att: Subtitle:, но показывается только пользовательское значение после этого маркера.

Когда я отображаю теги $, ist выглядит примерно так:

att:Benefit:balance, att:Perfect:Combination Skin, att:Size: 1.8 oz, att:Subtitle: Multi-Tasking Product, Key Ingredient 1, Key Ingredient 2, Essentials, meta-related-product-xyz, meta-related-product-brandname

У всех будет разный список тегов

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Конечно, это число. Вы получаете число от strpos() и в конечном итоге пытаетесь запустить на нем ltrim().

Если вы ожидаете, что нужный текст будет в $tags сразу после 'att: Subtitle:' и в этой строке больше ничего нет, $subtitle = substr($tags, strpos('att:Subtitle:') + strlen('att:Subtitle:')); должен дать это вам. Если вы ожидаете, что он, возможно, будет элементом в массиве $product_tags, необходимо l oop (я предполагаю, что он появляется не более одного раза):

foreach ($product_tags as $product_tag) {
    if (strpos($product_tag, 'att:Subtitle:') !== false) { 
        $subtitle = substr($product_tag, strpos($product_tag, 'att:Subtitle:') + strlen('att:Subtitle:'));
        break;
    }
}
0 голосов
/ 19 февраля 2020

Итак, насколько я понимаю, вы пытаетесь избавиться от 'att: Subtitle:' из тегов в описании ваших продуктов? возможно, вам следует попробовать заменить это значение в вашем массиве тегов

// Using tags to output custom data from products
$tags = $current_product['tags'];

// $tags is a string, this turns the values into an array
$product_tags = explode(',', $tags);

// Get rid of attribute on product tag
for($i = 0; $i < count($product_tags); $i++){
    $subtitle = str_replace(':att:Subtitle','',$product_tags[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...