ACF functionality and readme update

This commit is contained in:
Moris Zen
2018-06-25 12:49:49 +02:00
parent 9d7f3de76a
commit 1c4395df04
5 changed files with 111 additions and 2 deletions

View File

@@ -0,0 +1,4 @@
<?php
// @codingStandardsIgnoreFile -- for PHPCS 2.9 support in Atom
// phpcs:ignoreFile
// Silence is golden.

View File

@@ -1,4 +1,11 @@
<?php
// Frontend origin
require_once 'inc/frontend-origin.php';
// ACF commands
require_once 'inc/class-acf-commands.php';
// Logging functions
require_once 'inc/log.php';
@@ -15,4 +22,4 @@ require_once 'inc/menus.php';
require_once 'inc/acf-options.php';
// Add custom API endpoints
require_once 'inc/api-routes.php';
require_once 'inc/api-routes.php';

View File

@@ -0,0 +1,13 @@
<?php
// Add a custom options page to associate ACF fields with
if ( function_exists( 'acf_add_options_page' ) ) {
acf_add_options_page( [
'page_title' => 'Headless Settings',
'menu_title' => 'Headless',
'menu_slug' => 'headless-settings',
'capability' => 'manage_options',
'post_id' => 'headless-settings',
'redirect' => false,
] );
}

View File

@@ -0,0 +1,77 @@
<?php
if ( defined( 'WP_CLI' ) && WP_CLI && ! class_exists( 'ACF_Commands' ) ) {
/**
* ACF_Commands
*/
class ACF_Commands extends WP_CLI_Command {
/**
* Sync ACF Fields
*
* ## OPTIONS
*
* @when init
*
* @example
*
* wp acf sync
*
* @param arr $args Arguments
* @param arr $assoc_args Associated arguments
* @return void
*/
public function sync( $args, $assoc_args ) {
// vars
$groups = acf_get_field_groups();
$sync = [];
// 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 ( 'json' !== $local || $private ) {
// do nothing
true;
} 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 ) ) {
WP_CLI::success( 'No ACF Sync Required' );
return;
}
if ( ! empty( $sync ) ) {
acf_update_setting( 'json', false );
// vars
$new_ids = [];
foreach ( $sync as $key => $v ) {
// 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 ] );
}
}
WP_CLI::success( 'ACF SYNC SUCCESS!' );
}
}
WP_CLI::add_command( 'acf', 'ACF_Commands' );
}