将多个XML字段解析为元数据(自定义字段)

时间:2018-04-05 05:06:49

标签: php xml wordpress custom-fields

我正在尝试找到用于从XML Feed创建多个元值的正确PHP代码。

目前我正在从插件的另一部分复制代码。它确实创建了第一个自定义字段,但我需要它为接下来的5个XML字段做同样的事情。

XML代码段:

<menu_items type="array">
<menu_item>
<description/>
<gluten_free type="boolean">false</gluten_free>
<id type="integer">18780</id>
<name>Gyro Wrap</name>
<vegan type="boolean">false</vegan>
<vegetarian type="boolean">false</vegetarian>
<formatted_price>Min: $6.00 Max: $0.00</formatted_price>
</menu_item>
<menu_item>
<description/>
<gluten_free type="boolean">false</gluten_free>
<id type="integer">18781</id>
<name>Chicken Shawerma Wrap</name>
<vegan type="boolean">false</vegan>
<vegetarian type="boolean">false</vegetarian>
<formatted_price>Min: $6.00 Max: $0.00</formatted_price>
</menu_item>
<menu_item>
<description/>
<gluten_free type="boolean">false</gluten_free>
<id type="integer">18782</id>
<name>Spicy Chicken Wrap</name>
<vegan type="boolean">false</vegan>
<vegetarian type="boolean">false</vegetarian>
<formatted_price>Min: $7.00 Max: $0.00</formatted_price>
</menu_item>
<menu_item>
<description/>
<gluten_free type="boolean">false</gluten_free>
<id type="integer">18783</id>
<name>Falafel Wrap</name>
<vegan type="boolean">false</vegan>
<vegetarian type="boolean">true</vegetarian>
<formatted_price>Min: $6.00 Max: $0.00</formatted_price>
</menu_item>
<menu_item>
<description/>
<gluten_free type="boolean">false</gluten_free>
<id type="integer">18784</id>
<name>Baklava</name>
<vegan type="boolean">false</vegan>
<vegetarian type="boolean">true</vegetarian>
<formatted_price>Min: $3.00 Max: $0.00</formatted_price>
</menu_item>
</menu_items>

我需要将EACH字段放入其自己的自定义字段中。

插件中的当前代码:

        $post_meta = array();
        if(!empty($vendor->menu_items)){
            $i = 0;
            foreach($vendor->menu_items->menu_item->name as $menu_item_name){
                $post_meta["marcato_menu_name_".$i] = $menu_item_name;
                $i++;
            }
        }

single custom field showing up on WordPress, but I need 5 different ones

我正在学习PHP,请原谅我的新闻..提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以循环浏览$vendor->menu_items->menu_item->name而不是遍历$vendor->menu_items->menu_item,而每个menu_item使用name属性。

$menu_item->name的类型为SimpleXMLElement,因此您可以将其投放到(string)

if(!empty($vendor->menu_items)){
    $i = 0;
    foreach($vendor->menu_items->menu_item as $menu_item){
        $post_meta["marcato_menu_name_".$i] = (string)$menu_item->name;
        $i++;
    }
}

Demo php