2013-11-11 3 views
1

Wordpress предлагает простой способ импорта и экспорта своих данных с использованием XML. Это делается с помощью встроенного импортера на основе графического интерфейса. Однако я хотел бы иметь возможность импортировать определенные файлы XML из моей темы (после активации или после выполнения функции).Как импортировать XML-данные в Wordpress программно?

Мой случай: Хотя есть несколько плагинов, которые могут создавать фиктивный контент для вас, я не мог найти способ сделать то, что я пытаюсь сделать, - импортировать набор полей ACF, хранящихся в XML-файле.

Есть ли какой-либо способ сделать это?

+1

вниз голосование вопроса без каких-либо комментариев или указателя, что случилось с ним вряд ли способствует ее решению. –

+0

он был закрыт как не по теме, но никто не думал упоминать wordpress SE? wordpress.stackexchange.com. – jammypeach

ответ

6

Обновление: эта функция предназначена для обработки данных XML и ограничена ACF до версии 4. ACF 5 экспортирует свои поля в виде данных JSON.

Решение превратилось в Wordpress plugin.

Вот решение моей проблемы.

function insert_acf_field($xml_string, $allow_duplicates = false) { 

// Parse ACF post's XML 
$content = simplexml_load_string($xml_string, 'SimpleXMLElement', LIBXML_NOCDATA); 

// Parse XML post attributes containing fields 
$wp_post_attributes = $content->channel->item->children('wp', true); 

# Copy basic properties from the exported field 
$wp_post_data = array(
    'post_type' => 'acf', 
    'post_title' => $content->channel->item->title, 
    'post_name' => $wp_post_attributes->post_name, 
    'post_status' => 'publish', 
    'post_author' => 1 

); 

$the_post = get_page_by_title($content->channel->item->title, 'OBJECT', 'acf'); 

# Execute only if doesn't exist already 
if (!$the_post || $allow_duplicates == true) { 
    $post_id = wp_insert_post($wp_post_data); 
} 
else { 
    $post_id = $the_post->ID; 
} 

$wp_post_meta = $content->channel->item->children('wp', true); 

if($wp_post_meta) { 
    foreach ($wp_post_meta as $row) { 

     // Choose only arrays (postmeta) 
     if(count($row) > 0) { 
      // using addlashes on meta values to compensate for stripslashes() that will be run upon import 
      update_post_meta($post_id, $row->meta_key, addslashes($row->meta_value)); 
     } 

    } 
} 
} 

Вот как его использовать:

Функция ожидает, по крайней мере, $xml_string параметр будет принят. Он должен содержать содержимое XML-файла, созданного плагином ACF при экспорте поля ACF (сообщение типа acf).

Функция попытается создать один новый пост ACF, если он уже не существует, а затем заполнить его полями. Чтобы вставить более одного поля (клона) с тем же заголовком, вы должны передать true в качестве второго параметра.

Есть несколько вопросов, которые предстоят решить, но функция в его текущем состоянии должна быть доступна

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