1

Wordpress では、XML を使用してデータを簡単にインポートおよびエクスポートできます。これは、GUI ベースの組み込みインポーターで行われます。ただし、私がやりたいことは、テーマ内から特定の XML ファイルをインポートできるようにすることです (アクティブ化時または関数の実行後)。

私の場合: ダミー コンテンツを作成できるプラグインがいくつかありますが、XML ファイルに格納された ACF フィールドのセットをインポートするという、私がしようとしていることを実行する方法が見つかりませんでした。

それを行う方法はありますか?

4

1 に答える 1

6

更新: この関数は XML データを処理することを目的としており、バージョン 4 までの ACF に限定されています。ACF 5 はそのフィールドを JSON データとしてエクスポートします。

このソリューションは、Wordpressプラグインに変わりました。

これが私の問題の解決策です。

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パラメーターが渡されることを期待しています。acfこれには、ACF フィールド (投稿タイプ)のエクスポート時に ACF プラグインによって生成される XML ファイルの内容が含まれている必要があります。

この関数は、新しい ACF 投稿が存在しない限り 1 つ作成し、フィールドを入力しようとします。同じタイトルの複数のフィールド (クローン) を挿入するにはtrue、2 番目のパラメーターとして渡す必要があります。

まだ解決すべき問題がいくつかありますが、現在の状態で機能を使用できるはずです

于 2013-11-12T14:00:33.570 に答える