テーマやプラグインにACFを配布するのは、ドキュメントに情報がないためにややこしいことです。面倒なところは、テーマやプラグインを使ってフィールドをエクスポートすることです。これは、ユーザーが他のテーマやプラグインと慣れ親しんでいたこととは異なることをしないようにするためです。私はその手続きを詳しく説明します。
テーマやプラグイン開発のために
:プラグイン開発のためにあなたにそれを追加することができながら、
official docsを参照し、テーマの開発のためのあなたのfunctions.phpファイル内のコードをコピー&ペーストするのは簡単でなければなりませんメインのプラグインファイルこれにより、これらの4つのタスクが達成されます。
- クライアントから
- ACFのDirに
- を追加隠すACF(必要な場合)
- 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ファイルへの変更が更新されるはずです。より良い制御のためにそれらを制御することもできます。 **
これまでやったことはありませんでしたが、フィールドグループとフィールドをプログラマチックに作成する方法があります。次に、フィールドを定義するテーマの中にphpファイルを含めることができます。 https://www.advancedcustomfields.com/resources/register-fields-via-php/ – Joe
ジョーが言いましたのは私がお勧めするものです。私はそれをして、それは動作します。 – Aibrean
ありがとう、私はPHPのエクスポート機能について知っているが、私はより合理化された何かについて考えていた。興味があれば私の答えで私の解決策を説明した。 –