首页 > 解决方案 > Wordpress - 自定义 PHP 函数,用于将 XML 中的多个节点保存到多个用户元字段中

问题描述

我们有一个 XML,其中包含一个父节点中的多个节点。我会给你下面的例子:

<PARENT>
            <Data>
                <DATE_FIELD>11.07.2018</DATE_FIELD>
                <SUM_AVG/>
                <DOUBLE_AVG/>
                <THIRD_AVG/>
                <FOURTH_AVG>45000.00</FOURTH_AVG>
            </Data>
            <Data>
                <DATE_FIELD>10.08.2018</DATE_FIELD>
                <SUM_AVG>546.45</SUM_AVG>
                <DOUBLE_AVG>472.50</DOUBLE_AVG>
                <THIRD_AVG>180.00</THIRD_AVG>
                <FOURTH_AVG>44453.55</FOURTH_AVG>
            </Data>
            <Data>
                <DATE_FIELD>10.09.2018</DATE_FIELD>
                <SUM_AVG>536.59</SUM_AVG>
                <DOUBLE_AVG>482.36</DOUBLE_AVG>
                <THIRD_AVG>180.00</THIRD_AVG>
                <FOURTH_AVG>43916.96</FOURTH_AVG>
            </Data>
            <Data>
                <DATE_FIELD>12.06.2023</DATE_FIELD>
                <SUM_AVG>995.85</SUM_AVG>
                <DOUBLE_AVG>23.10</DOUBLE_AVG>
                <THIRD_AVG>180.00</THIRD_AVG>
                <FOURTH_AVG>1009.23</FOURTH_AVG>
            </Data>
            <Data>
                <DATE_FIELD>10.07.2023</DATE_FIELD>
                <SUM_AVG>1009.23</SUM_AVG>
                <DOUBLE_AVG>9.80</DOUBLE_AVG>
                <THIRD_AVG>180.00</THIRD_AVG>
                <FOURTH_AVG/>
            </Data>
</PARENT>

我们希望使用WP ALL IMPORT插件将这些多个值存储在 wp_usermeta 表(包含用户自定义字段的表)内的不同自定义字段中。默认情况下,您必须在插件的设置中手动分配相应的节点。

为此,我尝试将自定义 PHP 函数挂接到“ pmxi_saved_post ”操作中,循环遍历“ Data ”节点并将每个节点添加到一个适当单独的命名自定义字段中。因此,对于“数据”中的每个节点,我们必须将其存储到单独的自定义字段中。

问题是它没有在wp_usermeta表中存储任何内容。

这是代码:

add_action('pmxi_saved_post', 'post_saved', 10, 1);

function post_saved($id) {
    foreach( $data as $key => $value ) {
  update_post_meta( $post_id, $key, $value );
}    

标签: wordpressimport

解决方案


我已经设法让它工作,具有以下功能:

function wpallimport_post_saved( $post_id, $xml_data, $is_update ) {
    if(!empty($xml_data->PARENT){
       $xml = $xml_data->PARENT;
       $counter = 1;
       foreach($xml->Data as $counts => $data){
        foreach($data as $key => $user_meta){
            update_user_meta( $post_id, strtolower($key) . "-data-" . $counter , current($user_meta));
        }
        $counter++;
    }
}
}

推荐阅读