0

私はカスタムテーマを作成しており、そのテーマにはdocsのようにacf proが含まれています。テーマは正常に動作しており、テーマ起動時にACFが有効になっています。ここにコードがあります。カスタムテーマまたはプラグインにACF(高度なカスタムフィールド)を含める:配布時にフィールドをエクスポートする

// customize ACF path 
add_filter('acf/settings/path', 'my_acf_settings_path'); 
function my_acf_settings_path($path) { 
    $path = get_stylesheet_directory() . '/inc/advanced-custom-fields-pro/'; 
    return $path; 
} 
// customize ACF dir 
add_filter('acf/settings/dir', 'my_acf_settings_dir'); 
function my_acf_settings_dir($dir) { 
    $dir = get_stylesheet_directory_uri() . '/inc/advanced-custom-fields-pro/'; 
    return $dir; 
} 
// Include ACF 
include_once(get_stylesheet_directory() . '/inc/advanced-custom-fields-pro/acf.php'); 

私は数時間の間に直面している問題は、私がacfの内部でインスタンス化したいグループ/フィールドのためです。私は新鮮なインストールで表示されるいくつかのフィールドグループを持っています。

方法1: 私はacf-jsonというフォルダ内のJSONのようにフィールドをエクスポートした以下は、私が試してみました方法があります。 ACFはそれを認識し、同期フィールドとして表示します。しかし、私はそれを同期しようとすると、それはちょうど新しい空のフィールドを作成します。

方法2:私もこのコードを認識しないPHPファイルとしてフィールド・グループをエクスポートしてから、私のfunctions.phpファイルでそれを含むが、ACF試してみました

+0

これまでやったことはありませんでしたが、フィールドグループとフィールドをプログラマチックに作成する方法があります。次に、フィールドを定義するテーマの中にphpファイルを含めることができます。 https://www.advancedcustomfields.com/resources/register-fields-via-php/ – Joe

+0

ジョーが言いましたのは私がお勧めするものです。私はそれをして、それは動作します。 – Aibrean

+0

ありがとう、私はPHPのエクスポート機能について知っているが、私はより合理化された何かについて考えていた。興味があれば私の答えで私の解決策を説明した。 –

答えて

0

テーマやプラグインにACFを配布するのは、ドキュメントに情報がないためにややこしいことです。面倒なところは、テーマやプラグインを使ってフィールドをエクスポートすることです。これは、ユーザーが他のテーマやプラグインと慣れ親しんでいたこととは異なることをしないようにするためです。私はその手続きを詳しく説明します。

テーマやプラグイン開発のために

:プラグイン開発のためにあなたにそれを追加することができながら、

official docsを参照し、テーマの開発のためのあなたのfunctions.phpファイル内のコードをコピー&ペーストするのは簡単でなければなりませんメインのプラグインファイルこれにより、これらの4つのタスクが達成されます。

  1. クライアントから
  2. ACFのDirに
  3. を追加隠すACF(必要な場合)
  4. ACFのパスを追加しますが、実際には何もしませんがやっていること今までACF

を含めます特別。テーマ/プラグインを有効にするとACFがアクティブになり、同様にテーマ/プラグインの非アクティブ化時にACFが非アクティブになります。

エクスポートフィールド:(JSON同期経由)

この段階では、あなたのテーマ/プラグインを配布する場合、それだけでACFがアクティブになりますが、それはその中の任意のフィールドを持って文句を言いません。 ACFはJSONを使用して、すべてのフィールドとフィールドグループを追跡します。デフォルトでは、ACFはあなたのテーマのルートにあるacf-jsonというフォルダを探します。このフォルダがある場合、ACFは追加または更新する各フィールドグループに新しいjsonファイルを自動的に追加/更新します。

このフォルダの場所は、インクルードフォルダ内に保持したい場合に変更できます。どうやらテーマのデフォルトの場所を変更することはできませんが、プラグインの場合はこのコードを追加することで可能です。あなたは誰かとこのテーマ/プラグインを共有している場合、彼らはACFの内側に行くとき

add_filter('acf/settings/save_json', 'set_acf_json_save_folder'); 
function set_acf_json_save_folder($path) { 
    $path = dirname(__FILE__) . '/includes/acf-json'; 
    return $path; 
} 
add_filter('acf/settings/load_json', 'add_acf_json_load_folder'); 
function add_acf_json_load_folder($paths) { 
    unset($paths[0]); 
    $paths[] = dirname(__FILE__) . '/includes/acf-json'; 
    return $paths; 
} 

今、彼らは同期のための新しいオプションが表示されるはずです。すべてのファイルを同期すると、それらのフィールドが利用可能になります。

SYNCプロセスをAutomatting:

あなたは完全に、その後明らかにあなたがあなたのユーザーがACFと同期フィールド内で行く必要がありカントACFを非表示にする場合。したがって、この場合は、jsonフォルダからすべてのフィールドを自動的に同期するスクリプトが必要です。このコードは、themesのためにfunctions.php内に追加することも、メインのプラグインファイルの中に追加することもできます。前のコードでは、ACFにJSONファイルをどこからロードするかをすでに指示しているので、このスクリプトのパスを変更する必要はありません。あなたが活性化に、あなたのテーマ/プラグインを配布する際に

add_action('admin_init', 'article_gamification_sync_acf_fields'); 
function article_gamification_sync_acf_fields() { 
    // vars 
    $groups = acf_get_field_groups(); 
    $sync = array(); 
    // bail early if no field groups 
    if(empty($groups)) 
     return; 
    // find JSON field groups which have not yet been imported 
    foreach($groups as $group) { 

     // vars 
     $local  = acf_maybe_get($group, 'local', false); 
     $modified = acf_maybe_get($group, 'modified', 0); 
     $private = acf_maybe_get($group, 'private', false); 
     // ignore DB/PHP/private field groups 
     if($local !== 'json' || $private) { 

      // do nothing 

     } elseif(! $group[ 'ID' ]) { 

      $sync[ $group[ 'key' ] ] = $group; 

     } elseif($modified && $modified > get_post_modified_time('U', true, $group[ 'ID' ], true)) { 

      $sync[ $group[ 'key' ] ] = $group; 
     } 
    } 
    // bail if no sync needed 
    if(empty($sync)) 
     return; 
    if(! empty($sync)) { //if(! empty($keys)) { 

     // vars 
     $new_ids = array(); 

     foreach($sync as $key => $v) { //foreach($keys as $key) { 

      // append fields 
      if(acf_have_local_fields($key)) { 

       $sync[ $key ][ 'fields' ] = acf_get_local_fields($key); 

      } 
      // import 
      $field_group = acf_import_field_group($sync[ $key ]); 
     } 
    } 
} 

は**今ではまた、その後、ACFを活性化させるすべてのJSONファイルをコピーして、それらを実行します。これにより、すべてのフィールドグループが自動的に同期され、ACFプラグインを非表示にすることもできます。また、ACFがフィールドに存在することを知る必要もなくなります。第2に、ACFで新しい変更を加えても、自動的にjsonファイルへの変更が更新されるはずです。より良い制御のためにそれらを制御することもできます。 **

関連する問題