ACF_Local_JSON{}ACF 1.0

Хуков нет.

Использование

$ACF_Local_JSON = new ACF_Local_JSON();
// use class methods

Методы

  1. public __construct()
  2. public delete_field_group( $field_group )
  3. public delete_file( $key )
  4. public get_files()
  5. public include_fields()
  6. public include_json_folder( $path = '' )
  7. public include_json_folders()
  8. public is_enabled()
  9. public save_file( $key, $field_group )
  10. public scan_field_groups()
  11. public update_field_group( $field_group )

Код ACF_Local_JSON{} ACF 5.10.2

class ACF_Local_JSON {

	/**
	 * The found JSON field group files.
	 *
	 * @since 5.9.0
	 * @var array
	 */
	private $files = array();

	/**
	 * Constructor.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   void
	 * @return  void
	 */
	public function __construct() {

		// Update settings.
		acf_update_setting( 'save_json', get_stylesheet_directory() . '/acf-json' );
		acf_append_setting( 'load_json', get_stylesheet_directory() . '/acf-json' );

		// Add listeners.
		add_action( 'acf/update_field_group', array( $this, 'update_field_group' ) );
		add_action( 'acf/untrash_field_group', array( $this, 'update_field_group' ) );
		add_action( 'acf/trash_field_group', array( $this, 'delete_field_group' ) );
		add_action( 'acf/delete_field_group', array( $this, 'delete_field_group' ) );

		// Include fields.
		add_action( 'acf/include_fields', array( $this, 'include_fields' ) );
	}

	/**
	 * Returns true if this component is enabled.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   void
	 * @return  bool.
	 */
	public function is_enabled() {
		return (bool) acf_get_setting( 'json' );
	}

	/**
	 * Writes field group data to JSON file.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   array $field_group The field group.
	 * @return  void
	 */
	public function update_field_group( $field_group ) {

		// Bail early if disabled.
		if ( ! $this->is_enabled() ) {
			return false;
		}

		// Append fields.
		$field_group['fields'] = acf_get_fields( $field_group );

		// Save to file.
		$this->save_file( $field_group['key'], $field_group );
	}

	/**
	 * Deletes a field group JSON file.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   array $field_group The field group.
	 * @return  void
	 */
	public function delete_field_group( $field_group ) {

		// Bail early if disabled.
		if ( ! $this->is_enabled() ) {
			return false;
		}

		// WP appends '__trashed' to end of 'key' (post_name).
		$key = str_replace( '__trashed', '', $field_group['key'] );

		// Delete file.
		$this->delete_file( $key );
	}

	/**
	 * Includes all local JSON fields.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   void
	 * @return  void
	 */
	public function include_fields() {

		// Bail early if disabled.
		if ( ! $this->is_enabled() ) {
			return false;
		}

		// Get load paths.
		$files = $this->scan_field_groups();
		foreach ( $files as $key => $file ) {
			$json               = json_decode( file_get_contents( $file ), true );
			$json['local']      = 'json';
			$json['local_file'] = $file;
			acf_add_local_field_group( $json );
		}
	}

	/**
	 * Scans for JSON field groups.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   void
	 * @return  array
	 */
	function scan_field_groups() {
		$json_files = array();

		// Loop over "local_json" paths and parse JSON files.
		$paths = (array) acf_get_setting( 'load_json' );
		foreach ( $paths as $path ) {
			if ( is_dir( $path ) ) {
				$files = scandir( $path );
				if ( $files ) {
					foreach ( $files as $filename ) {

						// Ignore hidden files.
						if ( $filename[0] === '.' ) {
							continue;
						}

						// Ignore sub directories.
						$file = untrailingslashit( $path ) . '/' . $filename;
						if ( is_dir( $file ) ) {
							continue;
						}

						// Ignore non JSON files.
						$ext = pathinfo( $filename, PATHINFO_EXTENSION );
						if ( $ext !== 'json' ) {
							continue;
						}

						// Read JSON data.
						$json = json_decode( file_get_contents( $file ), true );
						if ( ! is_array( $json ) || ! isset( $json['key'] ) ) {
							continue;
						}

						// Append data.
						$json_files[ $json['key'] ] = $file;
					}
				}
			}
		}

		// Store data and return.
		$this->files = $json_files;
		return $json_files;
	}

	/**
	 * Returns an array of found JSON field group files.
	 *
	 * @date    14/4/20
	 * @since   5.9.0
	 *
	 * @param   void
	 * @return  array
	 */
	public function get_files() {
		return $this->files;
	}

	/**
	 * Saves a field group JSON file.
	 *
	 * @date    17/4/20
	 * @since   5.9.0
	 *
	 * @param   string $key The field group key.
	 * @param   array  $field_group The field group.
	 * @return  bool
	 */
	public function save_file( $key, $field_group ) {
		$path = acf_get_setting( 'save_json' );
		$file = untrailingslashit( $path ) . '/' . $key . '.json';
		if ( ! is_writable( $path ) ) {
			return false;
		}

		// Append modified time.
		if ( $field_group['ID'] ) {
			$field_group['modified'] = get_post_modified_time( 'U', true, $field_group['ID'] );
		} else {
			$field_group['modified'] = strtotime( 'now' );
		}

		// Prepare for export.
		$field_group = acf_prepare_field_group_for_export( $field_group );

		// Save and return true if bytes were written.
		$result = file_put_contents( $file, acf_json_encode( $field_group ) );
		return is_int( $result );
	}

	/**
	 * Deletes a field group JSON file.
	 *
	 * @date    17/4/20
	 * @since   5.9.0
	 *
	 * @param   string $key The field group key.
	 * @return  bool True on success.
	 */
	public function delete_file( $key ) {
		$path = acf_get_setting( 'save_json' );
		$file = untrailingslashit( $path ) . '/' . $key . '.json';
		if ( is_readable( $file ) ) {
			unlink( $file );
			return true;
		}
		return false;
	}

	/**
	 * Includes all local JSON files.
	 *
	 * @date    10/03/2014
	 * @since   5.0.0
	 * @deprecated 5.9.0
	 *
	 * @param   void
	 * @return  void
	 */
	public function include_json_folders() {
		_deprecated_function( __METHOD__, '5.9.0', 'ACF_Local_JSON::include_fields()' );
		$this->include_fields();
	}

	/**
	 * Includes local JSON files within a specific folder.
	 *
	 * @date    01/05/2017
	 * @since   5.5.13
	 * @deprecated 5.9.0
	 *
	 * @param   string $path The path to a specific JSON folder.
	 * @return  void
	 */
	public function include_json_folder( $path = '' ) {
		_deprecated_function( __METHOD__, '5.9.0' );
		// Do nothing.
	}
}