WP ALL Import Load Фильтрация изображений по атрибуту узла xml

У меня есть эти узлы XML

<file_allegati>
  <allegato id="0" planimetria="0" type="foto">
    <id>0</id>
    <file_path>https://##.jpg </file_path>
  </allegato>
  <allegato id="1" planimetria="1" type="planimetria">
    <id>1</id>
    <file_path>https://##.jpg </file_path>
  </allegato>
</file_allegati>

И я хотел бы разделить изображение с атрибутом "planimetria=1" и записать file_path в пользовательское поле.

Я не могу использовать метод [FOREACH] для wpallimportso. Я пытаюсь вызвать функцию с именем set_planimetrie(file_allegati[1])

И я написал эту функцию PHP, но она не работает.

function set_planimetrie( $allegati ) {
    $result="";
    $xml = new SimpleXMLElement($allegati); 

    foreach($xml->children() as $allegato)
    { 
        if($allegato['type']=='planimetria' && $allegato['planimetria']==1){
            if( $result != ''){$result .=',';}
            $result.= $allegato->file_path;    
        }
    return $result;
    }
}

1 ответ

Вы получаете только первое значение foreach потому что вы используете return утверждение внутри foreach.

Тип возврата $allegato['type'] это SimpleXMLElement. Вы можете получить строку с помощью __toString или использовать (string),

Если вы поместите оператор return за пределы foreach и используете (string) чтобы получить значение, ваш код будет выглядеть так:

function set_planimetrie($allegati)
{
    $result = '';
    $xml = new SimpleXMLElement($allegati);

    foreach ($xml->children() as $allegato) {
        if ((string)$allegato['type'] === 'planimetria' && (string)$allegato['planimetria'] === "1") {
            if ($result !== '') {
                $result .= ',';
            }
            $result .= $allegato->file_path;
        }
    }
    return $result;
}

Пример вывода php

Другие вопросы по тегам