diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml
index 5015d7bf..75bba15a 100644
--- a/.github/workflows/phpcs.yml
+++ b/.github/workflows/phpcs.yml
@@ -14,7 +14,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.1'
+ php-version: '8.4'
tools: composer:v2
- name: Install Dependencies
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 00000000..102fbf6b
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,38 @@
+{
+ "default": true,
+ "MD013": false,
+ "MD024": false,
+ "MD033": {
+ "allowed_elements": [
+ "br",
+ "img",
+ "video",
+ "details",
+ "summary"
+ ]
+ },
+ "no-inline-html": {
+ "allowed_elements": [
+ "br",
+ "kbd",
+ "sup"
+ ]
+ },
+ "first-line-h1": false,
+ "commands-show-output": false,
+ "code-block-style": false,
+ "no-duplicate-heading": {
+ "siblings_only": true
+ },
+ "no-trailing-punctuation": {
+ "punctuation": ".,;:!"
+ },
+ "ol-prefix": {
+ "style": "ordered"
+ },
+ "fenced-code-language": true,
+ "ignores": [
+ "vendor/**",
+ "node_modules/**"
+ ]
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index d7d4a824..67fde64e 100644
--- a/composer.json
+++ b/composer.json
@@ -16,12 +16,22 @@
"require-dev": {
"wp-coding-standards/wpcs": "^3.0",
"phpcompatibility/phpcompatibility-wp": "^2.1",
- "sirbrillig/phpcs-changed": "^2.11"
+ "sirbrillig/phpcs-changed": "^2.11",
+ "nikic/php-parser": "^4.0",
+ "symfony/finder": "^5.0|^6.0"
},
"scripts": {
- "docs-manifest": "php docs/bin/generate-manifest.php",
+ "docs:manifest": "php docs/bin/generate-manifest.php",
+ "docs:links": "php docs/bin/update-markdown-links.php",
+ "docs:parse": "php docs/bin/generate-parsed-md.php --output=${DOCS_OUTPUT_DIR:-docs/code-reference}",
+ "docs:fix": "npm run fix:md",
+ "docs:lint": "npm run lint:md",
"docs": [
- "@docs-manifest"
+ "@docs:parse",
+ "@docs:links",
+ "@docs:fix",
+ "@docs:lint",
+ "@docs:manifest"
]
}
}
diff --git a/composer.lock b/composer.lock
index 7ba3885e..7a211d51 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "0bb833be87c3ffe2c1cb6be003952af5",
+ "content-hash": "fa6658052cff5c13233b3b5419d42a08",
"packages": [],
"packages-dev": [
{
@@ -85,6 +85,62 @@
},
"time": "2023-01-05T11:28:13+00:00"
},
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.19.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+ "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4"
+ },
+ "time": "2024-09-29T15:01:53+00:00"
+ },
{
"name": "phpcompatibility/php-compatibility",
"version": "9.3.5",
@@ -593,6 +649,70 @@
],
"time": "2025-01-23T17:04:15+00:00"
},
+ {
+ "name": "symfony/finder",
+ "version": "v6.4.17",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+ "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v6.4.17"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-12-29T13:51:37+00:00"
+ },
{
"name": "wp-coding-standards/wpcs",
"version": "3.1.0",
diff --git a/docs/bin/generate-parsed-md.php b/docs/bin/generate-parsed-md.php
new file mode 100644
index 00000000..0312d5dd
--- /dev/null
+++ b/docs/bin/generate-parsed-md.php
@@ -0,0 +1,677 @@
+#!/usr/bin/env php
+ 'action',
+ 'do_action_ref_array' => 'action',
+ 'do_action_deprecated' => 'deprecated',
+ 'apply_filters' => 'filter',
+ 'apply_filters_ref_array' => 'filter',
+ 'apply_filters_deprecated' => 'deprecated',
+ );
+
+ /**
+ * Tracks undocumented code elements.
+ *
+ * @var array
+ */
+ private $undocumented_elements = array();
+
+ /**
+ * File suffix and extension constants.
+ */
+ private const FILE_SUFFIX = '-file';
+ private const MD_EXT = '.md';
+ private const PHP_EXT = '.php';
+
+ /**
+ * Constructor.
+ *
+ * @param string $output_dir Directory where documentation will be generated.
+ */
+ public function __construct( $output_dir ) {
+ $this->parser = ( new ParserFactory() )->create( ParserFactory::PREFER_PHP7 );
+ $this->traverser = new NodeTraverser();
+ $this->traverser->addVisitor( new NameResolver() );
+ $this->output_dir = rtrim( $output_dir, '/' );
+
+ // Clean up existing documentation
+ if ( is_dir( $this->output_dir ) ) {
+ $this->cleanup_directory( $this->output_dir );
+ }
+
+ if ( ! is_dir( $this->output_dir ) ) {
+ mkdir( $this->output_dir, 0755, true );
+ }
+ }
+
+ /**
+ * Recursively remove all files and subdirectories from a directory.
+ *
+ * @param string $dir Directory path to clean.
+ */
+ private function cleanup_directory( $dir ) {
+ $files = array_diff( scandir( $dir ), array( '.', '..' ) );
+
+ foreach ( $files as $file ) {
+ $path = $dir . '/' . $file;
+ if ( is_dir( $path ) ) {
+ $this->cleanup_directory( $path );
+ rmdir( $path );
+ } else {
+ unlink( $path );
+ }
+ }
+ }
+
+ /**
+ * Generate documentation for all PHP files.
+ */
+ public function generate() {
+ $finder = new Finder();
+ $finder->files()
+ ->name( '*.php' )
+ ->in( dirname( dirname( __DIR__ ) ) . '/includes' )
+ ->exclude( 'vendor' );
+
+ foreach ( $finder as $file ) {
+ $this->process_file( $file );
+ }
+
+ // Generate META.md with undocumented elements
+ $this->generate_meta_file();
+
+ // After processing all files, generate index files
+ $this->generate_index_files();
+ }
+
+ /**
+ * Process a single PHP file to extract documentation.
+ *
+ * @param \Symfony\Component\Finder\SplFileInfo $file The file to process.
+ */
+ private function process_file( $file ) {
+ $code = file_get_contents( $file->getRealPath() );
+ $ast = $this->parser->parse( $code );
+
+ if ( ! $ast ) {
+ return;
+ }
+
+ // Track relative path for undocumented elements
+ $relative_path = str_replace(
+ dirname( dirname( __DIR__ ) ) . '/includes/',
+ '',
+ $file->getRealPath()
+ );
+
+ $docs = $this->extract_docs( $ast, $relative_path );
+ if ( $docs ) {
+ $this->save_markdown( $file, $docs );
+ }
+ }
+
+ /**
+ * Extract documentation from an AST.
+ *
+ * @param array $ast The PHP Parser AST.
+ * @param string $file_path The relative path to the file being processed.
+ * @return array Extracted documentation organized by type.
+ */
+ private function extract_docs( array $ast, $file_path ) {
+ $docs = array();
+
+ foreach ( $ast as $node ) {
+ // Handle standalone functions
+ if ( $node instanceof Node\Stmt\Function_ ) {
+ if ( ! isset( $docs['functions'] ) ) {
+ $docs['functions'] = array();
+ }
+ $doc = $node->getDocComment();
+ if ( $doc ) {
+ $docs['functions'][ $node->name->toString() ] = $this->format_doc_block( $doc );
+ } else {
+ // Track undocumented function
+ $this->track_undocumented( $file_path, 'function', $node->name->toString() );
+ }
+ }
+ // Handle classes
+ if ( $node instanceof Node\Stmt\Class_ ) {
+ $docs['class'] = $this->extract_class_docs( $node, $file_path );
+ }
+ // Handle hooks
+ $hooks = $this->extract_hooks( $node, $file_path );
+ if ( ! empty( $hooks ) ) {
+ if ( ! isset( $docs['hooks'] ) ) {
+ $docs['hooks'] = array();
+ }
+ $docs['hooks'] = array_merge( $docs['hooks'], $hooks );
+ }
+ }
+
+ return $docs;
+ }
+
+ /**
+ * Extract documentation from a class node.
+ *
+ * @param Node\Stmt\Class_ $node The class node.
+ * @param string $file_path The relative path to the file.
+ * @return array Class documentation including properties and methods.
+ */
+ private function extract_class_docs( Node\Stmt\Class_ $node, $file_path ) {
+ $doc = $node->getDocComment();
+ if ( ! $doc ) {
+ $this->track_undocumented( $file_path, 'class', $node->name->toString() );
+ }
+
+ $docs = array(
+ 'name' => $node->name->toString(),
+ 'doc' => $doc ? $this->format_doc_block( $doc ) : '',
+ 'properties' => $this->extract_property_docs( $node, $file_path ),
+ 'methods' => $this->extract_method_docs( $node, $file_path ),
+ );
+
+ return $docs;
+ }
+
+ /**
+ * Extract documentation from class properties.
+ *
+ * @param Node\Stmt\Class_ $node The class node.
+ * @param string $file_path The relative path to the file.
+ * @return array Property documentation keyed by property name.
+ */
+ private function extract_property_docs( Node\Stmt\Class_ $node, $file_path ) {
+ $properties = array();
+
+ foreach ( $node->getProperties() as $property ) {
+ $doc = $property->getDocComment();
+ if ( $doc ) {
+ foreach ( $property->props as $prop ) {
+ $properties[ $prop->name->toString() ] = $this->format_doc_block( $doc );
+ }
+ } else {
+ foreach ( $property->props as $prop ) {
+ $this->track_undocumented( $file_path, 'property', $prop->name->toString() );
+ }
+ }
+ }
+
+ return $properties;
+ }
+
+ /**
+ * Extract documentation from class methods.
+ *
+ * @param Node\Stmt\Class_ $node The class node.
+ * @param string $file_path The relative path to the file.
+ * @return array Method documentation keyed by method name.
+ */
+ private function extract_method_docs( Node\Stmt\Class_ $node, $file_path ) {
+ $methods = array();
+
+ foreach ( $node->getMethods() as $method ) {
+ $doc = $method->getDocComment();
+ if ( $doc ) {
+ $methods[ $method->name->toString() ] = $this->format_doc_block( $doc );
+ } else {
+ $this->track_undocumented( $file_path, 'method', $method->name->toString() );
+ }
+ }
+
+ return $methods;
+ }
+
+ /**
+ * Extract WordPress hooks from an AST node.
+ *
+ * @param Node $node The AST node to check.
+ * @param string $file_path The relative path to the file.
+ * @return array Extracted hook documentation.
+ */
+ private function extract_hooks( $node, $file_path ) {
+ $hooks = array();
+
+ if ( $node instanceof Node\Expr\FuncCall && $node->name instanceof Node\Name ) {
+ $function_name = $node->name->toString();
+
+ if ( in_array( $function_name, $this->hook_functions, true ) ) {
+ if ( isset( $node->args[0] ) && $node->args[0]->value instanceof Node\Scalar\String_ ) {
+ $hook_name = $node->args[0]->value->value;
+ $doc = '';
+ if ( $node->getAttribute( 'comments' ) ) {
+ foreach ( $node->getAttribute( 'comments' ) as $comment ) {
+ if ( $comment instanceof \PhpParser\Comment\Doc ) {
+ $doc = $this->format_doc_block( $comment );
+ break;
+ }
+ }
+ }
+
+ if ( ! $doc ) {
+ $this->track_undocumented( $file_path, 'hook', $hook_name );
+ }
+
+ $hooks[] = array(
+ 'type' => $this->hook_type_map[ $function_name ],
+ 'name' => $hook_name,
+ 'doc' => $doc,
+ 'function' => $function_name,
+ );
+ }
+ }
+ }
+
+ // Recursively check child nodes
+ foreach ( $node->getSubNodeNames() as $node_name ) {
+ $sub_node = $node->$node_name;
+ if ( $sub_node instanceof Node || is_array( $sub_node ) ) {
+ if ( is_array( $sub_node ) ) {
+ foreach ( $sub_node as $sub_sub_node ) {
+ if ( $sub_sub_node instanceof Node ) {
+ $hooks = array_merge( $hooks, $this->extract_hooks( $sub_sub_node, $file_path ) );
+ }
+ }
+ } else {
+ $hooks = array_merge( $hooks, $this->extract_hooks( $sub_node, $file_path ) );
+ }
+ }
+ }
+
+ return $hooks;
+ }
+
+ /**
+ * Format a docblock comment by removing comment markers.
+ *
+ * @param \PhpParser\Comment\Doc $doc The docblock comment.
+ * @return string Cleaned documentation text.
+ */
+ private function format_doc_block( $doc ) {
+ $text = $doc->getText();
+ // Clean up the doc block
+ $text = preg_replace( '/^\s*\/\*\*\s*/m', '', $text );
+ $text = preg_replace( '/^\s*\*\s*/m', '', $text );
+ $text = preg_replace( '/\s*\*\/\s*$/', '', $text );
+ $text = preg_replace( '/\s*\/\s*$/', '', $text );
+ $text = preg_replace( '/\n\s*$/', '', $text );
+
+ $text = trim( $text );
+
+ // Normalize URL formatting - remove angle brackets
+ $text = preg_replace( '/<(https?:\/\/[^>]+)>/', '$1', $text );
+
+ // Convert @param, @return, @since, etc. into list items
+ $text = preg_replace(
+ '/^@(param|return|since|date|deprecated|var|package|type)\s+/m',
+ '* @$1 ',
+ $text
+ );
+
+ return $text;
+ }
+
+ /**
+ * Track an undocumented code element.
+ *
+ * @param string $file The file path where the element was found.
+ * @param string $type The type of element (class, method, property, etc.).
+ * @param string $name The name of the undocumented element.
+ */
+ private function track_undocumented( $file, $type, $name ) {
+ if ( ! isset( $this->undocumented_elements[ $file ] ) ) {
+ $this->undocumented_elements[ $file ] = array();
+ }
+ if ( ! isset( $this->undocumented_elements[ $file ][ $type ] ) ) {
+ $this->undocumented_elements[ $file ][ $type ] = array();
+ }
+ $this->undocumented_elements[ $file ][ $type ][] = $name;
+ }
+
+ /**
+ * Generate index files for each directory of documentation.
+ */
+ private function generate_index_files() {
+ foreach ( $this->files_by_directory as $dir => $files ) {
+ // Sort files for consistent order
+ sort( $files );
+
+ // Handle root directory differently
+ if ( '' === $dir || '.' === $dir ) {
+ $index_path = $this->output_dir . '/index.md';
+ } else {
+ // For subdirectories, just use index.md
+ $index_path = $this->output_dir . '/' . $dir . '/index.md';
+ }
+
+ // Special handling for root code reference index
+ if ( '' === $dir ) {
+ $index_content = '# Code Reference' . "\n\n";
+ } else {
+ $index_content = '#' . ( '.' === $dir ? ' Code Reference' : ' ' . ucwords( str_replace( '/', ' ', $dir ) ) ) . "\n\n";
+ }
+ $index_content .= '## Files' . "\n\n";
+
+ foreach ( $files as $file ) {
+ $basename = basename( $file, '.md' );
+ $title = ucwords( str_replace( '-', ' ', $basename ) );
+ $index_content .= '- [' . $title . '](' . $basename . ')' . "\n";
+ }
+
+ // Ensure file ends with single newline and no trailing spaces
+ $index_content = rtrim( rtrim( $index_content ), "\n" ) . "\n";
+
+ // Create directory if it doesn't exist
+ $dir_path = dirname( $index_path );
+ if ( ! is_dir( $dir_path ) ) {
+ mkdir( $dir_path, 0755, true );
+ }
+
+ file_put_contents( $index_path, $index_content );
+ }
+ }
+
+ /**
+ * Generate the META.md file containing undocumented elements and duplicate hooks.
+ */
+ private function generate_meta_file() {
+ if ( empty( $this->undocumented_elements ) ) {
+ return;
+ }
+
+ $markdown = "# Undocumented Code Elements\n\n";
+ $markdown .= "This file tracks code elements that need documentation.\n\n";
+
+ // Track duplicate hooks
+ $hook_counts = array();
+ foreach ( $this->files_by_directory['hooks'] ?? array() as $hook_file ) {
+ $file_path = $this->output_dir . '/hooks/' . $hook_file;
+ if ( file_exists( $file_path ) ) {
+ $content = file_get_contents( $file_path );
+ preg_match_all( '/^## `([^`]+)`/m', $content, $matches );
+ foreach ( $matches[1] as $hook_name ) {
+ if ( ! isset( $hook_counts[ $hook_name ] ) ) {
+ $hook_counts[ $hook_name ] = 0;
+ }
+ ++$hook_counts[ $hook_name ];
+ }
+ }
+ }
+
+ // Add duplicate hooks section if any found
+ $duplicate_hooks = array_filter(
+ $hook_counts,
+ function ( $count ) {
+ return $count > 1;
+ }
+ );
+
+ if ( ! empty( $duplicate_hooks ) ) {
+ $markdown .= "# Duplicate Hooks\n\n";
+ arsort( $duplicate_hooks ); // Sort by count, highest first
+
+ foreach ( $duplicate_hooks as $hook => $count ) {
+ $markdown .= "- `{$hook}` (used {$count} times)\n";
+ }
+ $markdown .= "\n";
+ }
+
+ // Sort files alphabetically
+ ksort( $this->undocumented_elements );
+
+ foreach ( $this->undocumented_elements as $file => $types ) {
+ $markdown .= '## ' . $file . "\n\n";
+
+ // Sort types of elements(class, method, property, hook, function).
+ ksort( $types );
+
+ foreach ( $types as $type => $elements ) {
+ $markdown .= '### ' . ucfirst( $type ) . "s\n\n";
+
+ // Sort elements alphabetically
+ sort( $elements );
+
+ foreach ( $elements as $element ) {
+ $markdown .= '- `' . $element . "`\n";
+ }
+ $markdown .= "\n";
+ }
+ }
+
+ file_put_contents( $this->output_dir . '/META.md', $markdown );
+ }
+
+ /**
+ * Save markdown documentation to appropriate files.
+ *
+ * @param \Symfony\Component\Finder\SplFileInfo $file The source file.
+ * @param array $docs The documentation to save.
+ */
+ private function save_markdown( $file, $docs ) {
+ if ( empty( $docs ) ) {
+ return;
+ }
+
+ // Handle hooks separately
+ if ( ! empty( $docs['hooks'] ) ) {
+ $markdown = '';
+ // Group hooks by type
+ $grouped_hooks = array();
+ foreach ( $docs['hooks'] as $hook ) {
+ $type = $hook['type'];
+ if ( ! isset( $grouped_hooks[ $type ] ) ) {
+ $grouped_hooks[ $type ] = array();
+ }
+ $grouped_hooks[ $type ][] = $hook;
+ }
+
+ // Create hooks directory if it doesn't exist
+ $hooks_dir = $this->output_dir . '/hooks';
+ if ( ! is_dir( $hooks_dir ) ) {
+ mkdir( $hooks_dir, 0755, true );
+ }
+
+ // Save each hook type to its own file
+ foreach ( $grouped_hooks as $type => $hooks ) {
+ $hook_markdown = '# ' . ucfirst( str_replace( '_', ' ', $type ) ) . "\n\n";
+ foreach ( $hooks as $hook ) {
+ $hook_markdown .= "## `{$hook['name']}`\n\n";
+ if ( ! empty( $hook['doc'] ) ) {
+ $hook_markdown .= "{$hook['doc']}\n\n";
+ }
+ // Add file reference
+ $hook_markdown .= '_Defined in: ' . str_replace( dirname( dirname( __DIR__ ) ) . '/includes/', '', $file->getRealPath() ) . "_\n\n";
+ }
+
+ $hook_file = $hooks_dir . '/' . $type . '.md';
+
+ // Load existing content
+ $existing_content = file_exists( $hook_file ) ? file_get_contents( $hook_file ) . "\n" : '';
+
+ $hook_markdown = $existing_content . $hook_markdown;
+
+ // Track hook files for index generation
+ if ( ! isset( $this->files_by_directory['hooks'] ) ) {
+ $this->files_by_directory['hooks'] = array();
+ }
+ if ( ! in_array( basename( $hook_file ), $this->files_by_directory['hooks'], true ) ) {
+ $this->files_by_directory['hooks'][] = basename( $hook_file );
+ }
+ }
+
+ // After processing all hooks, sort each file
+ foreach ( $this->files_by_directory['hooks'] as $hook_file ) {
+ $file_path = $hooks_dir . '/' . $hook_file;
+ if ( file_exists( $file_path ) ) {
+ // Read the file
+ $content = file_get_contents( $file_path );
+
+ // Split into sections (each hook documentation)
+ $sections = preg_split( '/(?=^## )/m', $content );
+
+ // Keep the title section (first section starting with # )
+ $title = array_shift( $sections );
+
+ // Sort the remaining sections
+ sort( $sections, SORT_STRING | SORT_FLAG_CASE );
+
+ // Combine and write back
+ file_put_contents( $file_path, $title . implode( '', $sections ) );
+ }
+ }
+
+ // Remove hooks from docs array so they're not included in the main file
+ unset( $docs['hooks'] );
+ }
+
+ // Handle regular documentation
+ if ( ! empty( $docs ) ) {
+ $relative_path = str_replace(
+ dirname( dirname( __DIR__ ) ) . '/includes/',
+ '',
+ $file->getRealPath()
+ );
+
+ // Add -file suffix before .md extension
+ $output_path = $this->output_dir . '/' . preg_replace(
+ '/' . self::PHP_EXT . '$/',
+ self::FILE_SUFFIX . self::MD_EXT,
+ $relative_path
+ );
+
+ $output_dir = dirname( $output_path );
+ if ( ! is_dir( $output_dir ) ) {
+ mkdir( $output_dir, 0755, true );
+ }
+
+ $markdown = $this->generate_markdown( $docs );
+ file_put_contents( $output_path, $markdown );
+
+ // Track files by directory for index generation
+ $relative_dir = dirname( $relative_path );
+ if ( ! isset( $this->files_by_directory[ $relative_dir ] ) ) {
+ $this->files_by_directory[ $relative_dir ] = array();
+ }
+ $this->files_by_directory[ $relative_dir ][] = basename( $output_path );
+ }
+ }
+
+ /**
+ * Generate markdown content from documentation array.
+ *
+ * @param array $docs Documentation organized by type.
+ * @return string Generated markdown content.
+ */
+ private function generate_markdown( $docs ) {
+ $markdown = '';
+
+ // Generate standalone functions documentation
+ if ( ! empty( $docs['functions'] ) ) {
+ $markdown .= '# Global Functions' . "\n\n";
+ foreach ( $docs['functions'] as $name => $doc ) {
+ $markdown .= '## `' . $name . '()`' . "\n\n";
+ $markdown .= trim( $doc ) . "\n\n\n"; // Add extra newline after each function
+ }
+ $markdown .= "---\n\n";
+ }
+
+ if ( isset( $docs['class'] ) ) {
+ $markdown .= '# ' . $docs['class']['name'] . "\n\n";
+ $markdown .= trim( $docs['class']['doc'] ) . "\n\n";
+
+ // Add properties section
+ if ( ! empty( $docs['class']['properties'] ) ) {
+ $markdown .= '## Properties' . "\n\n";
+ foreach ( $docs['class']['properties'] as $name => $doc ) {
+ $markdown .= '### `$' . $name . '`' . "\n\n";
+ $markdown .= trim( $doc ) . "\n\n";
+ }
+ }
+
+ if ( ! empty( $docs['class']['methods'] ) ) {
+ $markdown .= '## Methods' . "\n\n";
+ foreach ( $docs['class']['methods'] as $name => $doc ) {
+ $markdown .= '### `' . $name . '`' . "\n\n";
+ $markdown .= trim( $doc ) . "\n\n";
+ }
+ }
+ }
+
+ // Ensure file ends with single newline and no trailing spaces
+ $markdown = rtrim( rtrim( $markdown ), "\n" ) . "\n";
+ return $markdown;
+ }
+}
+
+// Parse command line arguments
+$options = getopt( '', array( 'output::' ) );
+$output_dir = isset( $options['output'] ) ? $options['output'] : __DIR__ . '/../code-reference';
+$generator = new DocGenerator( $output_dir );
+$generator->generate();
diff --git a/docs/bin/manifest.json b/docs/bin/manifest.json
index 1f94b2de..deb3a11b 100644
--- a/docs/bin/manifest.json
+++ b/docs/bin/manifest.json
@@ -4,6 +4,166 @@
"parent": null,
"markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/scf.md"
},
+ "code-reference/acf-bidirectional-functions-file": {
+ "slug": "acf-bidirectional-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-bidirectional-functions-file.md"
+ },
+ "code-reference/acf-field-functions-file": {
+ "slug": "acf-field-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-field-functions-file.md"
+ },
+ "code-reference/acf-field-group-functions-file": {
+ "slug": "acf-field-group-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-field-group-functions-file.md"
+ },
+ "code-reference/acf-form-functions-file": {
+ "slug": "acf-form-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-form-functions-file.md"
+ },
+ "code-reference/acf-helper-functions-file": {
+ "slug": "acf-helper-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-helper-functions-file.md"
+ },
+ "code-reference/acf-hook-functions-file": {
+ "slug": "acf-hook-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-hook-functions-file.md"
+ },
+ "code-reference/acf-input-functions-file": {
+ "slug": "acf-input-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-input-functions-file.md"
+ },
+ "code-reference/acf-internal-post-type-functions-file": {
+ "slug": "acf-internal-post-type-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-internal-post-type-functions-file.md"
+ },
+ "code-reference/acf-meta-functions-file": {
+ "slug": "acf-meta-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-meta-functions-file.md"
+ },
+ "code-reference/acf-post-functions-file": {
+ "slug": "acf-post-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-post-functions-file.md"
+ },
+ "code-reference/acf-post-type-functions-file": {
+ "slug": "acf-post-type-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-post-type-functions-file.md"
+ },
+ "code-reference/acf-taxonomy-functions-file": {
+ "slug": "acf-taxonomy-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-taxonomy-functions-file.md"
+ },
+ "code-reference/acf-user-functions-file": {
+ "slug": "acf-user-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-user-functions-file.md"
+ },
+ "code-reference/acf-utility-functions-file": {
+ "slug": "acf-utility-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-utility-functions-file.md"
+ },
+ "code-reference/acf-value-functions-file": {
+ "slug": "acf-value-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-value-functions-file.md"
+ },
+ "code-reference/acf-wp-functions-file": {
+ "slug": "acf-wp-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/acf-wp-functions-file.md"
+ },
+ "code-reference/assets-file": {
+ "slug": "assets-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/assets-file.md"
+ },
+ "code-reference/blocks-file": {
+ "slug": "blocks-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/blocks-file.md"
+ },
+ "code-reference/compatibility-file": {
+ "slug": "compatibility-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/compatibility-file.md"
+ },
+ "code-reference/deprecated-file": {
+ "slug": "deprecated-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/deprecated-file.md"
+ },
+ "code-reference/fields-file": {
+ "slug": "fields-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/fields-file.md"
+ },
+ "code-reference": {
+ "slug": "code-reference",
+ "parent": null,
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/index.md"
+ },
+ "code-reference/l10n-file": {
+ "slug": "l10n-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/l10n-file.md"
+ },
+ "code-reference/local-fields-file": {
+ "slug": "local-fields-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/local-fields-file.md"
+ },
+ "code-reference/local-json-file": {
+ "slug": "local-json-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/local-json-file.md"
+ },
+ "code-reference/local-meta-file": {
+ "slug": "local-meta-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/local-meta-file.md"
+ },
+ "code-reference/locations-file": {
+ "slug": "locations-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/locations-file.md"
+ },
+ "code-reference/loop-file": {
+ "slug": "loop-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/loop-file.md"
+ },
+ "code-reference/revisions-file": {
+ "slug": "revisions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/revisions-file.md"
+ },
+ "code-reference/scf-ui-options-page-functions-file": {
+ "slug": "scf-ui-options-page-functions-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/scf-ui-options-page-functions-file.md"
+ },
+ "code-reference/upgrades-file": {
+ "slug": "upgrades-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/upgrades-file.md"
+ },
+ "code-reference/validation-file": {
+ "slug": "validation-file",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/validation-file.md"
+ },
"concepts/architecture": {
"slug": "architecture",
"parent": "concepts",
@@ -29,11 +189,6 @@
"parent": null,
"markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/contributing/index.md"
},
- "features/api": {
- "slug": "api",
- "parent": "features",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/api.md"
- },
"features": {
"slug": "features",
"parent": null,
@@ -44,6 +199,11 @@
"parent": "features",
"markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/post-types.md"
},
+ "features/scf-api": {
+ "slug": "scf-api",
+ "parent": "features",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/scf-api.md"
+ },
"getting-started": {
"slug": "getting-started",
"parent": null,
@@ -69,249 +229,454 @@
"parent": null,
"markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/tutorials/index.md"
},
- "features/fields": {
+ "code-reference/admin/admin-notices-file": {
+ "slug": "admin-notices-file",
+ "parent": "admin",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/admin/admin-notices-file.md"
+ },
+ "code-reference/admin/admin-tools-file": {
+ "slug": "admin-tools-file",
+ "parent": "admin",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/admin/admin-tools-file.md"
+ },
+ "code-reference/admin": {
+ "slug": "admin",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/admin/index.md"
+ },
+ "code-reference/api/api-helpers-file": {
+ "slug": "api-helpers-file",
+ "parent": "api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/api/api-helpers-file.md"
+ },
+ "code-reference/api/api-template-file": {
+ "slug": "api-template-file",
+ "parent": "api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/api/api-template-file.md"
+ },
+ "code-reference/api/api-term-file": {
+ "slug": "api-term-file",
+ "parent": "api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/api/api-term-file.md"
+ },
+ "code-reference/api": {
+ "slug": "api",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/api/index.md"
+ },
+ "code-reference/fields/class-acf-repeater-table-file": {
+ "slug": "class-acf-repeater-table-file",
+ "parent": "fields",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/fields/class-acf-repeater-table-file.md"
+ },
+ "code-reference/fields": {
"slug": "fields",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/fields/index.md"
+ },
+ "code-reference/forms/form-front-file": {
+ "slug": "form-front-file",
+ "parent": "forms",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/forms/form-front-file.md"
+ },
+ "code-reference/forms": {
+ "slug": "forms",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/forms/index.md"
+ },
+ "code-reference/hooks": {
+ "slug": "hooks",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/hooks/index.md"
+ },
+ "code-reference/rest-api/acf-rest-api-functions-file": {
+ "slug": "acf-rest-api-functions-file",
+ "parent": "rest-api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/rest-api/acf-rest-api-functions-file.md"
+ },
+ "code-reference/rest-api/class-acf-rest-api-file": {
+ "slug": "class-acf-rest-api-file",
+ "parent": "rest-api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/rest-api/class-acf-rest-api-file.md"
+ },
+ "code-reference/rest-api/class-acf-rest-embed-links-file": {
+ "slug": "class-acf-rest-embed-links-file",
+ "parent": "rest-api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/rest-api/class-acf-rest-embed-links-file.md"
+ },
+ "code-reference/rest-api/class-acf-rest-request-file": {
+ "slug": "class-acf-rest-request-file",
+ "parent": "rest-api",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/rest-api/class-acf-rest-request-file.md"
+ },
+ "code-reference/rest-api": {
+ "slug": "rest-api",
+ "parent": "code-reference",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/code-reference/rest-api/index.md"
+ },
+ "features/field": {
+ "slug": "field",
"parent": "features",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/index.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/index.md"
},
- "features/fields/accordion": {
+ "features/field/accordion": {
"slug": "accordion",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/accordion/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/accordion/index.md"
},
- "features/fields/accordion/tutorial": {
+ "features/field/accordion/tutorial": {
"slug": "accordion-tutorial",
"parent": "accordion",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/accordion/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/accordion/tutorial.md"
},
- "features/fields/button-group": {
+ "features/field/button-group": {
"slug": "button-group",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/button-group/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/button-group/index.md"
},
- "features/fields/button-group/tutorial": {
+ "features/field/button-group/tutorial": {
"slug": "button-group-tutorial",
"parent": "button-group",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/button-group/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/button-group/tutorial.md"
},
- "features/fields/checkbox": {
+ "features/field/checkbox": {
"slug": "checkbox",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/checkbox/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/checkbox/index.md"
},
- "features/fields/checkbox/tutorial": {
+ "features/field/checkbox/tutorial": {
"slug": "checkbox-tutorial",
"parent": "checkbox",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/checkbox/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/checkbox/tutorial.md"
},
- "features/fields/clone": {
+ "features/field/clone": {
"slug": "clone",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/clone/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/clone/index.md"
},
- "features/fields/clone/tutorial": {
+ "features/field/clone/tutorial": {
"slug": "clone-tutorial",
"parent": "clone",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/clone/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/clone/tutorial.md"
},
- "features/fields/color-picker": {
+ "features/field/color-picker": {
"slug": "color-picker",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/color-picker/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/color-picker/index.md"
},
- "features/fields/color-picker/tutorial": {
+ "features/field/color-picker/tutorial": {
"slug": "color-picker-tutorial",
"parent": "color-picker",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/color-picker/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/color-picker/tutorial.md"
},
- "features/fields/date-picker": {
+ "features/field/date-picker": {
"slug": "date-picker",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/date-picker/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/date-picker/index.md"
},
- "features/fields/date-picker/tutorial": {
+ "features/field/date-picker/tutorial": {
"slug": "date-picker-tutorial",
"parent": "date-picker",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/date-picker/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/date-picker/tutorial.md"
},
- "features/fields/date-time-picker": {
+ "features/field/date-time-picker": {
"slug": "date-time-picker",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/date-time-picker/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/date-time-picker/index.md"
},
- "features/fields/date-time-picker/tutorial": {
+ "features/field/date-time-picker/tutorial": {
"slug": "date-time-picker-tutorial",
"parent": "date-time-picker",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/date-time-picker/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/date-time-picker/tutorial.md"
},
- "features/fields/email": {
+ "features/field/email": {
"slug": "email",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/email/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/email/index.md"
},
- "features/fields/email/tutorial": {
+ "features/field/email/tutorial": {
"slug": "email-tutorial",
"parent": "email",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/email/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/email/tutorial.md"
},
- "features/fields/file": {
+ "features/field/file": {
"slug": "file",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/file/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/file/index.md"
},
- "features/fields/file/tutorial": {
+ "features/field/file/tutorial": {
"slug": "file-tutorial",
"parent": "file",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/file/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/file/tutorial.md"
},
- "features/fields/flexible-content": {
+ "features/field/flexible-content": {
"slug": "flexible-content",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/flexible-content/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/flexible-content/index.md"
},
- "features/fields/flexible-content/tutorial": {
+ "features/field/flexible-content/tutorial": {
"slug": "flexible-content-tutorial",
"parent": "flexible-content",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/flexible-content/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/flexible-content/tutorial.md"
},
- "features/fields/gallery": {
+ "features/field/gallery": {
"slug": "gallery",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/gallery/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/gallery/index.md"
},
- "features/fields/gallery/tutorial": {
+ "features/field/gallery/tutorial": {
"slug": "gallery-tutorial",
"parent": "gallery",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/gallery/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/gallery/tutorial.md"
},
- "features/fields/google-map": {
+ "features/field/google-map": {
"slug": "google-map",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/google-map/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/google-map/index.md"
},
- "features/fields/google-map/tutorial": {
+ "features/field/google-map/tutorial": {
"slug": "google-map-tutorial",
"parent": "google-map",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/google-map/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/google-map/tutorial.md"
},
- "features/fields/group": {
+ "features/field/group": {
"slug": "group",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/group/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/group/index.md"
},
- "features/fields/group/tutorial": {
+ "features/field/group/tutorial": {
"slug": "group-tutorial",
"parent": "group",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/group/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/group/tutorial.md"
},
- "features/fields/icon-picker": {
+ "features/field/icon-picker": {
"slug": "icon-picker",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/icon-picker/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/icon-picker/index.md"
},
- "features/fields/icon-picker/tutorial": {
+ "features/field/icon-picker/tutorial": {
"slug": "icon-picker-tutorial",
"parent": "icon-picker",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/icon-picker/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/icon-picker/tutorial.md"
},
- "features/fields/image": {
+ "features/field/image": {
"slug": "image",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/image/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/image/index.md"
},
- "features/fields/image/tutorial": {
+ "features/field/image/tutorial": {
"slug": "image-tutorial",
"parent": "image",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/image/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/image/tutorial.md"
},
- "features/fields/link": {
+ "features/field/link": {
"slug": "link",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/link/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/link/index.md"
},
- "features/fields/link/tutorial": {
+ "features/field/link/tutorial": {
"slug": "link-tutorial",
"parent": "link",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/link/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/link/tutorial.md"
},
- "features/fields/message": {
+ "features/field/message": {
"slug": "message",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/message/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/message/index.md"
},
- "features/fields/message/tutorial": {
+ "features/field/message/tutorial": {
"slug": "message-tutorial",
"parent": "message",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/message/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/message/tutorial.md"
},
- "features/fields/number": {
+ "features/field/number": {
"slug": "number",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/number/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/number/index.md"
},
- "features/fields/number/tutorial": {
+ "features/field/number/tutorial": {
"slug": "number-tutorial",
"parent": "number",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/number/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/number/tutorial.md"
},
- "features/fields/oembed": {
+ "features/field/oembed": {
"slug": "oembed",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/oembed/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/oembed/index.md"
},
- "features/fields/oembed/tutorial": {
+ "features/field/oembed/tutorial": {
"slug": "oembed-tutorial",
"parent": "oembed",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/oembed/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/oembed/tutorial.md"
},
- "features/fields/page-link": {
+ "features/field/page-link": {
"slug": "page-link",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/page-link/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/page-link/index.md"
},
- "features/fields/page-link/tutorial": {
+ "features/field/page-link/tutorial": {
"slug": "page-link-tutorial",
"parent": "page-link",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/page-link/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/page-link/tutorial.md"
},
- "features/fields/password": {
+ "features/field/password": {
"slug": "password",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/password/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/password/index.md"
},
- "features/fields/password/tutorial": {
+ "features/field/password/tutorial": {
"slug": "password-tutorial",
"parent": "password",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/password/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/password/tutorial.md"
},
- "features/fields/post-object": {
+ "features/field/post-object": {
"slug": "post-object",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/post-object/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/post-object/index.md"
},
- "features/fields/post-object/tutorial": {
+ "features/field/post-object/tutorial": {
"slug": "post-object-tutorial",
"parent": "post-object",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/post-object/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/post-object/tutorial.md"
},
- "features/fields/radio": {
+ "features/field/radio": {
"slug": "radio",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/radio/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/radio/index.md"
},
- "features/fields/radio/tutorial": {
+ "features/field/radio/tutorial": {
"slug": "radio-tutorial",
"parent": "radio",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/radio/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/radio/tutorial.md"
},
- "features/fields/range": {
+ "features/field/range": {
"slug": "range",
- "parent": "fields",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/range/index.md"
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/range/index.md"
},
- "features/fields/range/tutorial": {
+ "features/field/range/tutorial": {
"slug": "range-tutorial",
"parent": "range",
- "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/fields/range/tutorial.md"
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/range/tutorial.md"
+ },
+ "features/field/repeater": {
+ "slug": "repeater",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/repeater/index.md"
+ },
+ "features/field/repeater/tutorial": {
+ "slug": "repeater-tutorial",
+ "parent": "repeater",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/repeater/tutorial.md"
+ },
+ "features/field/select": {
+ "slug": "select",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/select/index.md"
+ },
+ "features/field/select/tutorial": {
+ "slug": "select-tutorial",
+ "parent": "select",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/select/tutorial.md"
+ },
+ "features/field/separator": {
+ "slug": "separator",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/separator/index.md"
+ },
+ "features/field/separator/tutorial": {
+ "slug": "separator-tutorial",
+ "parent": "separator",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/separator/tutorial.md"
+ },
+ "features/field/tab": {
+ "slug": "tab",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/tab/index.md"
+ },
+ "features/field/tab/tutorial": {
+ "slug": "tab-tutorial",
+ "parent": "tab",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/tab/tutorial.md"
+ },
+ "features/field/taxonomy": {
+ "slug": "taxonomy",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/taxonomy/index.md"
+ },
+ "features/field/taxonomy/tutorial": {
+ "slug": "taxonomy-tutorial",
+ "parent": "taxonomy",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/taxonomy/tutorial.md"
+ },
+ "features/field/text": {
+ "slug": "text",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/text/index.md"
+ },
+ "features/field/text/tutorial": {
+ "slug": "text-tutorial",
+ "parent": "text",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/text/tutorial.md"
+ },
+ "features/field/textarea": {
+ "slug": "textarea",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/textarea/index.md"
+ },
+ "features/field/textarea/tutorial": {
+ "slug": "textarea-tutorial",
+ "parent": "textarea",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/textarea/tutorial.md"
+ },
+ "features/field/time-picker": {
+ "slug": "time-picker",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/time-picker/index.md"
+ },
+ "features/field/time-picker/tutorial": {
+ "slug": "time-picker-tutorial",
+ "parent": "time-picker",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/time-picker/tutorial.md"
+ },
+ "features/field/true-false": {
+ "slug": "true-false",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/true-false/index.md"
+ },
+ "features/field/true-false/tutorial": {
+ "slug": "true-false-tutorial",
+ "parent": "true-false",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/true-false/tutorial.md"
+ },
+ "features/field/url": {
+ "slug": "url",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/url/index.md"
+ },
+ "features/field/url/tutorial": {
+ "slug": "url-tutorial",
+ "parent": "url",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/url/tutorial.md"
+ },
+ "features/field/user": {
+ "slug": "user",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/user/index.md"
+ },
+ "features/field/user/tutorial": {
+ "slug": "user-tutorial",
+ "parent": "user",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/user/tutorial.md"
+ },
+ "features/field/wysiwyg": {
+ "slug": "wysiwyg",
+ "parent": "field",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/wysiwyg/index.md"
+ },
+ "features/field/wysiwyg/tutorial": {
+ "slug": "wysiwyg-tutorial",
+ "parent": "wysiwyg",
+ "markdown_source": "https://github.com/wordpress/secure-custom-fields/blob/trunk/docs/features/field/wysiwyg/tutorial.md"
}
}
\ No newline at end of file
diff --git a/docs/bin/update-markdown-links.php b/docs/bin/update-markdown-links.php
new file mode 100644
index 00000000..c3401119
--- /dev/null
+++ b/docs/bin/update-markdown-links.php
@@ -0,0 +1,46 @@
+#!/usr/bin/env php
+ label".
+* @date 20/5/19
+* @since ACF 5.8.1
+* @param array $roles A specific array of roles.
+* @return array
+
+## `acf_allow_unfiltered_html()`
+
+acf_allow_unfiltered_html
+
+* Returns true if the current user is allowed to save unfiltered HTML.
+* @date 9/1/19
+* @since ACF 5.7.10
+* @return boolean
+
+---
diff --git a/docs/code-reference/acf-utility-functions-file.md b/docs/code-reference/acf-utility-functions-file.md
new file mode 100644
index 00000000..afbfe908
--- /dev/null
+++ b/docs/code-reference/acf-utility-functions-file.md
@@ -0,0 +1,84 @@
+# Global Functions
+
+## `acf_new_instance()`
+
+acf_new_instance
+
+* Creates a new instance of the given class and stores it in the instances data store.
+* @date 9/1/19
+* @since ACF 5.7.10
+* @param string $class The class name.
+* @return object The instance.
+
+## `acf_get_instance()`
+
+Returns an instance for the given class.
+
+* @date 9/1/19
+* @since ACF 5.7.10
+* @param string $class The class name.
+* @return object The instance.
+
+## `acf_register_store()`
+
+acf_register_store
+
+* Registers a data store.
+* @date 9/1/19
+* @since ACF 5.7.10
+* @param string $name The store name.
+* @param array $data Array of data to start the store with.
+* @return ACF_Data
+
+## `acf_get_store()`
+
+acf_get_store
+
+* Returns a data store.
+* @date 9/1/19
+* @since ACF 5.7.10
+* @param string $name The store name.
+* @return ACF_Data
+
+## `acf_switch_stores()`
+
+acf_switch_stores
+
+* Triggered when switching between sites on a multisite installation.
+* @date 13/2/19
+* @since ACF 5.7.11
+* @param integer $site_id New blog ID.
+* @param int prev_blog_id Prev blog ID.
+* @return void
+
+## `acf_get_path()`
+
+acf_get_path
+
+* Returns the plugin path to a specified file.
+* @date 28/9/13
+* @since ACF 5.0.0
+* @param string $filename The specified file.
+* @return string
+
+## `acf_get_url()`
+
+acf_get_url
+
+* Returns the plugin url to a specified file.
+This function also defines the ACF_URL constant.
+* @date 12/12/17
+* @since ACF 5.6.8
+* @param string $filename The specified file.
+* @return string
+
+## `acf_include()`
+
+Includes a file within the ACF plugin.
+
+* @date 10/3/14
+* @since ACF 5.0.0
+* @param string $filename The specified file.
+* @return void
+
+---
diff --git a/docs/code-reference/acf-value-functions-file.md b/docs/code-reference/acf-value-functions-file.md
new file mode 100644
index 00000000..b04a45fd
--- /dev/null
+++ b/docs/code-reference/acf-value-functions-file.md
@@ -0,0 +1,100 @@
+# Global Functions
+
+## `acf_get_reference()`
+
+acf_get_reference
+
+* Retrieves the field key for a given field name and post_id.
+* @date 26/1/18
+* @since ACF 5.6.5
+* @param string $field_name The name of the field. eg 'sub_heading'.
+* @param mixed $post_id The post_id of which the value is saved against.
+* @return string The field key.
+
+## `acf_get_value()`
+
+Retrieves the value for a given field and post_id.
+
+* @date 28/09/13
+* @since ACF 5.0.0
+* @param integer|string $post_id The post id.
+* @param array $field The field array.
+* @return mixed
+
+## `acf_format_value()`
+
+Returns a formatted version of the provided value.
+
+* @since ACF 5.0.0
+* @param mixed $value The field value.
+* @param integer|string $post_id The post id.
+* @param array $field The field array.
+* @param boolean $escape_html Ask the field for a HTML safe version of it's output.
+* @return mixed
+
+## `acf_update_value()`
+
+acf_update_value
+
+* Updates the value for a given field and post_id.
+* @date 28/09/13
+* @since ACF 5.0.0
+* @param mixed $value The new value.
+* @param (int|string) $post_id The post id.
+* @param array $field The field array.
+* @return boolean
+
+## `acf_update_values()`
+
+acf_update_values
+
+* Updates an array of values.
+* @date 26/2/19
+* @since ACF 5.7.13
+* @param array values The array of values.
+* @param (int|string) $post_id The post id.
+* @return void
+
+## `acf_flush_value_cache()`
+
+acf_flush_value_cache
+
+* Deletes all cached data for this value.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param (int|string) $post_id The post id.
+* @param string $field_name The field name.
+* @return void
+
+## `acf_delete_value()`
+
+acf_delete_value
+
+* Deletes the value for a given field and post_id.
+* @date 28/09/13
+* @since ACF 5.0.0
+* @param (int|string) $post_id The post id.
+* @param array $field The field array.
+* @return boolean
+
+## `acf_preview_value()`
+
+acf_preview_value
+
+* Return a human friendly 'preview' for a given field value.
+* @date 28/09/13
+* @since ACF 5.0.0
+* @param mixed $value The new value.
+* @param (int|string) $post_id The post id.
+* @param array $field The field array.
+* @return boolean
+
+## `acf_log_invalid_field_notice()`
+
+Potentially log an error if a field doesn't exist when we expect it to.
+
+* @param array $field An array representing the field that a value was requested for.
+* @param string $function The function that noticed the problem.
+* @return void
+
+---
diff --git a/docs/code-reference/acf-wp-functions-file.md b/docs/code-reference/acf-wp-functions-file.md
new file mode 100644
index 00000000..7b2379e4
--- /dev/null
+++ b/docs/code-reference/acf-wp-functions-file.md
@@ -0,0 +1,39 @@
+# Global Functions
+
+## `acf_get_object_type()`
+
+Returns a WordPress object type.
+
+* @date 1/4/20
+* @since ACF 5.9.0
+* @param string $object_type The object type (post, term, user, etc).
+* @param string $object_subtype Optional object subtype (post type, taxonomy).
+* @return object
+
+## `acf_decode_post_id()`
+
+Decodes a post_id value such as 1 or "user_1" into an array containing the type and ID.
+
+* @date 25/1/19
+* @since ACF 5.7.11
+* @param (int|string) $post_id The post id.
+* @return array
+
+## `acf_get_object_type_rest_base()`
+
+Determine the REST base for a post type or taxonomy object. Note that this is not intended for use
+with term or post objects but is, instead, to be used with the underlying WP_Post_Type and WP_Taxonomy
+instances.
+
+* @param WP_Post_Type|WP_Taxonomy $type_object
+* @return string|null
+
+## `acf_get_object_id()`
+
+Extract the ID of a given object/array. This supports all expected types handled by our update_fields() and
+load_fields() callbacks.
+
+* @param WP_Post|WP_User|WP_Term|WP_Comment|array $object
+* @return integer|mixed|null
+
+---
diff --git a/docs/code-reference/admin/admin-notices-file.md b/docs/code-reference/admin/admin-notices-file.md
new file mode 100644
index 00000000..0818539e
--- /dev/null
+++ b/docs/code-reference/admin/admin-notices-file.md
@@ -0,0 +1,32 @@
+# Global Functions
+
+## `acf_new_admin_notice()`
+
+Instantiates and returns a new model.
+
+* @date 23/12/18
+* @since ACF 5.8.0
+* @param array $data Optional data to set.
+* @return ACF_Admin_Notice
+
+## `acf_render_admin_notices()`
+
+Renders all admin notices HTML.
+
+* @date 10/1/19
+* @since ACF 5.7.10
+* @return void
+
+## `acf_add_admin_notice()`
+
+Creates and returns a new notice.
+
+* @date 17/10/13
+* @since ACF 5.0.0
+* @param string $text The admin notice text.
+* @param string $type The type of notice (warning, error, success, info).
+* @param boolean $dismissible Is this notification dismissible (default true) (since 5.11.0).
+* @param boolean $persisted Store once a notice has been dismissed per user and prevent showing it again. (since 6.1.0).
+* @return ACF_Admin_Notice
+
+---
diff --git a/docs/code-reference/admin/admin-tools-file.md b/docs/code-reference/admin/admin-tools-file.md
new file mode 100644
index 00000000..5a62a44b
--- /dev/null
+++ b/docs/code-reference/admin/admin-tools-file.md
@@ -0,0 +1,31 @@
+# Global Functions
+
+## `acf_register_admin_tool()`
+
+Alias of acf()->admin_tools->register_tool()
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param ACF_Admin_Tool $class The tool class.
+* @return void
+
+## `acf_get_admin_tools_url()`
+
+* This function will return the admin URL to the tools page
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @return string The URL to the tools page.
+
+## `acf_get_admin_tool_url()`
+
+This function will return the admin URL to the tools page
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param string $tool The tool name.
+* @return string The URL to a particular tool's page.
+
+---
diff --git a/docs/code-reference/admin/index.md b/docs/code-reference/admin/index.md
new file mode 100644
index 00000000..d5e69d2a
--- /dev/null
+++ b/docs/code-reference/admin/index.md
@@ -0,0 +1,6 @@
+# Admin
+
+## Files
+
+- [Admin Notices File](admin-notices-file)
+- [Admin Tools File](admin-tools-file)
diff --git a/docs/code-reference/admin/views/global/index.md b/docs/code-reference/admin/views/global/index.md
new file mode 100644
index 00000000..b35124f9
--- /dev/null
+++ b/docs/code-reference/admin/views/global/index.md
@@ -0,0 +1,5 @@
+# Admin Views Global
+
+## Files
+
+- [Navigation File](navigation-file)
diff --git a/docs/code-reference/admin/views/global/navigation-file.md b/docs/code-reference/admin/views/global/navigation-file.md
new file mode 100644
index 00000000..723256cf
--- /dev/null
+++ b/docs/code-reference/admin/views/global/navigation-file.md
@@ -0,0 +1,13 @@
+# Global Functions
+
+## `acf_print_menu_section()`
+
+Helper function for looping over the provided menu items
+and echoing out the necessary markup.
+
+* @since ACF 6.2
+* @param array $menu_items An array of menu items to print.
+* @param string $section The section being printed.
+* @return void
+
+---
diff --git a/docs/code-reference/api/api-helpers-file.md b/docs/code-reference/api/api-helpers-file.md
new file mode 100644
index 00000000..82ed0883
--- /dev/null
+++ b/docs/code-reference/api/api-helpers-file.md
@@ -0,0 +1,1027 @@
+# Global Functions
+
+## `acf_is_array()`
+
+This function will return true for a non empty array
+
+* @since ACF 5.4.0
+* @param mixed $array The variable to test.
+* @return boolean
+
+## `acf_has_setting()`
+
+Alias of acf()->has_setting()
+
+* @since ACF 5.6.5
+* @param string $name Name of the setting to check for.
+* @return boolean
+
+## `acf_raw_setting()`
+
+acf_raw_setting
+
+* alias of acf()->get_setting()
+* @since ACF 5.6.5
+* @param n/a
+* @return n/a
+
+## `acf_update_setting()`
+
+acf_update_setting
+
+* alias of acf()->update_setting()
+* @since ACF 5.0.0
+* @param $name (string)
+* @param $value (mixed)
+* @return n/a
+
+## `acf_validate_setting()`
+
+acf_validate_setting
+
+* Returns the changed setting name if available.
+* @since ACF 5.6.5
+* @param n/a
+* @return n/a
+
+## `acf_get_setting()`
+
+Alias of acf()->get_setting()
+
+* @since ACF 5.0.0
+* @param string $name The name of the setting to test.
+* @param string $value An optional default value for the setting if it doesn't exist.
+* @return n/a
+
+## `acf_get_internal_post_types()`
+
+Return an array of ACF's internal post type names
+
+* @since ACF 6.1
+* @return array An array of ACF's internal post type names
+
+## `acf_append_setting()`
+
+acf_append_setting
+
+* This function will add a value into the settings array found in the acf object
+* @since ACF 5.0.0
+* @param $name (string)
+* @param $value (mixed)
+* @return n/a
+
+## `acf_get_data()`
+
+acf_get_data
+
+* Returns data.
+* @since ACF 5.0.0
+* @param string $name
+* @return mixed
+
+## `acf_set_data()`
+
+acf_set_data
+
+* Sets data.
+* @since ACF 5.0.0
+* @param string $name
+* @param mixed $value
+* @return n/a
+
+## `acf_append_data()`
+
+Appends data to an existing key.
+
+* @since ACF 5.9.0
+* @param string $name The data name.
+* @param mixed $data The data to append to name.
+
+## `acf_init()`
+
+Alias of acf()->init() - the core ACF init function.
+
+* @since ACF 5.0.0
+
+## `acf_has_done()`
+
+acf_has_done
+
+* This function will return true if this action has already been done
+* @since ACF 5.3.2
+* @param $name (string)
+* @return (boolean)
+
+## `acf_get_external_path()`
+
+This function will return the path to a file within an external folder
+
+* @since ACF 5.5.8
+* @param string $file Directory path.
+* @param string $path Optional file path.
+* @return string File path.
+
+## `acf_get_external_dir()`
+
+This function will return the url to a file within an internal ACF folder
+
+* @since ACF 5.5.8
+* @param string $file Directory path.
+* @param string $path Optional file path.
+* @return string File path.
+
+## `acf_plugin_dir_url()`
+
+This function will calculate the url to a plugin folder.
+Different to the WP plugin_dir_url(), this function can calculate for urls outside of the plugins folder (theme include).
+
+* @since ACF 5.6.8
+* @param string $file A file path inside the ACF plugin to get the plugin directory path from.
+* @return string The plugin directory path.
+
+## `acf_parse_args()`
+
+This function will merge together 2 arrays and also convert any numeric values to ints
+
+* @since ACF 5.0.0
+* @param array $args The configured arguments array.
+* @param array $defaults The default properties for the passed args to inherit.
+* @return array $args Parsed arguments with defaults applied.
+
+## `acf_parse_types()`
+
+acf_parse_types
+
+* This function will convert any numeric values to int and trim strings
+* @since ACF 5.0.0
+* @param $var (mixed)
+* @return $var (mixed)
+
+## `acf_parse_type()`
+
+acf_parse_type
+
+* description
+* @since ACF 5.0.9
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_get_view()`
+
+This function will load in a file from the 'admin/views' folder and allow variables to be passed through
+
+* @since ACF 5.0.0
+* @param string $view_path
+* @param array $view_args
+
+## `acf_merge_atts()`
+
+acf_merge_atts
+
+* description
+* @since ACF 5.0.9
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_nonce_input()`
+
+This function will create and echo a basic nonce input
+
+* @since ACF 5.6.0
+* @param string $nonce The nonce parameter string.
+
+## `acf_extract_var()`
+
+This function will remove the var from the array, and return the var
+
+* @since ACF 5.0.0
+* @param array $extract_array an array passed as reference to be extracted.
+* @param string $key The key to extract from the array.
+* @param mixed $default_value The default value if it doesn't exist in the extract array.
+* @return mixed Extracted var or default.
+
+## `acf_extract_vars()`
+
+This function will remove the vars from the array, and return the vars
+
+* @since ACF 5.0.0
+* @param array $extract_array an array passed as reference to be extracted.
+* @param array $keys An array of keys to extract from the original array.
+* @return array An array of extracted values.
+
+## `acf_get_sub_array()`
+
+acf_get_sub_array
+
+* This function will return a sub array of data
+* @since ACF 5.3.2
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_get_post_types()`
+
+Returns an array of post type names.
+
+* @since ACF 5.0.0
+* @param array $args Optional. An array of key => value arguments to match against the post type objects. Default empty array.
+* @return array A list of post type names.
+
+## `acf_get_post_stati()`
+
+Function acf_get_post_stati()
+
+* Returns an array of post status names.
+* @since ACF 6.1.0
+* @param array $args Optional. An array of key => value arguments to match against the post status objects. Default empty array.
+* @return array A list of post status names.
+
+## `acf_get_pretty_post_statuses()`
+
+Function acf_get_pretty_post_statuses()
+
+* Returns a clean array of post status names.
+* @since ACF 6.1.0
+* @param array $post_statuses Optional. An array of post status objects. Default empty array.
+* @return array An array of post status names.
+
+## `acf_get_post_type_label()`
+
+acf_get_post_type_label
+
+* This function will return a pretty label for a specific post_type
+* @since ACF 5.4.0
+* @param $post_type (string)
+* @return (string)
+
+## `acf_get_post_status_label()`
+
+Function acf_get_post_status_label()
+
+* This function will return a pretty label for a specific post_status
+* @since ACF 6.1.0
+* @param string $post_status The post status.
+* @return string The post status label.
+
+## `acf_verify_nonce()`
+
+acf_verify_nonce
+
+* This function will look at the $_POST['_acf_nonce'] value and return true or false
+* @since ACF 5.0.0
+* @param $nonce (string)
+* @return (boolean)
+
+## `acf_verify_ajax()`
+
+Returns true if the current AJAX request is valid.
+It's action will also allow WPML to set the lang and avoid AJAX get_posts issues
+
+* @since ACF 5.2.3
+* @param string $nonce The nonce to check.
+* @param string $action The action of the nonce.
+* @return boolean
+
+## `acf_get_image_sizes()`
+
+acf_get_image_sizes
+
+* This function will return an array of available image sizes
+* @since ACF 5.0.0
+* @param n/a
+* @return (array)
+
+## `acf_version_compare()`
+
+acf_version_compare
+
+* Similar to the version_compare() function but with extra functionality.
+* @since ACF 5.5.0
+* @param string $left The left version number.
+* @param string $compare The compare operator.
+* @param string $right The right version number.
+* @return boolean
+
+## `acf_get_full_version()`
+
+acf_get_full_version
+
+* This function will remove any '-beta1' or '-RC1' strings from a version
+* @since ACF 5.5.0
+* @param $version (string)
+* @return (string)
+
+## `acf_get_terms()`
+
+acf_get_terms
+
+* This function is a wrapper for the get_terms() function
+* @since ACF 5.4.0
+* @param $args (array)
+* @return (array)
+
+## `acf_get_taxonomy_terms()`
+
+acf_get_taxonomy_terms
+
+* This function will return an array of available taxonomy terms
+* @since ACF 5.0.0
+* @param $taxonomies (array)
+* @return (array)
+
+## `acf_decode_taxonomy_terms()`
+
+acf_decode_taxonomy_terms
+
+* This function decodes the $taxonomy:$term strings into a nested array
+* @since ACF 5.0.0
+* @param $terms (array)
+* @return (array)
+
+## `acf_decode_taxonomy_term()`
+
+acf_decode_taxonomy_term
+
+* This function will return the taxonomy and term slug for a given value
+* @since ACF 5.0.0
+* @param $string (string)
+* @return (array)
+
+## `acf_array()`
+
+acf_array
+
+* Casts the value into an array.
+* @since ACF 5.7.10
+* @param mixed $val The value to cast.
+* @return array
+
+## `acf_unarray()`
+
+Returns a non-array value.
+
+* @since ACF 5.8.10
+* @param mixed $val The value to review.
+* @return mixed
+
+## `acf_get_array()`
+
+acf_get_array
+
+* This function will force a variable to become an array
+* @since ACF 5.0.0
+* @param $var (mixed)
+* @return (array)
+
+## `acf_get_numeric()`
+
+acf_get_numeric
+
+* This function will return numeric values
+* @since ACF 5.4.0
+* @param $value (mixed)
+* @return (mixed)
+
+## `acf_get_posts()`
+
+acf_get_posts
+
+* Similar to the get_posts() function but with extra functionality.
+* @since ACF 5.1.5
+* @param array $args The query args.
+* @return array
+
+## `_acf_query_remove_post_type()`
+
+_acf_query_remove_post_type
+
+* This function will remove the 'wp_posts.post_type' WHERE clause completely
+When using 'post__in', this clause is unneccessary and slow.
+* @since ACF 5.1.5
+* @param $sql (string)
+* @return $sql
+
+## `acf_get_grouped_posts()`
+
+acf_get_grouped_posts
+
+* This function will return all posts grouped by post_type
+This is handy for select settings
+* @since ACF 5.0.0
+* @param $args (array)
+* @return (array)
+
+## `_acf_orderby_post_type()`
+
+The internal ACF function to add order by post types for use in `acf_get_grouped_posts`
+
+* @param string $orderby The current orderby value for a query.
+* @param object $wp_query The WP_Query.
+* @return string The potentially modified orderby string.
+
+## `acf_get_pretty_user_roles()`
+
+acf_get_pretty_user_roles
+
+* description
+* @since ACF 5.3.2
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_get_grouped_users()`
+
+acf_get_grouped_users
+
+* This function will return all users grouped by role
+This is handy for select settings
+* @since ACF 5.0.0
+* @param $args (array)
+* @return (array)
+
+## `acf_json_encode()`
+
+acf_json_encode
+
+* Returns json_encode() ready for file / database use.
+* @since ACF 5.0.0
+* @param array $json The array of data to encode.
+* @return string
+
+## `acf_str_exists()`
+
+acf_str_exists
+
+* This function will return true if a sub string is found
+* @since ACF 5.0.0
+* @param $needle (string)
+* @param $haystack (string)
+* @return (boolean)
+
+## `acf_debug()`
+
+A legacy function designed for developer debugging.
+
+* @deprecated 6.2.6 Removed for security, but keeping the definition in case third party devs have it in their code.
+* @since ACF 5.0.0
+* @return false
+
+## `acf_debug_start()`
+
+A legacy function designed for developer debugging.
+
+* @deprecated 6.2.6 Removed for security, but keeping the definition in case third party devs have it in their code.
+* @since ACF 5.0.0
+* @return false
+
+## `acf_debug_end()`
+
+A legacy function designed for developer debugging.
+
+* @deprecated 6.2.6 Removed for security, but keeping the definition in case third party devs have it in their code.
+* @since ACF 5.0.0
+* @return false
+
+## `acf_encode_choices()`
+
+acf_encode_choices
+
+* description
+* @since ACF 5.0.0
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_str_replace()`
+
+acf_str_replace
+
+* This function will replace an array of strings much like str_replace
+The difference is the extra logic to avoid replacing a string that has alread been replaced
+This is very useful for replacing date characters as they overlap with eachother
+* @since ACF 5.3.8
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_split_date_time()`
+
+acf_split_date_time
+
+* This function will split a format string into seperate date and time
+* @since ACF 5.3.8
+* @param $date_time (string)
+* @return $formats (array)
+
+## `acf_convert_date_to_php()`
+
+acf_convert_date_to_php
+
+* This fucntion converts a date format string from JS to PHP
+* @since ACF 5.0.0
+* @param $date (string)
+* @return (string)
+
+## `acf_convert_date_to_js()`
+
+acf_convert_date_to_js
+
+* This fucntion converts a date format string from PHP to JS
+* @since ACF 5.0.0
+* @param $date (string)
+* @return (string)
+
+## `acf_convert_time_to_php()`
+
+acf_convert_time_to_php
+
+* This fucntion converts a time format string from JS to PHP
+* @since ACF 5.0.0
+* @param $time (string)
+* @return (string)
+
+## `acf_convert_time_to_js()`
+
+acf_convert_time_to_js
+
+* This fucntion converts a date format string from PHP to JS
+* @since ACF 5.0.0
+* @param $time (string)
+* @return (string)
+
+## `acf_update_user_setting()`
+
+acf_update_user_setting
+
+* description
+* @since ACF 5.0.0
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_get_user_setting()`
+
+acf_get_user_setting
+
+* description
+* @since ACF 5.0.0
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_in_array()`
+
+acf_in_array
+
+* description
+* @since ACF 5.0.0
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_get_valid_post_id()`
+
+acf_get_valid_post_id
+
+* This function will return a valid post_id based on the current screen / parameter
+* @since ACF 5.0.0
+* @param $post_id (mixed)
+* @return $post_id (mixed)
+
+## `acf_get_post_id_info()`
+
+acf_get_post_id_info
+
+* This function will return the type and id for a given $post_id string
+* @since ACF 5.4.0
+* @param $post_id (mixed)
+* @return $info (array)
+
+## `acf_isset_termmeta()`
+
+acf_isset_termmeta
+
+* This function will return true if the termmeta table exists
+
+* @since ACF 5.4.0
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_upload_files()`
+
+This function will walk through the $_FILES data and upload each found.
+
+* @since ACF 5.0.9
+* @param array $ancestors An internal parameter, not required.
+
+## `acf_upload_file()`
+
+acf_upload_file
+
+* This function will uploade a $_FILE
+* @since ACF 5.0.9
+* @param $uploaded_file (array) array found from $_FILE data
+* @return $id (int) new attachment ID
+
+## `acf_update_nested_array()`
+
+acf_update_nested_array
+
+* This function will update a nested array value. Useful for modifying the $_POST array
+* @since ACF 5.0.9
+* @param $array (array) target array to be updated
+* @param $ancestors (array) array of keys to navigate through to find the child
+* @param $value (mixed) The new value
+* @return (boolean)
+
+## `acf_is_screen()`
+
+acf_is_screen
+
+* This function will return true if all args are matched for the current screen
+* @since ACF 5.1.5
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_is_acf_admin_screen()`
+
+Check if we're in an ACF admin screen
+
+* @since ACF 6.2.2
+* @return boolean Returns true if the current screen is an ACF admin screen.
+
+## `acf_maybe_get()`
+
+acf_maybe_get
+
+* This function will return a var if it exists in an array
+* @since ACF 5.1.5
+* @param $array (array) the array to look within
+* @param $key (key) the array key to look for. Nested values may be found using '/'
+* @param $default (mixed) the value returned if not found
+* @return $post_id (int)
+
+## `acf_get_attachment()`
+
+Returns an array of attachment data.
+
+* @since ACF 5.1.5
+* @param integer|WP_Post The attachment ID or object
+* @return array|false
+
+## `acf_get_truncated()`
+
+This function will truncate and return a string
+
+* @since ACF 5.0.0
+* @param string $text The text to truncate.
+* @param integer $length The number of characters to allow in the string.
+* @return string
+
+## `acf_current_user_can_admin()`
+
+acf_current_user_can_admin
+
+* This function will return true if the current user can administrate the ACF field groups
+* @since ACF 5.1.5
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_current_user_can_edit_post()`
+
+Wrapper function for current_user_can( 'edit_post', $post_id ).
+
+* @since ACF 6.3.4
+* @param integer $post_id The post ID to check.
+* @return boolean
+
+## `acf_get_filesize()`
+
+acf_get_filesize
+
+* This function will return a numeric value of bytes for a given filesize string
+* @since ACF 5.1.5
+* @param $size (mixed)
+* @return (int)
+
+## `acf_format_filesize()`
+
+acf_format_filesize
+
+* This function will return a formatted string containing the filesize and unit
+* @since ACF 5.1.5
+* @param $size (mixed)
+* @return (int)
+
+## `acf_get_valid_terms()`
+
+acf_get_valid_terms
+
+* This function will replace old terms with new split term ids
+* @since ACF 5.1.5
+* @param $terms (int|array)
+* @param $taxonomy (string)
+* @return $terms
+
+## `acf_validate_attachment()`
+
+acf_validate_attachment
+
+* This function will validate an attachment based on a field's restrictions and return an array of errors
+* @since ACF 5.2.3
+* @param $attachment (array) attachment data. Changes based on context
+* @param $field (array) field settings containing restrictions
+* @param context (string) $file is different when uploading / preparing
+* @return $errors (array)
+
+## `acf_translate()`
+
+acf_translate
+
+* This function will translate a string using the new 'l10n_textdomain' setting
+Also works for arrays which is great for fields - select -> choices
+* @since ACF 5.3.2
+* @param $string (mixed) string or array containins strings to be translated
+* @return $string
+
+## `acf_maybe_add_action()`
+
+acf_maybe_add_action
+
+* This function will determine if the action has already run before adding / calling the function
+* @since ACF 5.3.2
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_is_row_collapsed()`
+
+acf_is_row_collapsed
+
+* This function will return true if the field's row is collapsed
+* @since ACF 5.3.2
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_get_attachment_image()`
+
+Return an image tag for the provided attachment ID
+
+* @since ACF 5.5.0
+* @deprecated 6.3.2
+* @param integer $attachment_id The attachment ID
+* @param string $size The image size to use in the image tag.
+* @return false
+
+## `acf_get_post_thumbnail()`
+
+acf_get_post_thumbnail
+
+* This function will return a thumbail image url for a given post
+* @since ACF 5.3.8
+* @param $post (obj)
+* @param $size (mixed)
+* @return (string)
+
+## `acf_get_browser()`
+
+acf_get_browser
+
+* Returns the name of the current browser.
+* @since ACF 5.0.0
+* @return string
+
+## `acf_is_ajax()`
+
+acf_is_ajax
+
+* This function will reutrn true if performing a wp ajax call
+* @since ACF 5.3.8
+* @param n/a
+* @return (boolean)
+
+## `acf_format_date()`
+
+Returns a date value in a formatted string.
+
+* @since ACF 5.3.8
+* @param string $value The date value to format.
+* @param string $format The format to use.
+* @return string
+
+## `acf_clear_log()`
+
+Previously, deletes the debug.log file.
+
+* @since ACF 5.7.10
+* @deprecated 6.2.7
+
+## `acf_log()`
+
+acf_log
+
+* description
+* @since ACF 5.3.8
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `acf_dev_log()`
+
+acf_dev_log
+
+* Used to log variables only if ACF_DEV is defined
+* @since ACF 5.7.4
+* @param mixed
+* @return void
+
+## `acf_doing()`
+
+acf_doing
+
+* This function will tell ACF what task it is doing
+* @since ACF 5.3.8
+* @param $event (string)
+* @param context (string)
+* @return n/a
+
+## `acf_is_doing()`
+
+acf_is_doing
+
+* This function can be used to state what ACF is doing, or to check
+* @since ACF 5.3.8
+* @param $event (string)
+* @param context (string)
+* @return (boolean)
+
+## `acf_is_plugin_active()`
+
+acf_is_plugin_active
+
+* This function will return true if the ACF plugin is active
+* May be included within a theme or other plugin
+
+* @since ACF 5.4.0
+* @param $basename (int)
+* @return $post_id (int)
+
+## `acf_send_ajax_results()`
+
+acf_send_ajax_results
+
+* This function will print JSON data for a Select2 AJAX query
+* @since ACF 5.4.0
+* @param $response (array)
+* @return n/a
+
+## `acf_is_sequential_array()`
+
+acf_is_sequential_array
+
+* This function will return true if the array contains only numeric keys
+* @source
+* @since ACF 5.4.0
+* @param $array (array)
+* @return (boolean)
+
+## `acf_is_associative_array()`
+
+acf_is_associative_array
+
+* This function will return true if the array contains one or more string keys
+* @source
+* @since ACF 5.4.0
+* @param $array (array)
+* @return (boolean)
+
+## `acf_add_array_key_prefix()`
+
+acf_add_array_key_prefix
+
+* This function will add a prefix to all array keys
+Useful to preserve numeric keys when performing array_multisort
+* @since ACF 5.4.0
+* @param $array (array)
+* @param $prefix (string)
+* @return (array)
+
+## `acf_remove_array_key_prefix()`
+
+acf_remove_array_key_prefix
+
+* This function will remove a prefix to all array keys
+Useful to preserve numeric keys when performing array_multisort
+* @since ACF 5.4.0
+* @param $array (array)
+* @param $prefix (string)
+* @return (array)
+
+## `acf_connect_attachment_to_post()`
+
+This function will connect an attacment (image etc) to the post
+Used to connect attachements uploaded directly to media that have not been attaced to a post
+
+* @since ACF 5.8.0 Added filter to prevent connection.
+* @since ACF 5.5.4
+* @param integer $attachment_id The attachment ID.
+* @param integer $post_id The post ID.
+* @return boolean True if attachment was connected.
+
+## `acf_encrypt()`
+
+acf_encrypt
+
+* This function will encrypt a string using PHP
+
+* @since ACF 5.5.8
+* @param $data (string)
+* @return (string)
+
+## `acf_decrypt()`
+
+acf_decrypt
+
+* This function will decrypt an encrypted string using PHP
+
+* @since ACF 5.5.8
+* @param $data (string)
+* @return (string)
+
+## `acf_parse_markdown()`
+
+acf_parse_markdown
+
+* A very basic regex-based Markdown parser function based off [slimdown](https://gist.github.com/jbroadway/2836900).
+* @since ACF 5.7.2
+* @param string $text The string to parse.
+* @return string
+
+## `acf_get_sites()`
+
+acf_get_sites
+
+* Returns an array of sites for a network.
+* @since ACF 5.4.0
+* @return array
+
+## `acf_convert_rules_to_groups()`
+
+acf_convert_rules_to_groups
+
+* Converts an array of rules from ACF4 to an array of groups for ACF5
+* @since ACF 5.7.4
+* @param array $rules An array of rules.
+* @param string $anyorall The anyorall setting used in ACF4. Defaults to 'any'.
+* @return array
+
+## `acf_register_ajax()`
+
+acf_register_ajax
+
+* Regsiters an ajax callback.
+* @since ACF 5.7.7
+* @param string $name The ajax action name.
+* @param array $callback The callback function or array.
+* @param boolean $public Whether to allow access to non logged in users.
+* @return void
+
+## `acf_str_camel_case()`
+
+acf_str_camel_case
+
+* Converts a string into camelCase.
+Thanks to
+* @since ACF 5.8.0
+* @param string $string The string ot convert.
+* @return string
+
+## `acf_array_camel_case()`
+
+acf_array_camel_case
+
+* Converts all aray keys to camelCase.
+* @since ACF 5.8.0
+* @param array $array The array to convert.
+* @return array
+
+## `acf_is_block_editor()`
+
+Returns true if the current screen is using the block editor.
+
+* @since ACF 5.8.0
+* @return boolean
+
+## `acf_get_wp_reserved_terms()`
+
+Return an array of the WordPress reserved terms
+
+* @since ACF 6.1
+* @return array The WordPress reserved terms list.
+
+## `acf_is_multisite_sub_site()`
+
+Detect if we're on a multisite subsite.
+
+* @since ACF 6.2.4
+* @return boolean true if we're in a multisite install and not on the main site
+
+## `acf_is_multisite_main_site()`
+
+Detect if we're on a multisite main site.
+
+* @since ACF 6.2.4
+* @return boolean true if we're in a multisite install and on the main site
+
+---
diff --git a/docs/code-reference/api/api-template-file.md b/docs/code-reference/api/api-template-file.md
new file mode 100644
index 00000000..a450c413
--- /dev/null
+++ b/docs/code-reference/api/api-template-file.md
@@ -0,0 +1,327 @@
+# Global Functions
+
+## `get_field()`
+
+This function will return a custom field value for a specific field name/key + post_id.
+There is a 3rd parameter to turn on/off formating. This means that an image field will not use
+its 'return option' to format the value but return only what was saved in the database
+
+* @since ACF 3.6
+* @param string $selector The field name or key.
+* @param mixed $post_id The post_id of which the value is saved against.
+* @param boolean $format_value Whether or not to format the value as described above.
+* @param boolean $escape_html If we're formatting the value, make sure it's also HTML safe.
+* @return mixed
+
+## `the_field()`
+
+This function is the same as echo get_field(), but will escape the value for safe HTML output regardless of parameters.
+
+* @since ACF 1.0.3
+* @param string $selector The field name or key.
+* @param mixed $post_id The post_id of which the value is saved against.
+* @param boolean $format_value Enable formatting of value. Default true.
+* @return void
+
+## `_acf_log_escaped_html()`
+
+Logs instances of ACF successfully escaping unsafe HTML.
+
+* @since ACF 6.2.5
+* @param string $function The function that resulted in HTML being escaped.
+* @param string $selector The selector (field key, name, etc.) passed to that function.
+* @param array $field The field being queried when HTML was escaped.
+* @param mixed $post_id The post ID the function was called on.
+* @return void
+
+## `_acf_get_escaped_html_log()`
+
+Returns an array of instances where HTML was altered due to escaping in the_field or a shortcode.
+
+* @since ACF 6.2.5
+* @return array
+
+## `_acf_update_escaped_html_log()`
+
+Updates the array of instances where HTML was altered due to escaping in the_field or a shortcode.
+
+* @since ACF 6.2.5
+* @param array $escaped The array of instances.
+* @return boolean True on success, or false on failure.
+
+## `_acf_delete_escaped_html_log()`
+
+Deletes the array of instances where HTML was altered due to escaping in the_field or a shortcode.
+Since 6.2.7, also clears the legacy `acf_will_escape_html_log` option to clean up.
+
+* @since ACF 6.2.5
+* @return boolean True on success, or false on failure.
+
+## `get_field_object()`
+
+This function will return an array containing all the field data for a given field_name.
+
+* @since ACF 3.6
+* @param string $selector The field name or key.
+* @param mixed $post_id The post_id of which the value is saved against.
+* @param boolean $format_value Whether to format the field value.
+* @param boolean $load_value Whether to load the field value.
+* @param boolean $escape_html Should the field return a HTML safe formatted value if $format_value is true.
+* @return array|false $field
+
+## `acf_maybe_get_field()`
+
+This function will return a field for the given selector.
+It will also review the field_reference to ensure the correct field is returned which makes it useful for the template API
+
+* @since ACF 5.2.3
+* @param $selector (mixed) identifier of field. Can be an ID, key, name or post object
+* @param $post_id (mixed) the post_id of which the value is saved against
+* @param $strict (boolean) if true, return a field only when a field key is found.
+* @return $field (array)
+
+## `acf_maybe_get_sub_field()`
+
+This function will attempt to find a sub field
+
+* @since ACF 5.4.0
+* @param $post_id (int)
+* @return $post_id (int)
+
+## `get_fields()`
+
+This function will return an array containing all the custom field values for a specific post_id.
+The function is not very elegant and wastes a lot of PHP memory / SQL queries if you are not using all the values.
+
+* @since ACF 3.6
+* @param mixed $post_id The post_id of which the value is saved against.
+* @param boolean $format_value Whether or not to format the field value.
+* @param boolean $escape_html Should the field return a HTML safe formatted value if $format_value is true.
+* @return array|false Associative array where field name => field value, or false on failure.
+
+## `get_field_objects()`
+
+This function will return an array containing all the custom field objects for a specific post_id.
+The function is not very elegant and wastes a lot of PHP memory / SQL queries if you are not using all the fields / values.
+
+* @since ACF 3.6
+* @param mixed $post_id The post_id of which the value is saved against.
+* @param boolean $format_value Whether or not to format the field value.
+* @param boolean $load_value Whether or not to load the field value.
+* @param boolean $escape_html Should the field return a HTML safe formatted value if $format_value is true.
+* @return array|false Associative array where field name => field, or false on failure.
+
+## `have_rows()`
+
+Checks if a field (such as Repeater or Flexible Content) has any rows of data to loop over.
+This function is intended to be used in conjunction with the_row() to step through available values.
+
+* @since ACF 4.3.0
+* @param string $selector The field name or field key.
+* @param mixed $post_id The post ID where the value is saved. Defaults to the current post.
+* @return boolean
+
+## `the_row()`
+
+This function will progress the global repeater or flexible content value 1 row
+
+* @since ACF 4.3.0
+* @param N/A
+* @return (array) the current row data
+
+## `get_row_sub_field()`
+
+This function is used inside a 'has_sub_field' while loop to return a sub field object
+
+* @since ACF 5.3.8
+* @param $selector (string)
+* @return (array)
+
+## `get_row_sub_value()`
+
+This function is used inside a 'has_sub_field' while loop to return a sub field value
+
+* @since ACF 5.3.8
+* @param $selector (string)
+* @return (mixed)
+
+## `reset_rows()`
+
+This function will find the current loop and unset it from the global array.
+To be used when loop finishes or a break is used
+
+* @since ACF 5.0.0
+* @param $hard_reset (boolean) completely wipe the global variable, or just unset the active row
+* @return (boolean)
+
+## `has_sub_field()`
+
+This function is used inside a while loop to return either true or false (loop again or stop).
+When using a repeater or flexible content field, it will loop through the rows until
+there are none left or a break is detected
+
+* @since ACF 1.0.3
+* @param $field_name (string) the field name
+* @param $post_id (mixed) the post_id of which the value is saved against
+* @return (boolean)
+
+## `has_sub_fields()`
+
+Alias of has_sub_field
+
+## `get_sub_field()`
+
+This function is used inside a 'has_sub_field' while loop to return a sub field value
+
+* @since ACF 1.0.3
+* @param string $selector The field name or key.
+* @param boolean $format_value Whether or not to format the value as described above.
+* @param boolean $escape_html If we're formatting the value, make sure it's also HTML safe.
+* @return mixed
+
+## `the_sub_field()`
+
+This function is the same as echo get_sub_field(), but will escape the value for safe HTML output.
+
+* @since ACF 1.0.3
+* @param string $field_name The field name.
+* @param boolean $format_value Enable formatting of value. When false, the field value will be escaped at this level with `acf_esc_html`. Default true.
+* @return void
+
+## `get_sub_field_object()`
+
+This function is used inside a 'has_sub_field' while loop to return a sub field object
+
+* @since ACF 3.5.8.1
+* @param string $selector The field name or key.
+* @param boolean $format_value Whether to format the field value.
+* @param boolean $load_value Whether to load the field value.
+* @param boolean $escape_html Should the field return a HTML safe formatted value.
+* @return mixed
+
+## `get_row_layout()`
+
+This function will return a string representation of the current row layout within a 'have_rows' loop
+
+* @since ACF 3.0.6
+* @return mixed
+
+## `acf_shortcode()`
+
+This function is used to add basic shortcode support for the ACF plugin
+eg. [acf field="heading" post_id="123" format_value="1"]
+
+* @since ACF 1.1.1
+* @param array $atts The shortcode attributes.
+* @return string|void
+
+## `update_field()`
+
+This function will update a value in the database
+
+* @since ACF 3.1.9
+* @param string $selector The field name or key.
+* @param mixed $value The value to save in the database.
+* @param mixed $post_id The post_id of which the value is saved against.
+* @return boolean
+
+## `update_sub_field()`
+
+This function will update a value of a sub field in the database
+
+* @since ACF 5.0.0
+* @param $selector (mixed) the sub field name or key, or an array of ancestors
+* @param $value (mixed) the value to save in the database
+* @param $post_id (mixed) the post_id of which the value is saved against
+* @return boolean
+
+## `delete_field()`
+
+This function will remove a value from the database
+
+* @since ACF 3.1.9
+* @param $selector (string) the field name or key
+* @param $post_id (mixed) the post_id of which the value is saved against
+* @return boolean
+
+## `delete_sub_field()`
+
+This function will delete a value of a sub field in the database
+
+* @since ACF 5.0.0
+* @param $selector (mixed) the sub field name or key, or an array of ancestors
+* @param $value (mixed) the value to save in the database
+* @param $post_id (mixed) the post_id of which the value is saved against
+* @return (boolean)
+
+## `add_row()`
+
+This function will add a row of data to a field
+
+* @since ACF 5.2.3
+* @param $selector (string)
+* @param $row (array)
+* @param $post_id (mixed)
+* @return (boolean)
+
+## `add_sub_row()`
+
+This function will add a row of data to a field
+
+* @since ACF 5.2.3
+* @param $selector (string)
+* @param $row (array)
+* @param $post_id (mixed)
+* @return (boolean)
+
+## `update_row()`
+
+This function will update a row of data to a field
+
+* @since ACF 5.2.3
+* @param $selector (string)
+* @param $i (int)
+* @param $row (array)
+* @param $post_id (mixed)
+* @return (boolean)
+
+## `update_sub_row()`
+
+This function will add a row of data to a field
+
+* @since ACF 5.2.3
+* @param $selector (string)
+* @param $row (array)
+* @param $post_id (mixed)
+* @return (boolean)
+
+## `delete_row()`
+
+This function will delete a row of data from a field
+
+* @since ACF 5.2.3
+* @param $selector (string)
+* @param $i (int)
+* @param $post_id (mixed)
+* @return (boolean)
+
+## `delete_sub_row()`
+
+This function will add a row of data to a field
+
+* @since ACF 5.2.3
+* @param $selector (string)
+* @param $row (array)
+* @param $post_id (mixed)
+* @return (boolean)
+
+## `create_field()`
+
+Depreceated Functions
+
+* These functions are outdated
+* @since ACF 1.0.0
+* @param n/a
+* @return n/a
+
+---
diff --git a/docs/code-reference/api/api-term-file.md b/docs/code-reference/api/api-term-file.md
new file mode 100644
index 00000000..07c46271
--- /dev/null
+++ b/docs/code-reference/api/api-term-file.md
@@ -0,0 +1,158 @@
+# Global Functions
+
+## `acf_get_taxonomies()`
+
+Returns an array of taxonomy names.
+
+* @date 7/10/13
+* @since ACF 5.0.0
+* @param array $args An array of args used in the get_taxonomies() function.
+* @return array An array of taxonomy names.
+
+## `acf_get_taxonomies_for_post_type()`
+
+acf_get_taxonomies_for_post_type
+
+* Returns an array of taxonomies for a given post type(s)
+* @date 7/9/18
+* @since ACF 5.7.5
+* @param string|array $post_types The post types to compare against.
+* @return array
+
+## `acf_get_taxonomy_labels()`
+
+Returns an array of taxonomies in the format "name => label" for use in a select field.
+
+* @date 3/8/18
+* @since ACF 5.7.2
+* @param array $taxonomies Optional. An array of specific taxonomies to return.
+* @return array
+
+## `acf_get_term_title()`
+
+acf_get_term_title
+
+* Returns the title for this term object.
+* @date 10/9/18
+* @since ACF 5.0.0
+* @param object $term The WP_Term object.
+* @return string
+
+## `acf_get_grouped_terms()`
+
+acf_get_grouped_terms
+
+* Returns an array of terms for the given query $args and groups by taxonomy name.
+* @date 2/8/18
+* @since ACF 5.7.2
+* @param array $args An array of args used in the get_terms() function.
+* @return array
+
+## `_acf_terms_clauses()`
+
+_acf_terms_clauses
+
+* Used in the 'terms_clauses' filter to order terms by taxonomy name.
+* @date 2/8/18
+* @since ACF 5.7.2
+* @param array $pieces Terms query SQL clauses.
+* @param array $taxonomies An array of taxonomies.
+* @param array $args An array of terms query arguments.
+* @return array $pieces
+
+## `acf_get_pretty_taxonomies()`
+
+acf_get_pretty_taxonomies
+
+* Deprecated in favor of acf_get_taxonomy_labels() function.
+* @date 7/10/13
+* @since ACF 5.0.0
+* @deprecated 5.7.2
+
+## `acf_get_term()`
+
+acf_get_term
+
+* Similar to get_term() but with some extra functionality.
+* @date 19/8/18
+* @since ACF 5.7.3
+* @param mixed $term_id The term ID or a string of "taxonomy:slug".
+* @param string $taxonomy The taxonomyname.
+* @return WP_Term
+
+## `acf_encode_term()`
+
+acf_encode_term
+
+* Returns a "taxonomy:slug" string for a given WP_Term.
+* @date 27/8/18
+* @since ACF 5.7.4
+* @param WP_Term $term The term object.
+* @return string
+
+## `acf_decode_term()`
+
+acf_decode_term
+
+* Decodes a "taxonomy:slug" string into an array of taxonomy and slug.
+* @date 27/8/18
+* @since ACF 5.7.4
+* @param WP_Term $term The term object.
+* @return string
+
+## `acf_get_encoded_terms()`
+
+acf_get_encoded_terms
+
+* Returns an array of WP_Term objects from an array of encoded strings
+* @date 9/9/18
+* @since ACF 5.7.5
+* @param array $values The array of encoded strings.
+* @return array
+
+## `acf_get_choices_from_terms()`
+
+acf_get_choices_from_terms
+
+* Returns an array of choices from the terms provided.
+* @date 8/9/18
+* @since ACF 5.7.5
+* @param array $values and array of WP_Terms objects or encoded strings.
+* @param string $format The value format (term_id, slug).
+* @return array
+
+## `acf_get_choices_from_grouped_terms()`
+
+acf_get_choices_from_grouped_terms
+
+* Returns an array of choices from the grouped terms provided.
+* @date 8/9/18
+* @since ACF 5.7.5
+* @param array $value A grouped array of WP_Terms objects.
+* @param string $format The value format (term_id, slug).
+* @return array
+
+## `acf_get_choice_from_term()`
+
+acf_get_choice_from_term
+
+* Returns an array containing the id and text for this item.
+* @date 10/9/18
+* @since ACF 5.7.6
+* @param object $item The item object such as WP_Post or WP_Term.
+* @param string $format The value format (term_id, slug)
+* @return array
+
+## `acf_get_term_post_id()`
+
+Returns a valid post_id string for a given term and taxonomy.
+No longer needed since WP introduced the termmeta table in WP 4.4.
+
+* @date 6/2/17
+* @since ACF 5.5.6
+* @deprecated 5.9.2
+* @param $taxonomy (string) The taxonomy type.
+* @param $term_id (int) The term ID.
+* @return (string)
+
+---
diff --git a/docs/code-reference/api/index.md b/docs/code-reference/api/index.md
new file mode 100644
index 00000000..ecd5c673
--- /dev/null
+++ b/docs/code-reference/api/index.md
@@ -0,0 +1,7 @@
+# Api
+
+## Files
+
+- [Api Helpers File](api-helpers-file)
+- [Api Template File](api-template-file)
+- [Api Term File](api-term-file)
diff --git a/docs/code-reference/assets-file.md b/docs/code-reference/assets-file.md
new file mode 100644
index 00000000..a4c6258a
--- /dev/null
+++ b/docs/code-reference/assets-file.md
@@ -0,0 +1,47 @@
+# Global Functions
+
+## `acf_localize_text()`
+
+Appends an array of i18n data for localization.
+
+* @date 13/4/18
+* @since ACF 5.6.9
+* @param array $text An array of text for i18n.
+* @return void
+
+## `acf_localize_data()`
+
+Appends an array of l10n data for localization.
+
+* @date 13/4/18
+* @since ACF 5.6.9
+* @param array $data An array of data for l10n.
+* @return void
+
+## `acf_enqueue_script()`
+
+Enqueues a script with support for supplemental inline scripts.
+
+* @date 27/4/20
+* @since ACF 5.9.0
+* @param string $name The script name.
+* @return void
+
+## `acf_enqueue_scripts()`
+
+Enqueues the input scripts required for fields.
+
+* @date 13/4/18
+* @since ACF 5.6.9
+* @param array $args See ACF_Assets::enqueue_scripts() for a list of args.
+* @return void
+
+## `acf_enqueue_uploader()`
+
+Enqueues the WP media uploader scripts and styles.
+
+* @date 27/10/2014
+* @since ACF 5.0.9
+* @return void
+
+---
diff --git a/docs/code-reference/blocks-file.md b/docs/code-reference/blocks-file.md
new file mode 100644
index 00000000..53adcc7a
--- /dev/null
+++ b/docs/code-reference/blocks-file.md
@@ -0,0 +1,341 @@
+# Global Functions
+
+## `acf_add_block_namespace()`
+
+Prefix block names for SCF blocks registered through block.json
+
+* @since ACF 6.0.0
+* @param array $metadata The block metadata array.
+* @return array The original array with a prefixed block name if it's an ACF block.
+
+## `acf_handle_json_block_registration()`
+
+Handle an SCF block registered through block.json
+
+* @since ACF 6.0.0
+* @param array $settings The compiled block settings.
+* @param array $metadata The raw json metadata.
+* @return array Block registration settings with ACF required additions.
+
+## `acf_is_acf_block_json()`
+
+Check if a block.json block is an SCF block.
+
+* @since ACF 6.0.0
+* @param array $metadata The raw block metadata array.
+* @return boolean
+
+## `acf_register_block_type()`
+
+Registers a block type.
+
+* @date 18/2/19
+* @since ACF 5.8.0
+* @param array $block The block settings.
+* @return (array|false)
+
+## `acf_register_block()`
+
+See acf_register_block_type().
+
+* @date 18/2/19
+* @since ACF 5.7.12
+* @param array $block The block settings.
+* @return (array|false)
+
+## `acf_has_block_type()`
+
+Returns true if a block type exists for the given name.
+
+* @since ACF 5.7.12
+* @param string $name The block type name.
+* @return boolean
+
+## `acf_get_block_types()`
+
+Returns an array of all registered block types.
+
+* @since ACF 5.7.12
+* @return array
+
+## `acf_get_block_type()`
+
+Returns a block type for the given name.
+
+* @since ACF 5.7.12
+* @param string $name The block type name.
+* @return (array|null)
+
+## `acf_remove_block_type()`
+
+Removes a block type for the given name.
+
+* @since ACF 5.7.12
+* @param string $name The block type name.
+* @return void
+
+## `acf_get_block_type_default_attributes()`
+
+Returns an array of default attribute settings for a block type.
+
+* @date 19/11/18
+* @since ACF 5.8.0
+* @param array $block_type A block configuration array.
+* @return array
+
+## `acf_validate_block_type()`
+
+Validates a block type ensuring all settings exist.
+
+* @since ACF 5.8.0
+* @param array $block The block settings.
+* @return array
+
+## `acf_prepare_block()`
+
+Prepares a block for use in render_callback by merging in all settings and attributes.
+
+* @since ACF 5.8.0
+* @param array $block The block props.
+* @return array|boolean
+
+## `acf_add_back_compat_attributes()`
+
+Add backwards compatible attribute values.
+
+* @since ACF 6.0.0
+* @param array $block The original block.
+* @return array Modified block array with backwards compatibility attributes.
+
+## `acf_get_block_back_compat_attribute_key_array()`
+
+Get back compat new values and old values.
+
+* @since ACF 6.0.0
+* @return array back compat key array.
+
+## `acf_render_block_callback()`
+
+The render callback for all ACF blocks.
+
+* @date 28/10/20
+* @since ACF 5.9.2
+* @param array $attributes The block attributes.
+* @param string $content The block content.
+* @param WP_Block $wp_block The block instance (since WP 5.5).
+* @return string The block HTML.
+
+## `acf_rendered_block()`
+
+Returns the rendered block HTML.
+
+* @date 28/2/19
+* @since ACF 5.7.13
+* @param array $attributes The block attributes.
+* @param string $content The block content.
+* @param boolean $is_preview Whether or not the block is being rendered for editing preview.
+* @param integer $post_id The current post being edited or viewed.
+* @param WP_Block $wp_block The block instance (since WP 5.5).
+* @param array $context The block context array.
+* @param boolean $is_ajax_render Whether or not this is an ACF AJAX render.
+* @return string The block HTML.
+
+## `acf_render_block()`
+
+Renders the block HTML.
+
+* @since ACF 5.7.12
+* @param array $attributes The block attributes.
+* @param string $content The block content.
+* @param boolean $is_preview Whether or not the block is being rendered for editing preview.
+* @param integer $post_id The current post being edited or viewed.
+* @param WP_Block $wp_block The block instance (since WP 5.5).
+* @param array $context The block context array.
+* @return void|string
+
+## `acf_block_render_template()`
+
+Locate and include an ACF block's template.
+
+* @since ACF 6.0.4
+* @param array $block The block props.
+* @param string $content The block content.
+* @param boolean $is_preview Whether this is a preview render.
+* @param int $post_id The post ID this block is saved to.
+* @param object $wp_block The block instance object.
+* @param array $context The block context array.
+
+## `acf_get_block_fields()`
+
+Returns an array of all fields for the given block.
+
+* @date 24/10/18
+* @since ACF 5.8.0
+* @param array $block The block props.
+* @return array
+
+## `acf_enqueue_block_assets()`
+
+Enqueues and localizes block scripts and styles.
+
+* @since ACF 5.7.13
+* @return void
+
+## `acf_enqueue_block_type_assets()`
+
+Enqueues scripts and styles for a specific block type.
+
+* @since ACF 5.7.13
+* @param array $block_type The block type settings.
+* @return void
+
+## `acf_ajax_fetch_block()`
+
+Handles the ajax request for block data.
+
+* @since ACF 5.7.13
+* @return void
+
+## `acf_get_empty_block_form_html()`
+
+Render the empty block form for when a block has no fields assigned.
+
+* @since ACF 6.0.0
+* @param string $block_name The block name current being rendered.
+* @return string The html that makes up a block form with no fields.
+
+## `acf_parse_save_blocks()`
+
+Parse content that may contain HTML block comments and saves ACF block meta.
+
+* @since ACF 5.7.13
+* @param string $text Content that may contain HTML block comments.
+* @return string
+
+## `acf_parse_save_blocks_callback()`
+
+Callback used in preg_replace to modify ACF Block comment.
+
+* @since ACF 5.7.13
+* @param array $matches The preg matches.
+* @return string
+
+## `acf_get_block_id()`
+
+Return or generate a block ID.
+
+* @since ACF 6.0.0
+* @param array $attributes A block attributes array.
+* @param array $context The block context array, defaults to an empty array.
+* @param boolean $force If we should generate a new block ID even if one exists.
+* @return string A block ID.
+
+## `acf_ensure_block_id_prefix()`
+
+Ensure a block ID always has a block_ prefix for post meta internals.
+
+* @since ACF 6.0.0
+* @param string $block_id A possibly non-prefixed block ID.
+* @return string A prefixed block ID.
+
+## `acf_serialize_block_attributes()`
+
+This directly copied from the WordPress core `serialize_block_attributes()` function.
+
+* We need this in order to make sure that block attributes are stored in a way that is
+consistent with how Gutenberg sends them over from JS, and so that things like wp_kses()
+work as expected. Copied from core to get around a bug that was fixed in 5.8.1 or on the off chance
+that folks are still using WP 5.3 or below.
+* TODO: Remove this when we refactor `acf_parse_save_blocks_callback()` to use `serialize_block()`,
+or when we're confident that folks aren't using WP versions prior to 5.8.
+* @since ACF 5.12
+* @param array $block_attributes Attributes object.
+* @return string Serialized attributes.
+
+## `acf_get_block_validation_state()`
+
+Handle validating a block's fields and return the validity, and any errors.
+
+* This function can use values loaded into Local Meta, which means they have to be
+converted back to the data format before they can be validated.
+* @since ACF 6.3
+* @param array $block An array of the block's data attribute.
+* @param boolean $using_defaults True if the block is currently being generated with default values. Default false.
+* @param boolean $use_post_data True if we should validate the POSTed data rather than local meta values. Default false.
+* @param boolean $on_load True if we're validating as part of a render. This is essentially the same as a first load. Default false.
+* @return array An array containing a valid boolean, and an errors array.
+
+## `acf_validate_block_from_post_data()`
+
+Handle the specific validation for a block from POSTed values.
+
+* @since ACF 6.3.1
+* @param array $block The block object containing the POSTed values and other block data.
+* @return array|boolean An array containing the validation errors, or false if there are no errors.
+
+## `acf_validate_block_from_local_meta()`
+
+Handle the specific validation for a block from local meta.
+
+* This function uses the values loaded into Local Meta, which means they have to be
+converted back to the data format because they can be validated.
+* @since ACF 6.3.1
+* @param string $block_id The block ID.
+* @param array $field_objects The field objects in local meta to be validated.
+* @param boolean $using_defaults True if this is the first load of the block, when special validation may apply.
+* @return array|boolean An array containing the validation errors, or false if there are no errors.
+
+## `acf_set_after_rest_media_enqueue_reset_flag()`
+
+Set ACF data before a rest call if media scripts have not been enqueued yet for after REST reset.
+
+* @date 07/06/22
+* @since ACF 6.0
+* @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response The WordPress response object.
+* @return mixed
+
+## `acf_reset_media_enqueue_after_rest()`
+
+Reset wp_enqueue_media action count after REST call so it can happen inside the main execution if required.
+
+* @date 07/06/22
+* @since ACF 6.0
+* @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response The WordPress response object.
+* @return mixed
+
+## `acf_block_uses_post_meta()`
+
+Checks if the provided block is configured to save/load post meta.
+
+* @since ACF 6.3
+* @param array $block The block to check.
+* @return boolean
+
+## `acf_add_block_meta_values()`
+
+Loads ACF field values from the post meta if the block is configured to do so.
+
+* @since ACF 6.3
+* @param array $block The block to get values for.
+* @param integer $post_id The ID of the post to retrieve meta from.
+* @return array
+
+## `acf_save_block_meta_values()`
+
+Stores ACF field values in post meta for any blocks configured to do so.
+
+* @since ACF 6.3
+* @param integer $post_id The ID of the post being saved.
+* @param WP_Post $post The post object.
+* @return void
+
+## `acf_get_block_meta_values_to_save()`
+
+Iterates over blocks in post content and retrieves values
+that need to be saved to post meta.
+
+* @since ACF 6.3
+* @param string $content The content saved for the post.
+* @return array An array containing the field values that need to be saved.
+
+---
diff --git a/docs/code-reference/compatibility-file.md b/docs/code-reference/compatibility-file.md
new file mode 100644
index 00000000..73b3bbd1
--- /dev/null
+++ b/docs/code-reference/compatibility-file.md
@@ -0,0 +1,12 @@
+# Global Functions
+
+## `acf_get_compatibility()`
+
+Returns true if compatibility is enabled for the given component.
+
+* @date 20/1/15
+* @since ACF 5.1.5
+* @param string $name The name of the component to check.
+* @return boolean
+
+---
diff --git a/docs/code-reference/deprecated-file.md b/docs/code-reference/deprecated-file.md
new file mode 100644
index 00000000..6704f919
--- /dev/null
+++ b/docs/code-reference/deprecated-file.md
@@ -0,0 +1,71 @@
+# Global Functions
+
+## `acf_render_field_wrap_label()`
+
+acf_render_field_wrap_label
+
+* Renders the field's label.
+* @date 19/9/17
+* @since ACF 5.6.3
+* @deprecated 5.6.5
+* @param array $field The field array.
+* @return void
+
+## `acf_render_field_wrap_description()`
+
+acf_render_field_wrap_description
+
+* Renders the field's instructions.
+* @date 19/9/17
+* @since ACF 5.6.3
+* @deprecated 5.6.5
+* @param array $field The field array.
+* @return void
+
+## `acf_get_fields_by_id()`
+
+Returns and array of fields for the given $parent_id.
+
+* @date 27/02/2014
+* @since ACF 5.0.0.
+* @deprecated 5.7.11
+* @param integer $parent_id The parent ID.
+* @return array
+
+## `acf_update_option()`
+
+acf_update_option
+
+* A wrapper for the WP update_option but provides logic for a 'no' autoload
+* @date 4/01/2014
+* @since ACF 5.0.0
+* @deprecated 5.7.11
+* @param string $option The option name.
+* @param string $value The option value.
+* @param string $autoload An optional autoload value.
+* @return boolean
+
+## `acf_get_field_reference()`
+
+acf_get_field_reference
+
+* Finds the field key for a given field name and post_id.
+* @date 26/1/18
+* @since ACF 5.6.5
+* @deprecated 5.6.8
+* @param string $field_name The name of the field. eg 'sub_heading'
+* @param mixed $post_id The post_id of which the value is saved against
+* @return string $reference The field key
+
+## `acf_get_dir()`
+
+acf_get_dir
+
+* Returns the plugin url to a specified file.
+* @date 28/09/13
+* @since ACF 5.0.0
+* @deprecated 5.6.8
+* @param string $filename The specified file.
+* @return string
+
+---
diff --git a/docs/code-reference/fields-file.md b/docs/code-reference/fields-file.md
new file mode 100644
index 00000000..99ef2b27
--- /dev/null
+++ b/docs/code-reference/fields-file.md
@@ -0,0 +1,134 @@
+# Global Functions
+
+## `acf_register_field_type()`
+
+alias of acf()->fields->register_field_type()
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param n/a
+* @return n/a
+
+## `acf_register_field_type_info()`
+
+alias of acf()->fields->register_field_type_info()
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param n/a
+* @return n/a
+
+## `acf_get_field_type()`
+
+alias of acf()->fields->get_field_type()
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param n/a
+* @return n/a
+
+## `acf_get_field_types()`
+
+alias of acf()->fields->get_field_types()
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param n/a
+* @return n/a
+
+## `acf_get_field_types_info()`
+
+acf_get_field_types_info
+
+* Returns an array containing information about each field type
+* @date 18/6/18
+* @since ACF 5.6.9
+* @param type $var Description. Default.
+* @return type Description.
+
+## `acf_is_field_type()`
+
+alias of acf()->fields->is_field_type()
+
+* @type function
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param n/a
+* @return n/a
+
+## `acf_get_field_type_prop()`
+
+This function will return a field type's property
+
+* @type function
+* @date 1/10/13
+* @since ACF 5.0.0
+* @param n/a
+* @return (array)
+
+## `acf_get_field_type_label()`
+
+This function will return the label of a field type
+
+* @type function
+* @date 1/10/13
+* @since ACF 5.0.0
+* @param n/a
+* @return (array)
+
+## `acf_field_type_supports()`
+
+Returns the value of a field type "supports" property.
+
+* @since ACF 6.2.5
+* @param string $name The name of the field type.
+* @param string $prop The name of the supports property.
+* @param mixed $default The default value if the property is not set.
+* @return mixed The value of the supports property which may be false, or $default on failure.
+
+## `acf_field_type_exists()`
+
+* @deprecated
+@see acf_is_field_type()
+* @type function
+* @date 1/10/13
+* @since ACF 5.0.0
+* @param $type (string)
+* @return (boolean)
+
+## `acf_get_field_categories_i18n()`
+
+Returns an array of localised field categories.
+
+* @since ACF 6.1
+* @return array
+
+## `acf_get_grouped_field_types()`
+
+Returns an multi-dimentional array of field types "name => label" grouped by category
+
+* @since ACF 5.0.0
+* @return array
+
+## `acf_get_combined_field_type_settings_tabs()`
+
+Returns an array of tabs for a field type.
+We combine a list of default tabs with filtered tabs.
+I.E. Default tabs should be static and should not be changed by the
+filtered tabs.
+
+* @since ACF 6.1
+* @return array Key/value array of the default settings tabs for field type settings.
+
+## `acf_get_pro_field_types()`
+
+Get the PRO only fields and their core metadata.
+
+* @since ACF 6.1
+* @return array An array of all the pro field types and their field type selection required meta data.
+
+---
diff --git a/docs/code-reference/fields/class-acf-repeater-table-file.md b/docs/code-reference/fields/class-acf-repeater-table-file.md
new file mode 100644
index 00000000..98249572
--- /dev/null
+++ b/docs/code-reference/fields/class-acf-repeater-table-file.md
@@ -0,0 +1,127 @@
+# ACF_Repeater_Table
+
+ACF_Repeater_Table
+
+* Helper class for rendering repeater tables.
+
+## Properties
+
+### `$field`
+
+The main field array used to render the repeater.
+
+* @var array
+
+### `$sub_fields`
+
+An array containing the subfields used in the repeater.
+
+* @var array
+
+### `$value`
+
+The value(s) of the repeater field.
+
+* @var array
+
+### `$show_add`
+
+If we should show the "Add Row" button.
+
+* @var boolean
+
+### `$show_remove`
+
+If we should show the "Remove Row" button.
+
+* @var boolean
+
+### `$show_order`
+
+If we should show the order of the fields.
+
+* @var boolean
+
+## Methods
+
+### `__construct`
+
+Constructs the ACF_Repeater_Table class.
+
+* @param array $field The main field array for the repeater being rendered.
+
+### `setup`
+
+Sets up the field for rendering.
+
+* @since ACF 6.0.0
+* @return void
+
+### `prepare_value`
+
+Prepares the repeater values for rendering.
+
+* @since ACF 6.0.0
+* @return array
+
+### `render`
+
+Renders the full repeater table.
+
+* @since ACF 6.0.0
+* @return void
+
+### `thead`
+
+Renders the table head.
+
+* @since ACF 6.0.0
+* @return void
+
+### `rows`
+
+Renders or returns rows for the repeater field table.
+
+* @since ACF 6.0.0
+* @param boolean $should_return If we should return the rows or render them.
+* @return array|void
+
+### `row`
+
+Renders an individual row.
+
+* @since ACF 6.0.0
+* @param integer $i The row number.
+* @param array $row An array containing the row values.
+* @param boolean $should_return If we should return the row or render it.
+* @return string|void
+
+### `row_handle`
+
+Renders the row handle at the start of each row.
+
+* @since ACF 6.0.0
+* @param integer $i The current row number.
+* @return void
+
+### `row_actions`
+
+Renders the actions displayed at the end of each row.
+
+* @since ACF 6.0.0
+* @return void
+
+### `table_actions`
+
+Renders the actions displayed underneath the table.
+
+* @since ACF 6.0.0
+* @return void
+
+### `pagination`
+
+Renders the table pagination.
+Mostly lifted from the WordPress core WP_List_Table class.
+
+* @since ACF 6.0.0
+* @return void
diff --git a/docs/code-reference/fields/index.md b/docs/code-reference/fields/index.md
new file mode 100644
index 00000000..b17c4629
--- /dev/null
+++ b/docs/code-reference/fields/index.md
@@ -0,0 +1,5 @@
+# Fields
+
+## Files
+
+- [Class Acf Repeater Table File](class-acf-repeater-table-file)
diff --git a/docs/code-reference/forms/form-front-file.md b/docs/code-reference/forms/form-front-file.md
new file mode 100644
index 00000000..5dbaa83c
--- /dev/null
+++ b/docs/code-reference/forms/form-front-file.md
@@ -0,0 +1,14 @@
+# Global Functions
+
+## `acf_form_head()`
+
+Functions
+
+* alias of acf()->form->functions
+* @type function
+* @date 11/06/2014
+* @since ACF 5.0.0
+* @param n/a
+* @return n/a
+
+---
diff --git a/docs/code-reference/forms/index.md b/docs/code-reference/forms/index.md
new file mode 100644
index 00000000..f2d309d1
--- /dev/null
+++ b/docs/code-reference/forms/index.md
@@ -0,0 +1,5 @@
+# Forms
+
+## Files
+
+- [Form Front File](form-front-file)
diff --git a/docs/code-reference/hooks/index.md b/docs/code-reference/hooks/index.md
new file mode 100644
index 00000000..fc6cd0ff
--- /dev/null
+++ b/docs/code-reference/hooks/index.md
@@ -0,0 +1,6 @@
+# Hooks
+
+## Files
+
+- [Action](action)
+- [Filter](filter)
diff --git a/docs/code-reference/index.md b/docs/code-reference/index.md
new file mode 100644
index 00000000..c47de007
--- /dev/null
+++ b/docs/code-reference/index.md
@@ -0,0 +1,35 @@
+# Code Reference
+
+## Files
+
+- [Acf Bidirectional Functions File](acf-bidirectional-functions-file)
+- [Acf Field Functions File](acf-field-functions-file)
+- [Acf Field Group Functions File](acf-field-group-functions-file)
+- [Acf Form Functions File](acf-form-functions-file)
+- [Acf Helper Functions File](acf-helper-functions-file)
+- [Acf Hook Functions File](acf-hook-functions-file)
+- [Acf Input Functions File](acf-input-functions-file)
+- [Acf Internal Post Type Functions File](acf-internal-post-type-functions-file)
+- [Acf Meta Functions File](acf-meta-functions-file)
+- [Acf Post Functions File](acf-post-functions-file)
+- [Acf Post Type Functions File](acf-post-type-functions-file)
+- [Acf Taxonomy Functions File](acf-taxonomy-functions-file)
+- [Acf User Functions File](acf-user-functions-file)
+- [Acf Utility Functions File](acf-utility-functions-file)
+- [Acf Value Functions File](acf-value-functions-file)
+- [Acf Wp Functions File](acf-wp-functions-file)
+- [Assets File](assets-file)
+- [Blocks File](blocks-file)
+- [Compatibility File](compatibility-file)
+- [Deprecated File](deprecated-file)
+- [Fields File](fields-file)
+- [L10n File](l10n-file)
+- [Local Fields File](local-fields-file)
+- [Local Json File](local-json-file)
+- [Local Meta File](local-meta-file)
+- [Locations File](locations-file)
+- [Loop File](loop-file)
+- [Revisions File](revisions-file)
+- [Scf Ui Options Page Functions File](scf-ui-options-page-functions-file)
+- [Upgrades File](upgrades-file)
+- [Validation File](validation-file)
diff --git a/docs/code-reference/l10n-file.md b/docs/code-reference/l10n-file.md
new file mode 100644
index 00000000..ddc08fb6
--- /dev/null
+++ b/docs/code-reference/l10n-file.md
@@ -0,0 +1,31 @@
+# Global Functions
+
+## `acf_get_locale()`
+
+Returns the current locale.
+
+* @date 16/12/16
+* @since ACF 5.5.0
+* @return string
+
+## `acf_load_textdomain()`
+
+acf_load_textdomain
+
+* Loads the plugin's translated strings similar to load_plugin_textdomain().
+* @date 8/1/19
+* @since ACF 5.7.10
+* @param string $locale The plugin's current locale.
+* @return void
+
+## `_acf_apply_language_cache_key()`
+
+_acf_apply_language_cache_key
+
+* Applies the current language to the cache key.
+* @date 23/1/19
+* @since ACF 5.7.11
+* @param string $key The cache key.
+* @return string
+
+---
diff --git a/docs/code-reference/local-fields-file.md b/docs/code-reference/local-fields-file.md
new file mode 100644
index 00000000..47a27ff2
--- /dev/null
+++ b/docs/code-reference/local-fields-file.md
@@ -0,0 +1,352 @@
+# Global Functions
+
+## `acf_enable_local()`
+
+acf_enable_local
+
+* Enables the local filter.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @return void
+
+## `acf_disable_local()`
+
+acf_disable_local
+
+* Disables the local filter.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @return void
+
+## `acf_is_local_enabled()`
+
+acf_is_local_enabled
+
+* Returns true if local fields are enabled.
+* @date 23/1/19
+* @since ACF 5.7.10
+* @return boolean
+
+## `acf_get_local_store()`
+
+Returns either local store or a dummy store for the given name or post type.
+
+* @date 23/1/19
+* @since ACF 5.7.10
+* @param string $name The store name.
+* @param string $post_type The post type for the desired store.
+* @return ACF_Data
+
+## `acf_reset_local()`
+
+acf_reset_local
+
+* Resets the local data.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @return void
+
+## `acf_get_local_field_groups()`
+
+acf_get_local_field_groups
+
+* Returns all local field groups.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @return array
+
+## `acf_get_local_internal_posts()`
+
+Returns local ACF posts with the provided post type.
+
+* @since ACF 6.1
+* @param string $post_type The post type to check for.
+* @return array|mixed
+
+## `acf_have_local_field_groups()`
+
+acf_have_local_field_groups
+
+* description
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param type $var Description. Default.
+* @return type Description.
+
+## `acf_count_local_field_groups()`
+
+acf_count_local_field_groups
+
+* description
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param type $var Description. Default.
+* @return type Description.
+
+## `acf_add_local_field_group()`
+
+acf_add_local_field_group
+
+* Adds a local field group.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param array $field_group The field group array.
+* @return boolean
+
+## `acf_add_local_internal_post_type()`
+
+Adds a local ACF internal post type.
+
+* @since ACF 6.1
+* @param array $post The main ACF post array.
+* @param string $post_type The post type being added.
+* @return boolean
+
+## `register_field_group()`
+
+register_field_group
+
+* See acf_add_local_field_group().
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param array $field_group The field group array.
+* @return void
+
+## `acf_remove_local_field_group()`
+
+acf_remove_local_field_group
+
+* Removes a field group for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return boolean
+
+## `acf_remove_local_internal_post_type()`
+
+Removes a local ACF post with the given key and post type.
+
+* @since ACF 6.1
+* @param string $key The ACF key.
+* @param string $post_type The ACF post type.
+* @return boolean
+
+## `acf_is_local_field_group()`
+
+acf_is_local_field_group
+
+* Returns true if a field group exists for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return boolean
+
+## `acf_is_local_internal_post_type()`
+
+Returns true if an ACF post exists for the given key.
+
+* @since ACF 6.1
+* @param string $key The ACF key.
+* @param string $post_type The ACF post type.
+* @return boolean
+
+## `acf_is_local_field_group_key()`
+
+acf_is_local_field_group_key
+
+* Returns true if a field group exists for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return boolean
+
+## `acf_is_local_internal_post_type_key()`
+
+Returns true if a local ACF post exists for the given key.
+
+* @since ACF 6.1
+* @param string $key The ACF post key.
+* @param string $post_type The post type to check.
+* @return boolean
+
+## `acf_get_local_field_group()`
+
+acf_get_local_field_group
+
+* Returns a field group for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return (array|null)
+
+## `acf_get_local_internal_post_type()`
+
+Returns an ACF post for the given key.
+
+* @since ACF 6.1
+* @param string $key The field group key.
+* @param string $post_type The ACF post type.
+* @return array|null
+
+## `acf_add_local_fields()`
+
+acf_add_local_fields
+
+* Adds an array of local fields.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param array $fields An array of un prepared fields.
+* @return array
+
+## `acf_get_local_fields()`
+
+acf_get_local_fields
+
+* Returns all local fields for the given parent.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $parent The parent key.
+* @return array
+
+## `acf_have_local_fields()`
+
+acf_have_local_fields
+
+* Returns true if local fields exist.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $parent The parent key.
+* @return boolean
+
+## `acf_count_local_fields()`
+
+acf_count_local_fields
+
+* Returns the number of local fields for the given parent.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $parent The parent key.
+* @return integer
+
+## `acf_add_local_field()`
+
+acf_add_local_field
+
+* Adds a local field.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param array $field The field array.
+* @param boolean $prepared Whether or not the field has already been prepared for import.
+* @return void
+
+## `_acf_generate_local_key()`
+
+_acf_generate_local_key
+
+* Generates a unique key based on the field's parent.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field key.
+* @return boolean
+
+## `acf_remove_local_field()`
+
+acf_remove_local_field
+
+* Removes a field for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field key.
+* @return boolean
+
+## `acf_is_local_field()`
+
+acf_is_local_field
+
+* Returns true if a field exists for the given key or name.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return boolean
+
+## `acf_is_local_field_key()`
+
+acf_is_local_field_key
+
+* Returns true if a field exists for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return boolean
+
+## `acf_get_local_field()`
+
+acf_get_local_field
+
+* Returns a field for the given key.
+* @date 22/1/19
+* @since ACF 5.7.10
+* @param string $key The field group key.
+* @return (array|null)
+
+## `_acf_apply_get_local_field_groups()`
+
+_acf_apply_get_local_field_groups
+
+* Appends local field groups to the provided array.
+* @date 23/1/19
+* @since ACF 5.7.10
+* @param array $field_groups An array of field groups.
+* @return array
+
+## `_acf_apply_get_local_internal_posts()`
+
+Appends local ACF internal post types to the provided array.
+
+* @since ACF 6.1
+* @param array $posts An array of ACF posts.
+* @param string $post_type The ACF internal post type being loaded.
+* @return array
+
+## `_acf_apply_is_local_field_key()`
+
+_acf_apply_is_local_field_key
+
+* Returns true if is a local key.
+* @date 23/1/19
+* @since ACF 5.7.10
+* @param boolean $bool The result.
+* @param string $id The identifier.
+* @return boolean
+
+## `_acf_apply_is_local_field_group_key()`
+
+_acf_apply_is_local_field_group_key
+
+* Returns true if is a local key.
+* @date 23/1/19
+* @since ACF 5.7.10
+* @param boolean $bool The result.
+* @param string $id The identifier.
+* @return boolean
+
+## `_acf_apply_is_local_internal_post_type_key()`
+
+Returns true if is a local key.
+
+* @since ACF 6.1
+* @param boolean $bool The result.
+* @param string $id The identifier.
+* @param string $post_type The post type.
+* @return boolean
+
+## `_acf_do_prepare_local_fields()`
+
+_acf_do_prepare_local_fields
+
+* Local fields that are added too early will not be correctly prepared by the field type class.
+* @date 23/1/19
+* @since ACF 5.7.10
+* @return void
+
+---
diff --git a/docs/code-reference/local-json-file.md b/docs/code-reference/local-json-file.md
new file mode 100644
index 00000000..de95f4c9
--- /dev/null
+++ b/docs/code-reference/local-json-file.md
@@ -0,0 +1,30 @@
+# Global Functions
+
+## `acf_get_local_json_files()`
+
+Returns an array of found JSON field group files.
+
+* @date 14/4/20
+* @since ACF 5.9.0
+* @param string $post_type The ACF post type to get files for.
+* @return array
+
+## `acf_write_json_field_group()`
+
+Saves a field group JSON file.
+
+* @date 5/12/2014
+* @since ACF 5.1.5
+* @param array $field_group The field group.
+* @return boolean
+
+## `acf_delete_json_field_group()`
+
+Deletes a field group JSON file.
+
+* @date 5/12/2014
+* @since ACF 5.1.5
+* @param string $key The field group key.
+* @return boolean True on success.
+
+---
diff --git a/docs/code-reference/local-meta-file.md b/docs/code-reference/local-meta-file.md
new file mode 100644
index 00000000..e18b21a4
--- /dev/null
+++ b/docs/code-reference/local-meta-file.md
@@ -0,0 +1,23 @@
+# Global Functions
+
+## `acf_setup_meta()`
+
+acf_setup_meta
+
+* Adds postmeta to storage.
+* @date 8/10/18
+* @since ACF 5.8.0
+@see ACF_Local_Meta::add() for list of parameters.
+* @return array
+
+## `acf_reset_meta()`
+
+acf_reset_meta
+
+* Removes postmeta to storage.
+* @date 8/10/18
+* @since ACF 5.8.0
+@see ACF_Local_Meta::remove() for list of parameters.
+* @return void
+
+---
diff --git a/docs/code-reference/locations-file.md b/docs/code-reference/locations-file.md
new file mode 100644
index 00000000..ae5d3fbd
--- /dev/null
+++ b/docs/code-reference/locations-file.md
@@ -0,0 +1,112 @@
+# Global Functions
+
+## `acf_register_location_type()`
+
+Registers a location type.
+
+* @date 8/4/20
+* @since ACF 5.9.0
+* @param string $class_name The location class name.
+* @return (ACF_Location|false)
+
+## `acf_get_location_types()`
+
+Returns an array of all registered location types.
+
+* @date 8/4/20
+* @since ACF 5.9.0
+* @return array
+
+## `acf_get_location_type()`
+
+Returns a location type for the given name.
+
+* @date 18/2/19
+* @since ACF 5.7.12
+* @param string $name The location type name.
+* @return (ACF_Location|null)
+
+## `acf_get_location_rule_types()`
+
+Returns a grouped array of all location rule types.
+
+* @date 8/4/20
+* @since ACF 5.9.0
+* @return array
+
+## `acf_validate_location_rule()`
+
+Returns a validated location rule with all props.
+
+* @date 8/4/20
+* @since ACF 5.9.0
+* @param array $rule The location rule.
+* @return array
+
+## `acf_get_location_rule_operators()`
+
+Returns an array of operators for a given rule.
+
+* @date 30/5/17
+* @since ACF 5.6.0
+* @param array $rule The location rule.
+* @return array
+
+## `acf_get_location_rule_values()`
+
+Returns an array of values for a given rule.
+
+* @date 30/5/17
+* @since ACF 5.6.0
+* @param array $rule The location rule.
+* @return array
+
+## `acf_match_location_rule()`
+
+Returns true if the provided rule matches the screen args.
+
+* @date 30/5/17
+* @since ACF 5.6.0
+* @param array $rule The location rule.
+* @param array $screen The screen args.
+* @param array $field The field group array.
+* @return boolean
+
+## `acf_get_location_screen()`
+
+Returns ann array of screen args to be used against matching rules.
+
+* @date 8/4/20
+* @since ACF 5.9.0
+* @param array $screen The screen args.
+* @param array $deprecated The field group array.
+* @return array
+
+## `acf_register_location_rule()`
+
+Alias of acf_register_location_type().
+
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param string $class_name The location class name.
+* @return (ACF_Location|false)
+
+## `acf_get_location_rule()`
+
+Alias of acf_get_location_type().
+
+* @date 31/5/17
+* @since ACF 5.6.0
+* @param string $class_name The location class name.
+* @return (ACF_Location|false)
+
+## `acf_get_valid_location_rule()`
+
+Alias of acf_validate_location_rule().
+
+* @date 30/5/17
+* @since ACF 5.6.0
+* @param array $rule The location rule.
+* @return array
+
+---
diff --git a/docs/code-reference/loop-file.md b/docs/code-reference/loop-file.md
new file mode 100644
index 00000000..c11880c9
--- /dev/null
+++ b/docs/code-reference/loop-file.md
@@ -0,0 +1,43 @@
+# Global Functions
+
+## `acf_add_loop()`
+
+alias of acf()->loop->add_loop()
+
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param n/a
+* @return n/a
+
+## `acf_update_loop()`
+
+alias of acf()->loop->update_loop()
+
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param n/a
+* @return n/a
+
+## `acf_get_loop()`
+
+alias of acf()->loop->get_loop()
+
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param n/a
+* @return n/a
+
+## `acf_remove_loop()`
+
+alias of acf()->loop->remove_loop()
+
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param n/a
+* @return n/a
+
+---
diff --git a/docs/code-reference/rest-api/acf-rest-api-functions-file.md b/docs/code-reference/rest-api/acf-rest-api-functions-file.md
new file mode 100644
index 00000000..5a5fc404
--- /dev/null
+++ b/docs/code-reference/rest-api/acf-rest-api-functions-file.md
@@ -0,0 +1,32 @@
+# Global Functions
+
+## `acf_get_field_rest_schema()`
+
+Get the REST API schema for a given field.
+
+* @param array $field
+* @return array
+
+## `acf_get_field_rest_links()`
+
+Get the REST API field links for a given field. The links are appended to the REST response under the _links property
+and provide API resource links to related objects. If a link is marked as 'embeddable', WordPress can load the resource
+in the main request under the_embedded property when the request contains the _embed URL parameter.
+
+* @see \acf_field::get_rest_links()
+@see
+* @param string|integer $post_id
+* @param array $field
+* @return array
+
+## `acf_format_value_for_rest()`
+
+Format a given field's value for output in the REST API.
+
+* @param $value
+* @param $post_id
+* @param $field
+* @param string $format 'light' for normal REST API formatting or 'standard' to apply ACF's normal field formatting.
+* @return mixed
+
+---
diff --git a/docs/code-reference/rest-api/class-acf-rest-api-file.md b/docs/code-reference/rest-api/class-acf-rest-api-file.md
new file mode 100644
index 00000000..178ecbfb
--- /dev/null
+++ b/docs/code-reference/rest-api/class-acf-rest-api-file.md
@@ -0,0 +1,103 @@
+# ACF_Rest_Api
+
+## Properties
+
+### `$request`
+
+* @var ACF_Rest_Request
+
+### `$embed_links`
+
+* @var ACF_Rest_Embed_Links
+
+## Methods
+
+### `register_field`
+
+Register our custom property as a REST field.
+
+### `get_schema`
+
+Dynamically generate the schema for the current request.
+
+* @return array
+
+### `validate_rest_arg`
+
+Validate the request args. Mostly a wrapper for `rest_validate_request_arg()`, but also
+fires off a filter, so we can add some custom validation for specific fields.
+
+* This will likely no longer be needed once WordPress implements something like `validate_callback`
+and `sanitize_callback` for nested schema properties, see:
+
+* @param mixed $value
+* @param \WP_REST_Request $request
+* @param string $param
+* @return boolean|WP_Error
+
+### `load_fields`
+
+Load field values into the requested object. This method is not a part of any public API and is only public as
+it is required by WordPress.
+
+* @param array $object An array representation of the post, term, or user object.
+* @param string $field_name
+* @param WP_REST_Request $request
+* @param string $object_sub_type Note that this isn't the same as $this->object_type. This variable is
+more specific and can be a post type or taxonomy.
+* @return array
+
+### `update_fields`
+
+Update any incoming field values for the given object. This method is not a part of any public API and is only
+public as it is required by WordPress.
+
+* @param array $data
+* @param WP_Post|WP_Term|WP_User $object
+* @param string $property 'acf'
+* @param WP_REST_Request $request
+* @param string $object_sub_type This will be the post type, the taxonomy, or 'user'.
+* @return boolean|WP_Error
+
+### `make_identifier`
+
+Make the ACF identifier string for the given object.
+
+* @param integer $object_id
+* @param string $object_type 'user', 'term', or 'post'
+* @return string
+
+### `object_type_has_field_group`
+
+Gets an array of the location types that a field group is configured to use.
+
+* @param string $object_type 'user', 'term', or 'post'
+* @param array $field_group The field group to check.
+* @param array $location_types An array of location types.
+* @return boolean
+
+### `get_field_groups_by_object_type`
+
+Get all field groups for the provided object type.
+
+* @param string $object_type 'user', 'term', or 'post'
+* @return array An array of field groups that display for that location type.
+
+### `get_field_groups_by_id`
+
+Get all field groups for a given object.
+
+* @param integer $object_id
+* @param string $object_type 'user', 'term', or 'post'
+* @param string|null $object_sub_type The post type or taxonomy. When an $object_type of 'user' is in play, this can be ignored.
+* @param array $scope Field group keys to limit the returned set of field groups to. This is used to scope field lookups to specific groups.
+* @return array An array of matching field groups.
+
+### `get_fields`
+
+Get all ACF fields for a given field group and allow third party filtering.
+
+* @param array $field_group This could technically be other possible values supported by acf_get_fields() but in this
+context, we're only using the field group arrays.
+* @param null|integer $object_id The ID of the object being prepared.
+* @return array
diff --git a/docs/code-reference/rest-api/class-acf-rest-embed-links-file.md b/docs/code-reference/rest-api/class-acf-rest-embed-links-file.md
new file mode 100644
index 00000000..5a83701d
--- /dev/null
+++ b/docs/code-reference/rest-api/class-acf-rest-embed-links-file.md
@@ -0,0 +1,33 @@
+# ACF_Rest_Embed_Links
+
+Class ACF_Rest_Embed_Links
+
+* Manage the addition of embed links on supported REST endpoints.
+
+## Properties
+
+### `$links`
+
+* @var array Links to add to the response. These can be flagged as embeddable and expanded when _embed is passed with the request.
+
+## Methods
+
+### `hook_link_handlers`
+
+Hook into all REST-enabled post type, taxonomy, and the user controllers in order to prepare links.
+
+### `prepare_links`
+
+Add links to internal property for subsequent use in \ACF_Rest_Embed_Links::load_item_links().
+
+* @param $post_id
+* @param array $field
+
+### `load_item_links`
+
+Hook into the rest_prepare_{$type} filters and add links for the object being prepared.
+
+* @param WP_REST_Response $response
+* @param WP_Post|WP_User|WP_Term $item
+* @param WP_REST_Request $request
+* @return WP_REST_Response
diff --git a/docs/code-reference/rest-api/class-acf-rest-request-file.md b/docs/code-reference/rest-api/class-acf-rest-request-file.md
new file mode 100644
index 00000000..0f1441cb
--- /dev/null
+++ b/docs/code-reference/rest-api/class-acf-rest-request-file.md
@@ -0,0 +1,96 @@
+# ACF_Rest_Request
+
+Class ACF_Rest_Request
+
+## Properties
+
+### `$readonly_props`
+
+Define which private/protected class properties are allowed read access. Access to these is controlled in
+\ACF_Rest_Request::__get();
+
+* @var string[]
+
+### `$http_method`
+
+* @var string The HTTP request method for the current request. i.e; GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD
+
+### `$current_route`
+
+* @var string The current route being requested.
+
+### `$supported_routes`
+
+* @var array Route URL patterns we support.
+
+### `$url_params`
+
+* @var array Parameters matched from the URL. e.g; object IDs.
+
+### `$object_type`
+
+* @var string The underlying object type. e.g; post, term, user, etc.
+
+### `$object_sub_type`
+
+* @var string The requested object type.
+
+### `$child_object_type`
+
+* @var string The object type for a child object. e.g. post-revision, autosaves, etc.
+
+## Methods
+
+### `parse_request`
+
+Determine all required information from the current request.
+
+### `__get`
+
+Magic getter for accessing read-only properties. Should we ever need to enforce a getter method, we can do so here.
+
+* @param string $name The desired property name.
+* @return string|null
+
+### `get_url_param`
+
+Get a URL parameter if found on the request URL.
+
+* @param $param
+* @return mixed|null
+
+### `set_http_method`
+
+Determine the HTTP method of the current request.
+
+### `set_current_route`
+
+Get the current REST route as determined by WordPress.
+
+### `build_supported_routes`
+
+Build an array of route match patterns that we handle. These are the same as WordPress' core patterns except
+we are also matching the object type here as well.
+
+### `set_url_params`
+
+Loop through supported routes to find matching pattern. Use matching pattern to determine any URL parameters.
+
+### `set_object_types`
+
+Determine the object type and sub type from the requested route. We need to know both the underlying WordPress
+object type as well as post type or taxonomy in order to provide the right context when getting/updating fields.
+
+### `get_post_type_by_rest_base`
+
+Find the REST enabled post type object that matches the given REST base.
+
+* @param string $rest_base
+* @return WP_Post_Type|null
+
+### `get_taxonomy_by_rest_base`
+
+Find the REST enabled taxonomy object that matches the given REST base.
+
+* @param $rest_base
+* @return WP_Taxonomy|null
diff --git a/docs/code-reference/rest-api/index.md b/docs/code-reference/rest-api/index.md
new file mode 100644
index 00000000..0663077e
--- /dev/null
+++ b/docs/code-reference/rest-api/index.md
@@ -0,0 +1,8 @@
+# Rest-api
+
+## Files
+
+- [Acf Rest Api Functions File](acf-rest-api-functions-file)
+- [Class Acf Rest Api File](class-acf-rest-api-file)
+- [Class Acf Rest Embed Links File](class-acf-rest-embed-links-file)
+- [Class Acf Rest Request File](class-acf-rest-request-file)
diff --git a/docs/code-reference/revisions-file.md b/docs/code-reference/revisions-file.md
new file mode 100644
index 00000000..8012dce7
--- /dev/null
+++ b/docs/code-reference/revisions-file.md
@@ -0,0 +1,23 @@
+# Global Functions
+
+## `acf_save_post_revision()`
+
+This function will copy meta from a post to it's latest revision
+
+* @type function
+* @date 26/09/2016
+* @since ACF 5.4.0
+* @param $post_id (int)
+* @return n/a
+
+## `acf_get_post_latest_revision()`
+
+This function will return the latest revision for a given post
+
+* @type function
+* @date 25/06/2016
+* @since ACF 5.3.8
+* @param $post_id (int)
+* @return $post_id (int)
+
+---
diff --git a/docs/code-reference/scf-ui-options-page-functions-file.md b/docs/code-reference/scf-ui-options-page-functions-file.md
new file mode 100644
index 00000000..7c2f79d0
--- /dev/null
+++ b/docs/code-reference/scf-ui-options-page-functions-file.md
@@ -0,0 +1,181 @@
+# Global Functions
+
+## `acf_get_ui_options_page()`
+
+Get an SCF UI options page as an array
+
+* @since ACF 6.2
+* @param integer|string $id The post ID being queried.
+* @return array|false The UI options page array.
+
+## `acf_get_raw_ui_options_page()`
+
+Retrieves a raw SCF UI options page.
+
+* @since ACF 6.2
+* @param integer|string $id The post ID.
+* @return array|false The UI options page array.
+
+## `acf_get_ui_options_page_post()`
+
+Gets a post object for an SCF UI options page.
+
+* @since ACF 6.2
+* @param integer|string $id The post ID, key, or name.
+* @return object|boolean The post object, or false on failure.
+
+## `acf_is_ui_options_page_key()`
+
+Returns true if the given identifier is an SCF UI options page key.
+
+* @since ACF 6.2
+* @param string $id The identifier.
+* @return boolean
+
+## `acf_validate_ui_options_page()`
+
+Validates an SCF UI options page.
+
+* @since ACF 6.2
+* @param array $ui_options_page The SCF UI options page array to validate.
+* @return array|boolean
+
+## `acf_translate_ui_options_page()`
+
+Translates the settings for an SCF UI options page.
+
+* @since ACF 6.2
+* @param array $ui_options_page The SCF UI options page array.
+* @return array
+
+## `acf_get_ui_options_pages()`
+
+Returns and array of SCF UI options pages for the given $filter.
+
+* @since ACF 6.2
+* @param array $filter An array of args to filter results by.
+* @return array
+
+## `acf_get_raw_ui_options_pages()`
+
+Returns an array of raw SCF UI options pages.
+
+* @since ACF 6.2
+* @return array
+
+## `acf_filter_ui_options_pages()`
+
+Returns a filtered array of SCF UI options pages based on the given $args.
+
+* @since ACF 6.2
+* @param array $ui_options_pages An array of SCF UI options pages.
+* @param array $args An array of args to filter by.
+* @return array
+
+## `acf_update_ui_options_page()`
+
+Updates an SCF UI options page in the database.
+
+* @since ACF 6.2
+* @param array $ui_options_page The main ACF UI options page array.
+* @return array
+
+## `acf_flush_ui_options_page_cache()`
+
+Deletes all caches for the provided ACF UI options page.
+
+* @since ACF 6.2
+* @param array $ui_options_page The SCF UI options page array.
+* @return void
+
+## `acf_delete_ui_options_page()`
+
+Deletes an ACF UI options page from the database.
+
+* @since ACF 6.2
+* @param integer|string $id The ACF UI options page ID, key or name.
+* @return boolean True if the options page was deleted.
+
+## `acf_trash_ui_options_page()`
+
+Trashes an ACF UI options page.
+
+* @since ACF 6.2
+* @param integer|string $id The UI options page ID, key, or name.
+* @return boolean True if the options page was trashed.
+
+## `acf_untrash_ui_options_page()`
+
+Restores an ACF UI options page from the trash.
+
+* @since ACF 6.2
+* @param integer|string $id The UI options page ID, key, or name.
+* @return boolean True if the options page was untrashed.
+
+## `acf_is_ui_options_page()`
+
+Returns true if the given params match an ACF UI options page.
+
+* @since ACF 6.2
+* @param array $ui_options_page The ACF UI options page array.
+* @return boolean
+
+## `acf_duplicate_ui_options_page()`
+
+Duplicates an ACF UI options page.
+
+* @since ACF 6.2
+* @param integer|string $id The ACF UI options page ID, key or name.
+* @param integer $new_post_id Optional ID to override.
+* @return array|boolean The new ACF UI options page, or false on failure.
+
+## `acf_update_ui_options_page_active_status()`
+
+Activates or deactivates an ACF UI options page.
+
+* @since ACF 6.2
+* @param integer|string $id The ACF UI options page ID, key or name.
+* @param boolean $activate True if the UI options page should be activated.
+* @return boolean
+
+## `acf_get_ui_options_page_edit_link()`
+
+Checks if the current user can edit the UI options page and returns the edit URL.
+
+* @since ACF 6.2
+* @param integer $post_id The ACF UI options page ID.
+* @return string
+
+## `acf_prepare_ui_options_page_for_export()`
+
+Returns a modified ACF UI options page ready for export.
+
+* @since ACF 6.2
+* @param array $ui_options_page The ACF UI options page array.
+* @return array
+
+## `acf_export_ui_options_page_as_php()`
+
+Exports an ACF UI options page as PHP.
+
+* @since ACF 6.2
+* @param array $ui_options_page The ACF UI options page array.
+* @return string|boolean
+
+## `acf_prepare_ui_options_page_for_import()`
+
+Prepares an ACF UI options page for the import process.
+
+* @since ACF 6.2
+* @param array $ui_options_page The ACF UI options page array.
+* @return array
+
+## `acf_import_ui_options_page()`
+
+Imports an ACF UI options page into the database.
+
+* @since ACF 6.2
+* @param array $ui_options_page The ACF UI options page array.
+* @return array The imported options page.
+
+---
diff --git a/docs/code-reference/upgrades-file.md b/docs/code-reference/upgrades-file.md
new file mode 100644
index 00000000..32a15a1d
--- /dev/null
+++ b/docs/code-reference/upgrades-file.md
@@ -0,0 +1,124 @@
+# Global Functions
+
+## `acf_has_upgrade()`
+
+acf_has_upgrade
+
+* Returns true if this site has an upgrade avaialble.
+* @date 24/8/18
+* @since ACF 5.7.4
+* @return boolean
+
+## `acf_upgrade_all()`
+
+Runs upgrade routines if this site has an upgrade available.
+
+* @date 24/8/18
+* @since ACF 5.7.4
+
+## `acf_get_db_version()`
+
+acf_get_db_version
+
+* Returns the ACF DB version.
+* @date 10/09/2016
+* @since ACF 5.4.0
+* @return string
+
+## `acf_update_db_version()`
+
+Updates the ACF DB version.
+
+* @date 10/09/2016
+* @since ACF 5.4.0
+* @param string $version The new version.
+* @return void
+
+## `acf_upgrade_500()`
+
+acf_upgrade_500
+
+* Version 5 introduces new post types for field groups and fields.
+* @date 23/8/18
+* @since ACF 5.7.4
+* @return void
+
+## `acf_upgrade_500_field_groups()`
+
+acf_upgrade_500_field_groups
+
+* Upgrades all ACF4 field groups to ACF5
+* @date 23/8/18
+* @since ACF 5.7.4
+* @return void
+
+## `acf_upgrade_500_field_group()`
+
+acf_upgrade_500_field_group
+
+* Upgrades a ACF4 field group to ACF5
+* @date 23/8/18
+* @since ACF 5.7.4
+* @param object $ofg The old field group post object.
+* @return array $nfg The new field group array.
+
+## `acf_upgrade_500_fields()`
+
+acf_upgrade_500_fields
+
+* Upgrades all ACF4 fields to ACF5 from a specific field group
+* @date 23/8/18
+* @since ACF 5.7.4
+* @param object $ofg The old field group post object.
+* @param array $nfg The new field group array.
+* @return void
+
+## `acf_upgrade_500_field()`
+
+acf_upgrade_500_field
+
+* Upgrades a ACF4 field to ACF5
+* @date 23/8/18
+* @since ACF 5.7.4
+* @param array $field The old field.
+* @return array $field The new field.
+
+## `acf_upgrade_550()`
+
+acf_upgrade_550
+
+* Version 5.5 adds support for the wp_termmeta table added in WP 4.4.
+* @date 23/8/18
+* @since ACF 5.7.4
+* @return void
+
+## `acf_upgrade_550_termmeta()`
+
+acf_upgrade_550_termmeta
+
+* Upgrades all ACF4 termmeta saved in wp_options to the wp_termmeta table.
+* @date 23/8/18
+* @since ACF 5.7.4
+* @return void
+
+## `acf_wp_upgrade_550_termmeta()`
+
+When the database is updated to support term meta, migrate ACF term meta data across.
+
+* @date 23/8/18
+* @since ACF 5.7.4
+* @param string $wp_db_version The new $wp_db_version.
+* @param string $wp_current_db_version The old (current) $wp_db_version.
+* @return void
+
+## `acf_upgrade_550_taxonomy()`
+
+acf_upgrade_550_taxonomy
+
+* Upgrades all ACF4 termmeta for a specific taxonomy.
+* @date 24/8/18
+* @since ACF 5.7.4
+* @param string $taxonomy The taxonomy name.
+* @return void
+
+---
diff --git a/docs/code-reference/validation-file.md b/docs/code-reference/validation-file.md
new file mode 100644
index 00000000..f39fbfaf
--- /dev/null
+++ b/docs/code-reference/validation-file.md
@@ -0,0 +1,80 @@
+# Global Functions
+
+## `acf_add_validation_error()`
+
+Add validation error.
+
+* Alias of acf()->validation->add_error()
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param string $input name attribute of DOM elmenet.
+* @param string $message error message.
+* @return void
+
+## `acf_get_validation_errors()`
+
+Retrieve validation errors.
+
+* Alias of acf()->validation->function()
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @return array|bool
+
+## `acf_get_validation_error()`
+
+Get the validation error.
+
+* Alias of acf()->validation->get_error()
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @since 6.4.1 Added the $input parameter, which is required in the get_error method.
+* @param string $input name attribute of DOM elmenet.
+* @return string|bool
+
+## `acf_reset_validation_errors()`
+
+Reset Validation errors.
+
+* Alias of acf()->validation->reset_errors()
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @return void
+
+## `acf_validate_save_post()`
+
+This function will validate $_POST data and add errors
+
+* @type function
+* @date 25/11/2013
+* @since ACF 5.0.0
+* @param bool $show_errors if true, errors will be shown via a wp_die screen.
+* @return bool
+
+## `acf_validate_values()`
+
+This function will validate an array of field values
+
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param array $values An array of field values.
+* @param string $input_prefix The input element's name attribute.
+* @return void
+
+## `acf_validate_value()`
+
+This function will validate a field's value
+
+* @type function
+* @date 6/10/13
+* @since ACF 5.0.0
+* @param mixed $value The field value to validate.
+* @param array $field The field array.
+* @param string $input The input element's name attribute.
+* @return boolean
+
+---
diff --git a/docs/concepts/architecture.md b/docs/concepts/architecture.md
index 814843fb..0b11f3dc 100644
--- a/docs/concepts/architecture.md
+++ b/docs/concepts/architecture.md
@@ -5,18 +5,21 @@ This document explains the internal architecture of Secure Custom Fields.
## Core Components
### 1. Field Management System
+
- Field type registration and validation
- Field rendering and display
- Data storage and retrieval
- Value sanitization and escaping
### 2. Post Type Management
+
- Custom post type registration
- Advanced configuration options
- WordPress core integration
- Rewrite rules and permalinks
### 3. Security Layer
+
- Input validation and sanitization
- Context-aware output escaping
- Permission and capability management
@@ -62,21 +65,25 @@ The plugin is organized into several key directories:
## Loading Process
### 1. Plugin Initialization
+
- Load dependencies
- Set up autoloader
- Initialize core classes
### 2. WordPress Integration
+
- Register post types
- Add hooks and filters
- Set up admin menus
### 3. Feature Registration
+
- Register field types
- Set up API endpoints
- Initialize components
### 4. Admin Interface Setup
+
- Load admin scripts
- Set up field management
- Configure settings pages
@@ -101,4 +108,4 @@ The plugin is organized into several key directories:
4. **Output**
- Template functions
- REST API responses
- - Admin interface
\ No newline at end of file
+ - Admin interface
diff --git a/docs/concepts/index.md b/docs/concepts/index.md
index bbd326f5..df1da62e 100644
--- a/docs/concepts/index.md
+++ b/docs/concepts/index.md
@@ -4,9 +4,9 @@ This section covers the fundamental concepts and architecture of Secure Custom F
## In This Section
-- [Architecture](architecture.md) - Understanding SCF's internal structure
-- [Security](security.md) - Security principles and best practices
+- [Architecture](architecture) - Understanding SCF's internal structure
+- [Security](security) - Security principles and best practices
## Overview
-Secure Custom Fields is built on several core concepts that ensure security, flexibility, and extensibility. Understanding these concepts will help you make the most of the plugin.
\ No newline at end of file
+Secure Custom Fields is built on several core concepts that ensure security, flexibility, and extensibility. Understanding these concepts will help you make the most of the plugin.
diff --git a/docs/concepts/security.md b/docs/concepts/security.md
index eaeceb95..1d88056d 100644
--- a/docs/concepts/security.md
+++ b/docs/concepts/security.md
@@ -26,4 +26,4 @@ When working with SCF:
1. Always use provided escaping functions
2. Check user capabilities before operations
3. Validate all data before saving
-4. Use nonces for form submissions
\ No newline at end of file
+4. Use nonces for form submissions
diff --git a/docs/contributing/documentation.md b/docs/contributing/documentation.md
index 456a95eb..2343eda3 100644
--- a/docs/contributing/documentation.md
+++ b/docs/contributing/documentation.md
@@ -36,4 +36,4 @@ We follow the [WordPress Documentation Style Guide](https://make.wordpress.org/d
- API reference
- Hook documentation
- Integration guides
- - Security practices
\ No newline at end of file
+ - Security practices
diff --git a/docs/contributing/index.md b/docs/contributing/index.md
index e5997b3d..a7068e69 100644
--- a/docs/contributing/index.md
+++ b/docs/contributing/index.md
@@ -34,4 +34,4 @@ Guide for contributing to Secure Custom Fields development.
- Follow WordPress coding standards
- Write unit tests for new features
- Document all changes
-- Keep pull requests focused
\ No newline at end of file
+- Keep pull requests focused
diff --git a/docs/features/field/META.md b/docs/features/field/META.md
new file mode 100644
index 00000000..b59b43e5
--- /dev/null
+++ b/docs/features/field/META.md
@@ -0,0 +1,21 @@
+# Field Documentation Guide
+
+This directory contains documentation for all field types in Secure Custom Fields.
+
+## Structure
+
+Each field type has its own directory containing:
+
+- `index.md` - Main documentation for the field
+- `tutorial.md` - Step-by-step tutorial for implementing the field
+
+## Adding New Field Documentation
+
+1. Create a new directory for the field type
+2. Create both required files
+3. Follow the standard format for each file type
+4. Include code examples and use cases
+
+## Documentation Standards
+
+(To be added).
diff --git a/docs/features/fields/accordion/index.md b/docs/features/field/accordion/index.md
similarity index 99%
rename from docs/features/fields/accordion/index.md
rename to docs/features/field/accordion/index.md
index 90b25dbd..2925c370 100644
--- a/docs/features/fields/accordion/index.md
+++ b/docs/features/field/accordion/index.md
@@ -3,12 +3,14 @@
The Accordion field creates collapsible sections to organize your fields into logical groups. It helps improve the editing experience by reducing visual clutter and grouping related fields together.
## Key Features
+
- Creates collapsible sections for field organization
- Can be set to open/closed by default
- Supports multiple open sections simultaneously
- Can act as an endpoint for previous accordion sections
## Settings
+
- Open - Display this accordion as open on page load
- Multi-Expand - Allow this accordion to open without closing others
-- Endpoint - Define an endpoint for the previous accordion to stop
\ No newline at end of file
+- Endpoint - Define an endpoint for the previous accordion to stop
diff --git a/docs/features/fields/accordion/tutorial.md b/docs/features/field/accordion/tutorial.md
similarity index 94%
rename from docs/features/fields/accordion/tutorial.md
rename to docs/features/field/accordion/tutorial.md
index 8ef2985e..84ae5ce6 100644
--- a/docs/features/fields/accordion/tutorial.md
+++ b/docs/features/field/accordion/tutorial.md
@@ -1,6 +1,7 @@
# Using the Accordion Field
## Basic Setup
+
1. Create a new Field Group
2. Add an Accordion field
3. Configure basic settings:
@@ -9,6 +10,7 @@
- Decide if multiple sections can be open
## Common Use Cases
+
1. Organizing Content Sections
- Group related fields together
- Use clear section names
@@ -20,7 +22,8 @@
- Settings/Configuration
## Tips
+
- Keep section names concise but descriptive
- Don't nest accordions too deeply
- Consider using endpoints to create clear breaks
-- Group related fields logically
\ No newline at end of file
+- Group related fields logically
diff --git a/docs/features/fields/button-group/index.md b/docs/features/field/button-group/index.md
similarity index 92%
rename from docs/features/fields/button-group/index.md
rename to docs/features/field/button-group/index.md
index c626da24..ea4c38f9 100644
--- a/docs/features/fields/button-group/index.md
+++ b/docs/features/field/button-group/index.md
@@ -3,13 +3,15 @@
The Button Group field provides a set of buttons where users can select one option from multiple choices. It offers a more visual and user-friendly alternative to radio buttons or select dropdowns.
## Key Features
+
- Visual button-style interface
- Single option selection
- Customizable button labels
- Clear visual indication of selected option
## Settings
+
- Choices - Define the available options
- Default Value - Set the pre-selected option
- Return Format - Specify how the value should be returned
-- Allow Null - Option to have no selection
\ No newline at end of file
+- Allow Null - Option to have no selection
diff --git a/docs/features/fields/button-group/tutorial.md b/docs/features/field/button-group/tutorial.md
similarity index 94%
rename from docs/features/fields/button-group/tutorial.md
rename to docs/features/field/button-group/tutorial.md
index 0e4ed945..5b0688c1 100644
--- a/docs/features/fields/button-group/tutorial.md
+++ b/docs/features/field/button-group/tutorial.md
@@ -1,6 +1,7 @@
# Using the Button Group Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Button Group field
3. Configure the choices:
@@ -9,6 +10,7 @@
- Choose return format
## Common Use Cases
+
1. Simple Toggle Options
- Yes/No choices
- Show/Hide settings
@@ -20,7 +22,8 @@
- Priority levels
## Tips
+
- Keep choices concise
- Use clear labels
- Consider mobile usability
-- Limit number of options
\ No newline at end of file
+- Limit number of options
diff --git a/docs/features/fields/checkbox/index.md b/docs/features/field/checkbox/index.md
similarity index 90%
rename from docs/features/fields/checkbox/index.md
rename to docs/features/field/checkbox/index.md
index f7ddcd2c..62b6fe2a 100644
--- a/docs/features/fields/checkbox/index.md
+++ b/docs/features/field/checkbox/index.md
@@ -3,14 +3,16 @@
The Checkbox field allows users to select one or multiple choices from a set of options. It's ideal for situations where multiple selections are needed or when users need to toggle specific options on/off.
## Key Features
+
- Multiple option selection
- Toggle individual choices
- Customizable checkbox layout
- Flexible return format
## Settings
+
- Choices - Define the available options
- Default Value - Set pre-selected options
- Layout - Choose between vertical or horizontal layout
- Allow Custom - Enable user-added choices
-- Toggle All - Option to select/deselect all choices
\ No newline at end of file
+- Toggle All - Option to select/deselect all choices
diff --git a/docs/features/fields/checkbox/tutorial.md b/docs/features/field/checkbox/tutorial.md
similarity index 93%
rename from docs/features/fields/checkbox/tutorial.md
rename to docs/features/field/checkbox/tutorial.md
index 8cf9f7e8..6d512976 100644
--- a/docs/features/fields/checkbox/tutorial.md
+++ b/docs/features/field/checkbox/tutorial.md
@@ -1,6 +1,7 @@
# Using the Checkbox Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Checkbox field
3. Configure options:
@@ -10,6 +11,7 @@
- Enable/disable "Select All"
## Common Use Cases
+
1. Multiple Selection Lists
- Categories/Tags
- Feature toggles
@@ -21,7 +23,8 @@
- Content filters
## Tips
+
- Group related options together
- Consider using columns for many options
- Provide clear labels
-- Use "Select All" for long lists
\ No newline at end of file
+- Use "Select All" for long lists
diff --git a/docs/features/fields/clone/index.md b/docs/features/field/clone/index.md
similarity index 91%
rename from docs/features/fields/clone/index.md
rename to docs/features/field/clone/index.md
index 84cf297b..74bb0c4a 100644
--- a/docs/features/fields/clone/index.md
+++ b/docs/features/field/clone/index.md
@@ -3,13 +3,15 @@
The Clone field allows you to reuse existing fields or field groups in multiple locations. This helps maintain consistency and reduces the need to recreate commonly used field configurations.
## Key Features
+
- Copy existing field configurations
- Clone individual fields or entire field groups
- Prefix labels to avoid naming conflicts
- Maintain synchronized settings across cloned instances
## Settings
+
- Select Fields - Choose which fields or groups to clone
- Display - Control how the cloned fields appear
- Prefix Label - Add a prefix to cloned field labels
-- Prefix Name - Add a prefix to cloned field names
\ No newline at end of file
+- Prefix Name - Add a prefix to cloned field names
diff --git a/docs/features/fields/clone/tutorial.md b/docs/features/field/clone/tutorial.md
similarity index 94%
rename from docs/features/fields/clone/tutorial.md
rename to docs/features/field/clone/tutorial.md
index e92aa1a1..617eac21 100644
--- a/docs/features/fields/clone/tutorial.md
+++ b/docs/features/field/clone/tutorial.md
@@ -1,6 +1,7 @@
# Using the Clone Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Clone field
3. Configure clone settings:
@@ -10,6 +11,7 @@
- Configure labels
## Common Use Cases
+
1. Reusable Field Sets
- Contact information
- Social media links
@@ -21,7 +23,8 @@
- Standard form elements
## Tips
+
- Use meaningful prefixes
- Consider data structure
- Keep cloned groups focused
-- Document clone relationships
\ No newline at end of file
+- Document clone relationships
diff --git a/docs/features/fields/color-picker/index.md b/docs/features/field/color-picker/index.md
similarity index 90%
rename from docs/features/fields/color-picker/index.md
rename to docs/features/field/color-picker/index.md
index 7e3b82ba..924fa4c1 100644
--- a/docs/features/fields/color-picker/index.md
+++ b/docs/features/field/color-picker/index.md
@@ -3,6 +3,7 @@
The Color Picker field provides an interactive interface for selecting colors. It supports both RGB and RGBA color formats and includes a visual color picker with opacity control.
## Key Features
+
- Visual color selection interface
- RGB and RGBA color support
- Opacity/transparency control
@@ -10,6 +11,7 @@ The Color Picker field provides an interactive interface for selecting colors. I
- Hex color input
## Settings
+
- Default Value - Set a default color
- Return Format - Choose between string, array, or rgba format
-- Enable Opacity - Allow transparency selection
\ No newline at end of file
+- Enable Opacity - Allow transparency selection
diff --git a/docs/features/fields/color-picker/tutorial.md b/docs/features/field/color-picker/tutorial.md
similarity index 94%
rename from docs/features/fields/color-picker/tutorial.md
rename to docs/features/field/color-picker/tutorial.md
index 2d9bd801..ce2b867c 100644
--- a/docs/features/fields/color-picker/tutorial.md
+++ b/docs/features/field/color-picker/tutorial.md
@@ -1,6 +1,7 @@
# Using the Color Picker Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Color Picker field
3. Configure options:
@@ -10,6 +11,7 @@
- Set display preferences
## Common Use Cases
+
1. Theme Customization
- Brand colors
- Background colors
@@ -21,7 +23,8 @@
- Overlay settings
## Tips
+
- Consider color validation
- Use default colors strategically
- Document color usage
-- Consider accessibility
\ No newline at end of file
+- Consider accessibility
diff --git a/docs/features/fields/date-picker/index.md b/docs/features/field/date-picker/index.md
similarity index 92%
rename from docs/features/fields/date-picker/index.md
rename to docs/features/field/date-picker/index.md
index dc536298..92a48483 100644
--- a/docs/features/fields/date-picker/index.md
+++ b/docs/features/field/date-picker/index.md
@@ -3,6 +3,7 @@
The Date Picker field provides a calendar interface for selecting dates. It offers a user-friendly way to input and format dates consistently across your content.
## Key Features
+
- Interactive calendar interface
- Customizable date formats
- Week starts on any day
@@ -10,7 +11,8 @@ The Date Picker field provides a calendar interface for selecting dates. It offe
- Multiple display formats
## Settings
+
- Display Format - How the date appears to editors
- Return Format - How the date is stored/returned
- Week Starts On - Set first day of week
-- First Day - Configure week start day
\ No newline at end of file
+- First Day - Configure week start day
diff --git a/docs/features/fields/date-picker/tutorial.md b/docs/features/field/date-picker/tutorial.md
similarity index 94%
rename from docs/features/fields/date-picker/tutorial.md
rename to docs/features/field/date-picker/tutorial.md
index f1cee8d2..ef54c4f5 100644
--- a/docs/features/fields/date-picker/tutorial.md
+++ b/docs/features/field/date-picker/tutorial.md
@@ -1,6 +1,7 @@
# Using the Date Picker Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Date Picker field
3. Configure options:
@@ -10,6 +11,7 @@
- Set default value
## Common Use Cases
+
1. Event Management
- Event dates
- Scheduling
@@ -21,7 +23,8 @@
- Time-sensitive content
## Tips
+
- Use consistent date formats
- Consider timezone implications
- Set appropriate restrictions
-- Use clear date formatting
\ No newline at end of file
+- Use clear date formatting
diff --git a/docs/features/fields/date-time-picker/index.md b/docs/features/field/date-time-picker/index.md
similarity index 92%
rename from docs/features/fields/date-time-picker/index.md
rename to docs/features/field/date-time-picker/index.md
index d0d80cc6..e0342936 100644
--- a/docs/features/fields/date-time-picker/index.md
+++ b/docs/features/field/date-time-picker/index.md
@@ -3,6 +3,7 @@
The Date Time Picker field combines date and time selection into a single interface. It provides precise control over datetime values with both calendar and time input options.
## Key Features
+
- Combined date and time selection
- Customizable date/time formats
- Time increment control
@@ -10,7 +11,8 @@ The Date Time Picker field combines date and time selection into a single interf
- Timezone support
## Settings
+
- Display Format - How the datetime appears to editors
- Return Format - How the datetime is stored/returned
- Week Starts On - Set first day of week
-- Time Increment - Control minute stepping
\ No newline at end of file
+- Time Increment - Control minute stepping
diff --git a/docs/features/fields/date-time-picker/tutorial.md b/docs/features/field/date-time-picker/tutorial.md
similarity index 94%
rename from docs/features/fields/date-time-picker/tutorial.md
rename to docs/features/field/date-time-picker/tutorial.md
index 4095baa9..1ffc7ff5 100644
--- a/docs/features/fields/date-time-picker/tutorial.md
+++ b/docs/features/field/date-time-picker/tutorial.md
@@ -1,6 +1,7 @@
# Using the Date Time Picker Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Date Time Picker field
3. Configure options:
@@ -10,6 +11,7 @@
- Configure default value
## Common Use Cases
+
1. Event Scheduling
- Event start/end times
- Appointment booking
@@ -21,7 +23,8 @@
- Automated tasks
## Tips
+
- Consider time zone handling
- Use appropriate time increments
- Validate date ranges
-- Clear datetime formatting
\ No newline at end of file
+- Clear datetime formatting
diff --git a/docs/features/fields/email/index.md b/docs/features/field/email/index.md
similarity index 92%
rename from docs/features/fields/email/index.md
rename to docs/features/field/email/index.md
index 5cbb5640..e24206ab 100644
--- a/docs/features/fields/email/index.md
+++ b/docs/features/field/email/index.md
@@ -3,6 +3,7 @@
The Email field provides a specialized input for email addresses. It includes built-in validation to ensure proper email format and can be configured with custom display options.
## Key Features
+
- Email format validation
- Custom placeholder text
- Prepend/append text options
@@ -10,7 +11,8 @@ The Email field provides a specialized input for email addresses. It includes bu
- Multiple email support
## Settings
+
- Default Value - Set a default email address
- Placeholder - Custom placeholder text
- Prepend - Add text before the input
-- Append - Add text after the input
\ No newline at end of file
+- Append - Add text after the input
diff --git a/docs/features/fields/email/tutorial.md b/docs/features/field/email/tutorial.md
similarity index 95%
rename from docs/features/fields/email/tutorial.md
rename to docs/features/field/email/tutorial.md
index 221a5ba3..59441f09 100644
--- a/docs/features/fields/email/tutorial.md
+++ b/docs/features/field/email/tutorial.md
@@ -1,6 +1,7 @@
# Using the Email Field
## Basic Setup
+
1. Create a new Field Group
2. Add an Email field
3. Configure options:
@@ -10,6 +11,7 @@
- Set default value
## Common Use Cases
+
1. Contact Information
- Contact forms
- User profiles
@@ -21,7 +23,8 @@
- System notifications
## Tips
+
- Use clear validation messages
- Consider multiple email support
- Add helpful placeholder text
-- Validate email format
\ No newline at end of file
+- Validate email format
diff --git a/docs/features/fields/file/index.md b/docs/features/field/file/index.md
similarity index 90%
rename from docs/features/fields/file/index.md
rename to docs/features/field/file/index.md
index 553b0ab7..3c00ba3d 100644
--- a/docs/features/fields/file/index.md
+++ b/docs/features/field/file/index.md
@@ -3,6 +3,7 @@
The File field enables file uploads and management through the WordPress media library. It supports various file types and provides flexible display options for the selected files.
## Key Features
+
- Media library integration
- File type restrictions
- Size limitations
@@ -10,8 +11,9 @@ The File field enables file uploads and management through the WordPress media l
- Preview capabilities
## Settings
+
- Library - Restrict to uploaded or all files
- Return Format - Array, URL, or ID
- Preview Size - Thumbnail display size
- Min/Max Size - File size restrictions
-- Allowed File Types - Restrict accepted formats
\ No newline at end of file
+- Allowed File Types - Restrict accepted formats
diff --git a/docs/features/fields/file/tutorial.md b/docs/features/field/file/tutorial.md
similarity index 94%
rename from docs/features/fields/file/tutorial.md
rename to docs/features/field/file/tutorial.md
index ca9e80c7..360de834 100644
--- a/docs/features/fields/file/tutorial.md
+++ b/docs/features/field/file/tutorial.md
@@ -1,6 +1,7 @@
# Using the File Field
## Basic Setup
+
1. Create a new Field Group
2. Add a File field
3. Configure options:
@@ -10,6 +11,7 @@
- Set return format
## Common Use Cases
+
1. Document Management
- PDF uploads
- Document attachments
@@ -21,7 +23,8 @@
- Resource linking
## Tips
+
- Restrict file types appropriately
- Set reasonable size limits
- Consider storage implications
-- Use clear preview options
\ No newline at end of file
+- Use clear preview options
diff --git a/docs/features/fields/flexible-content/index.md b/docs/features/field/flexible-content/index.md
similarity index 91%
rename from docs/features/fields/flexible-content/index.md
rename to docs/features/field/flexible-content/index.md
index 5d5780b2..14f32322 100644
--- a/docs/features/fields/flexible-content/index.md
+++ b/docs/features/field/flexible-content/index.md
@@ -3,6 +3,7 @@
The Flexible Content field provides a flexible content builder interface. It allows users to create dynamic layouts by selecting from predefined content block types and arranging them in any order.
## Key Features
+
- Dynamic layout builder
- Multiple layout types
- Drag and drop ordering
@@ -10,7 +11,8 @@ The Flexible Content field provides a flexible content builder interface. It all
- Customizable templates
## Settings
+
- Layouts - Define available content block types
- Button Label - Customize the "Add Row" text
- Min/Max Layouts - Limit number of blocks
-- Layout Settings - Configure each layout type
\ No newline at end of file
+- Layout Settings - Configure each layout type
diff --git a/docs/features/fields/flexible-content/tutorial.md b/docs/features/field/flexible-content/tutorial.md
similarity index 95%
rename from docs/features/fields/flexible-content/tutorial.md
rename to docs/features/field/flexible-content/tutorial.md
index 103ad7be..c5a7a296 100644
--- a/docs/features/fields/flexible-content/tutorial.md
+++ b/docs/features/field/flexible-content/tutorial.md
@@ -1,6 +1,7 @@
# Using the Flexible Content Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Flexible Content field
3. Configure layouts:
@@ -10,6 +11,7 @@
- Configure button labels
## Common Use Cases
+
1. Page Building
- Content sections
- Landing pages
@@ -21,7 +23,8 @@
- Feature blocks
## Tips
+
- Plan layouts carefully
- Use clear layout labels
- Consider nesting depth
-- Optimize for editors
\ No newline at end of file
+- Optimize for editors
diff --git a/docs/features/fields/gallery/index.md b/docs/features/field/gallery/index.md
similarity index 92%
rename from docs/features/fields/gallery/index.md
rename to docs/features/field/gallery/index.md
index 9cd2df65..66c2a1e4 100644
--- a/docs/features/fields/gallery/index.md
+++ b/docs/features/field/gallery/index.md
@@ -3,6 +3,7 @@
The Gallery field enables management of multiple images in a single field. It provides an intuitive interface for uploading, ordering, and managing collections of images.
## Key Features
+
- Multiple image upload
- Drag and drop ordering
- Image previews
@@ -10,8 +11,9 @@ The Gallery field enables management of multiple images in a single field. It pr
- Media library integration
## Settings
+
- Library - Restrict to uploaded or all images
- Min/Max Selection - Limit number of images
- Preview Size - Thumbnail display size
- Insert - Prepend or append new images
-- Return Format - Array, URL, or ID
\ No newline at end of file
+- Return Format - Array, URL, or ID
diff --git a/docs/features/fields/gallery/tutorial.md b/docs/features/field/gallery/tutorial.md
similarity index 95%
rename from docs/features/fields/gallery/tutorial.md
rename to docs/features/field/gallery/tutorial.md
index 8b7f25a0..be7322ba 100644
--- a/docs/features/fields/gallery/tutorial.md
+++ b/docs/features/field/gallery/tutorial.md
@@ -1,6 +1,7 @@
# Using the Gallery Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Gallery field
3. Configure options:
@@ -10,6 +11,7 @@
- Set insert position
## Common Use Cases
+
1. Image Collections
- Photo galleries
- Product images
@@ -21,7 +23,8 @@
- Media libraries
## Tips
+
- Set appropriate image limits
- Consider thumbnail sizes
- Enable easy reordering
-- Optimize image sizes
\ No newline at end of file
+- Optimize image sizes
diff --git a/docs/features/fields/google-map/index.md b/docs/features/field/google-map/index.md
similarity index 92%
rename from docs/features/fields/google-map/index.md
rename to docs/features/field/google-map/index.md
index 937df31f..c8224739 100644
--- a/docs/features/fields/google-map/index.md
+++ b/docs/features/field/google-map/index.md
@@ -3,6 +3,7 @@
The Google Map field provides an interactive map interface for selecting and storing location data. It integrates with the Google Maps API to offer address search and precise location picking.
## Key Features
+
- Interactive map interface
- Address search functionality
- Latitude/longitude selection
@@ -10,8 +11,9 @@ The Google Map field provides an interactive map interface for selecting and sto
- Zoom level control
## Settings
+
- Center Latitude - Default map center point
- Center Longitude - Default map center point
- Zoom Level - Default map zoom
- Height - Map display height
-- Return Format - Location data format
\ No newline at end of file
+- Return Format - Location data format
diff --git a/docs/features/fields/google-map/tutorial.md b/docs/features/field/google-map/tutorial.md
similarity index 94%
rename from docs/features/fields/google-map/tutorial.md
rename to docs/features/field/google-map/tutorial.md
index 9975b44e..ef40037e 100644
--- a/docs/features/fields/google-map/tutorial.md
+++ b/docs/features/field/google-map/tutorial.md
@@ -1,6 +1,7 @@
# Using the Google Map Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Google Map field
3. Configure options:
@@ -10,6 +11,7 @@
- Choose display format
## Common Use Cases
+
1. Location Information
- Business locations
- Event venues
@@ -21,7 +23,8 @@
- Store locators
## Tips
+
- Configure API key properly
- Set appropriate zoom levels
- Consider mobile display
-- Use clear location markers
\ No newline at end of file
+- Use clear location markers
diff --git a/docs/features/fields/group/index.md b/docs/features/field/group/index.md
similarity index 89%
rename from docs/features/fields/group/index.md
rename to docs/features/field/group/index.md
index 711ba179..37006b54 100644
--- a/docs/features/fields/group/index.md
+++ b/docs/features/field/group/index.md
@@ -3,6 +3,7 @@
The Group field allows you to organize multiple fields together into a single data structure. It helps create logical groupings of related fields and simplifies data organization.
## Key Features
+
- Group multiple fields together
- Single data structure
- Simplified data retrieval
@@ -10,6 +11,7 @@ The Group field allows you to organize multiple fields together into a single da
- Nested field support
## Settings
+
- Sub Fields - Add fields within the group
- Layout - Stack or table display format
-- Return Format - Group or individual field values
\ No newline at end of file
+- Return Format - Group or individual field values
diff --git a/docs/features/fields/group/tutorial.md b/docs/features/field/group/tutorial.md
similarity index 94%
rename from docs/features/fields/group/tutorial.md
rename to docs/features/field/group/tutorial.md
index 7a64111b..5fff57ba 100644
--- a/docs/features/fields/group/tutorial.md
+++ b/docs/features/field/group/tutorial.md
@@ -1,6 +1,7 @@
# Using the Group Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Group field
3. Configure sub-fields:
@@ -10,6 +11,7 @@
- Choose return format
## Common Use Cases
+
1. Related Data Sets
- Address information
- Social media profiles
@@ -21,7 +23,8 @@
- Feature sets
## Tips
+
- Keep groups focused
- Use clear labeling
- Consider data structure
-- Plan field organization
\ No newline at end of file
+- Plan field organization
diff --git a/docs/features/fields/icon-picker/index.md b/docs/features/field/icon-picker/index.md
similarity index 91%
rename from docs/features/fields/icon-picker/index.md
rename to docs/features/field/icon-picker/index.md
index 6a86c06a..5bdd987f 100644
--- a/docs/features/fields/icon-picker/index.md
+++ b/docs/features/field/icon-picker/index.md
@@ -3,6 +3,7 @@
The Icon Picker field provides an interface for selecting icons from various sources including Dashicons, custom icon sets, or the media library.
## Key Features
+
- Multiple icon source options
- Dashicons integration
- Media library support
@@ -10,7 +11,8 @@ The Icon Picker field provides an interface for selecting icons from various sou
- Visual icon preview
## Settings
+
- Icon Library - Choose available icon sources
- Return Format - Icon class, URL, or array
- Preview Size - Icon display size
-- Allow Custom - Enable custom icon URLs
\ No newline at end of file
+- Allow Custom - Enable custom icon URLs
diff --git a/docs/features/fields/icon-picker/tutorial.md b/docs/features/field/icon-picker/tutorial.md
similarity index 95%
rename from docs/features/fields/icon-picker/tutorial.md
rename to docs/features/field/icon-picker/tutorial.md
index 9c5b4480..f7a9a848 100644
--- a/docs/features/fields/icon-picker/tutorial.md
+++ b/docs/features/field/icon-picker/tutorial.md
@@ -1,6 +1,7 @@
# Using the Icon Picker Field
## Basic Setup
+
1. Create a new Field Group
2. Add an Icon Picker field
3. Configure options:
@@ -10,6 +11,7 @@
- Enable custom URLs
## Common Use Cases
+
1. UI Elements
- Menu icons
- Feature indicators
@@ -21,7 +23,8 @@
- Navigation elements
## Tips
+
- Maintain icon consistency
- Consider icon sizing
- Use clear previews
-- Document icon usage
\ No newline at end of file
+- Document icon usage
diff --git a/docs/features/fields/image/index.md b/docs/features/field/image/index.md
similarity index 93%
rename from docs/features/fields/image/index.md
rename to docs/features/field/image/index.md
index 7deadfd6..02349018 100644
--- a/docs/features/fields/image/index.md
+++ b/docs/features/field/image/index.md
@@ -3,6 +3,7 @@
The Image field provides a dedicated interface for uploading and selecting images through the WordPress media library. It offers preview capabilities and multiple return format options.
## Key Features
+
- Media library integration
- Image preview
- Size restrictions
@@ -10,8 +11,9 @@ The Image field provides a dedicated interface for uploading and selecting image
- Multiple return formats
## Settings
+
- Preview Size - Thumbnail display size
- Library - Restrict to uploaded or all images
- Min/Max Width/Height - Image dimension limits
- File Size Restrictions - Control upload sizes
-- Return Format - Array, URL, or ID
\ No newline at end of file
+- Return Format - Array, URL, or ID
diff --git a/docs/features/fields/image/tutorial.md b/docs/features/field/image/tutorial.md
similarity index 93%
rename from docs/features/fields/image/tutorial.md
rename to docs/features/field/image/tutorial.md
index e9a24f99..93e50c12 100644
--- a/docs/features/fields/image/tutorial.md
+++ b/docs/features/field/image/tutorial.md
@@ -1,6 +1,7 @@
# Using the Image Field
## Basic Setup
+
1. Create a new Field Group
2. Add an Image field
3. Configure options:
@@ -10,6 +11,7 @@
- Set return format
## Common Use Cases
+
1. Content Images
- Featured images
- Article photos
@@ -21,7 +23,8 @@
- Banner images
## Tips
+
- Set appropriate size limits
- Consider image dimensions
- Use meaningful preview sizes
-- Plan for responsive display
\ No newline at end of file
+- Plan for responsive display
diff --git a/docs/features/field/index.md b/docs/features/field/index.md
new file mode 100644
index 00000000..95a0d1dc
--- /dev/null
+++ b/docs/features/field/index.md
@@ -0,0 +1,44 @@
+# Field Types
+
+Documentation for all available field types in Secure Custom Fields.
+
+Each field type has its own documentation and tutorial showing how to implement and use it effectively.
+
+## Available Fields
+
+- [Accordion](accordion) - Group fields into collapsible sections
+- [Button Group](button-group) - Select one option from a group of buttons
+- [Checkbox](checkbox) - Select one or more choices
+- [Clone](clone) - Duplicate and reuse existing field configurations
+- [Color Picker](color-picker) - Choose colors with a visual picker
+- [Date Picker](date-picker) - Select dates from a calendar
+- [Date/Time Picker](date-time-picker) - Select dates and times
+- [Email](email) - Input and validate email addresses
+- [File](file) - Upload and manage files
+- [Flexible Content](flexible-content) - Create flexible content layouts
+- [Gallery](gallery) - Manage collections of images
+- [Google Map](google-map) - Add location data with Google Maps
+- [Group](group) - Group fields together
+- [Icon Picker](icon-picker) - Select from available icons
+- [Image](image) - Upload and manage images
+- [Link](link) - Create links with titles and targets
+- [Message](message) - Display instructional text
+- [Number](number) - Input numeric values
+- [oEmbed](oembed) - Embed external content
+- [Page Link](page-link) - Link to internal content
+- [Password](password) - Securely input passwords
+- [Post Object](post-object) - Relate to other posts
+- [Radio](radio) - Select one choice from options
+- [Range](range) - Select a numeric value with a slider
+- [Repeater](repeater) - Create repeatable groups of fields
+- [Select](select) - Choose from dropdown options
+- [Separator](separator) - Add visual breaks between fields
+- [Tab](tab) - Organize fields into tabbed sections
+- [Taxonomy](taxonomy) - Select taxonomy terms
+- [Text](text) - Single line text input
+- [Textarea](textarea) - Multi-line text input
+- [Time Picker](time-picker) - Select time values
+- [True/False](true-false) - Toggle switch for yes/no choices
+- [URL](url) - Input and validate web addresses
+- [User](user) - Select WordPress users
+- [WYSIWYG](wysiwyg) - Rich text editor
diff --git a/docs/features/fields/link/index.md b/docs/features/field/link/index.md
similarity index 89%
rename from docs/features/fields/link/index.md
rename to docs/features/field/link/index.md
index 3be74b61..d25e13f0 100644
--- a/docs/features/fields/link/index.md
+++ b/docs/features/field/link/index.md
@@ -3,6 +3,7 @@
The Link field provides an interface for creating links with various properties. It allows users to select internal content, enter external URLs, and set link attributes.
## Key Features
+
- Internal/external link support
- Link text customization
- Target attribute control
@@ -10,6 +11,7 @@ The Link field provides an interface for creating links with various properties.
- WordPress link picker integration
## Settings
+
- Return Format - Array or URL
- Default Value - Preset link data
-- Display Format - How the link appears in admin
\ No newline at end of file
+- Display Format - How the link appears in admin
diff --git a/docs/features/fields/link/tutorial.md b/docs/features/field/link/tutorial.md
similarity index 94%
rename from docs/features/fields/link/tutorial.md
rename to docs/features/field/link/tutorial.md
index 2f1d9162..0d6d8bca 100644
--- a/docs/features/fields/link/tutorial.md
+++ b/docs/features/field/link/tutorial.md
@@ -1,6 +1,7 @@
# Using the Link Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Link field
3. Configure options:
@@ -10,6 +11,7 @@
- Enable/disable features
## Common Use Cases
+
1. Navigation Elements
- Menu links
- Call-to-actions
@@ -21,7 +23,8 @@
- Document links
## Tips
+
- Validate URLs properly
- Consider link targets
- Use clear link text
-- Check for broken links
\ No newline at end of file
+- Check for broken links
diff --git a/docs/features/fields/message/index.md b/docs/features/field/message/index.md
similarity index 92%
rename from docs/features/fields/message/index.md
rename to docs/features/field/message/index.md
index f8e6127b..b5f8435a 100644
--- a/docs/features/fields/message/index.md
+++ b/docs/features/field/message/index.md
@@ -3,6 +3,7 @@
The Message field displays instructional text or HTML content within the editing interface. It's useful for providing guidance, separating content sections, or displaying formatted information.
## Key Features
+
- Custom HTML support
- No data storage
- Formatting options
@@ -10,7 +11,8 @@ The Message field displays instructional text or HTML content within the editing
- Editor instructions
## Settings
+
- Message - The content to display
- New Lines - Handle line breaks
- Escape HTML - Display HTML as text
-- Format - Text formatting options
\ No newline at end of file
+- Format - Text formatting options
diff --git a/docs/features/fields/message/tutorial.md b/docs/features/field/message/tutorial.md
similarity index 94%
rename from docs/features/fields/message/tutorial.md
rename to docs/features/field/message/tutorial.md
index 303eabb1..1d6f4a28 100644
--- a/docs/features/fields/message/tutorial.md
+++ b/docs/features/field/message/tutorial.md
@@ -1,6 +1,7 @@
# Using the Message Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Message field
3. Configure options:
@@ -10,6 +11,7 @@
- Choose display style
## Common Use Cases
+
1. User Guidance
- Field instructions
- Section descriptions
@@ -21,7 +23,8 @@
- Information blocks
## Tips
+
- Keep messages concise
- Use clear formatting
- Consider visibility
-- Update content regularly
\ No newline at end of file
+- Update content regularly
diff --git a/docs/features/fields/number/index.md b/docs/features/field/number/index.md
similarity index 93%
rename from docs/features/fields/number/index.md
rename to docs/features/field/number/index.md
index a6a2e371..d60b26f3 100644
--- a/docs/features/fields/number/index.md
+++ b/docs/features/field/number/index.md
@@ -3,6 +3,7 @@
The Number field provides an input specifically for numeric values. It includes validation and formatting options to ensure proper number handling.
## Key Features
+
- Numeric validation
- Min/max restrictions
- Step increment control
@@ -10,10 +11,11 @@ The Number field provides an input specifically for numeric values. It includes
- Prefix/suffix support
## Settings
+
- Default Value - Preset number
- Placeholder - Input placeholder text
- Prepend - Text before the input
- Append - Text after the input
- Min - Minimum allowed value
- Max - Maximum allowed value
-- Step - Number increment size
\ No newline at end of file
+- Step - Number increment size
diff --git a/docs/features/fields/number/tutorial.md b/docs/features/field/number/tutorial.md
similarity index 94%
rename from docs/features/fields/number/tutorial.md
rename to docs/features/field/number/tutorial.md
index 452a1d67..f7413df8 100644
--- a/docs/features/fields/number/tutorial.md
+++ b/docs/features/field/number/tutorial.md
@@ -1,6 +1,7 @@
# Using the Number Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Number field
3. Configure options:
@@ -10,6 +11,7 @@
- Set default value
## Common Use Cases
+
1. Numeric Input
- Quantities
- Ratings
@@ -21,7 +23,8 @@
- Numeric parameters
## Tips
+
- Set appropriate ranges
- Use clear step intervals
- Consider validation needs
-- Add helpful placeholders
\ No newline at end of file
+- Add helpful placeholders
diff --git a/docs/features/fields/oembed/index.md b/docs/features/field/oembed/index.md
similarity index 91%
rename from docs/features/fields/oembed/index.md
rename to docs/features/field/oembed/index.md
index ec7aa52e..980e0daa 100644
--- a/docs/features/fields/oembed/index.md
+++ b/docs/features/field/oembed/index.md
@@ -3,6 +3,7 @@
The oEmbed field allows embedding external content from various providers like YouTube, Vimeo, and Twitter. It automatically handles the embedding process using WordPress's oEmbed functionality.
## Key Features
+
- Support for multiple providers
- Automatic embed handling
- Preview capability
@@ -10,6 +11,7 @@ The oEmbed field allows embedding external content from various providers like Y
- WordPress oEmbed integration
## Settings
+
- Width - Maximum width of embedded content
- Height - Maximum height of embedded content
-- Preview Size - Display size in admin
\ No newline at end of file
+- Preview Size - Display size in admin
diff --git a/docs/features/fields/oembed/tutorial.md b/docs/features/field/oembed/tutorial.md
similarity index 94%
rename from docs/features/fields/oembed/tutorial.md
rename to docs/features/field/oembed/tutorial.md
index be77debf..0ee49c46 100644
--- a/docs/features/fields/oembed/tutorial.md
+++ b/docs/features/field/oembed/tutorial.md
@@ -1,6 +1,7 @@
# Using the oEmbed Field
## Basic Setup
+
1. Create a new Field Group
2. Add an oEmbed field
3. Configure options:
@@ -10,6 +11,7 @@
- Choose providers
## Common Use Cases
+
1. Media Integration
- Video embeds
- Social media posts
@@ -21,7 +23,8 @@
- Spotify tracks
## Tips
+
- Check provider compatibility
- Consider responsive sizing
- Test embed previews
-- Validate URLs properly
\ No newline at end of file
+- Validate URLs properly
diff --git a/docs/features/fields/page-link/index.md b/docs/features/field/page-link/index.md
similarity index 92%
rename from docs/features/fields/page-link/index.md
rename to docs/features/field/page-link/index.md
index e6fdfcc5..32b7dc9e 100644
--- a/docs/features/fields/page-link/index.md
+++ b/docs/features/field/page-link/index.md
@@ -3,6 +3,7 @@
The Page Link field provides an interface for creating links to internal WordPress content. It allows selection of posts, pages, and custom post types with search functionality.
## Key Features
+
- Internal content linking
- Multiple post type support
- Search functionality
@@ -10,8 +11,9 @@ The Page Link field provides an interface for creating links to internal WordPre
- Multiple selection option
## Settings
+
- Post Type - Select available content types
- Taxonomy - Filter by taxonomy terms
- Allow Archives - Enable archive URL selection
- Multiple Values - Allow multiple selections
-- Allow Null - Make selection optional
\ No newline at end of file
+- Allow Null - Make selection optional
diff --git a/docs/features/fields/page-link/tutorial.md b/docs/features/field/page-link/tutorial.md
similarity index 95%
rename from docs/features/fields/page-link/tutorial.md
rename to docs/features/field/page-link/tutorial.md
index b04decc9..91467663 100644
--- a/docs/features/fields/page-link/tutorial.md
+++ b/docs/features/field/page-link/tutorial.md
@@ -1,6 +1,7 @@
# Using the Page Link Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Page Link field
3. Configure options:
@@ -10,6 +11,7 @@
- Enable/disable archives
## Common Use Cases
+
1. Internal Navigation
- Related content
- Section links
@@ -21,7 +23,8 @@
- Content hierarchy
## Tips
+
- Use clear selection filters
- Consider multiple selection needs
- Test search functionality
-- Validate link targets
\ No newline at end of file
+- Validate link targets
diff --git a/docs/features/fields/password/index.md b/docs/features/field/password/index.md
similarity index 91%
rename from docs/features/fields/password/index.md
rename to docs/features/field/password/index.md
index 439da575..e22d8de4 100644
--- a/docs/features/fields/password/index.md
+++ b/docs/features/field/password/index.md
@@ -3,6 +3,7 @@
The Password field provides a secure input for password data. It includes masking functionality and can be configured with various display options.
## Key Features
+
- Masked input
- Custom placeholder text
- Prepend/append options
@@ -10,6 +11,7 @@ The Password field provides a secure input for password data. It includes maskin
- Secure handling
## Settings
+
- Placeholder - Input placeholder text
- Prepend - Text before the input
-- Append - Text after the input
\ No newline at end of file
+- Append - Text after the input
diff --git a/docs/features/fields/password/tutorial.md b/docs/features/field/password/tutorial.md
similarity index 93%
rename from docs/features/fields/password/tutorial.md
rename to docs/features/field/password/tutorial.md
index 8e2cca2b..73fc285f 100644
--- a/docs/features/fields/password/tutorial.md
+++ b/docs/features/field/password/tutorial.md
@@ -1,6 +1,7 @@
# Using the Password Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Password field
3. Configure options:
@@ -10,6 +11,7 @@
- Set character limits
## Common Use Cases
+
1. Security Settings
- API keys
- Access tokens
@@ -21,7 +23,8 @@
- Access codes
## Tips
+
- Use secure handling
- Clear validation rules
- Consider masking options
-- Implement proper sanitization
\ No newline at end of file
+- Implement proper sanitization
diff --git a/docs/features/fields/post-object/index.md b/docs/features/field/post-object/index.md
similarity index 92%
rename from docs/features/fields/post-object/index.md
rename to docs/features/field/post-object/index.md
index d71fadd4..a9937cc0 100644
--- a/docs/features/fields/post-object/index.md
+++ b/docs/features/field/post-object/index.md
@@ -3,6 +3,7 @@
The Post Object field creates relationships with other WordPress posts, pages, or custom post types. It provides an intuitive interface for selecting and linking to other content.
## Key Features
+
- Content relationship management
- Multiple post type support
- Advanced search functionality
@@ -10,8 +11,9 @@ The Post Object field creates relationships with other WordPress posts, pages, o
- Bidirectional relationships
## Settings
+
- Post Type - Select available content types
- Taxonomy - Filter by taxonomy terms
- Allow Null - Make selection optional
- Multiple Values - Allow multiple selections
-- Return Format - Object, ID, or custom
\ No newline at end of file
+- Return Format - Object, ID, or custom
diff --git a/docs/features/fields/post-object/tutorial.md b/docs/features/field/post-object/tutorial.md
similarity index 94%
rename from docs/features/fields/post-object/tutorial.md
rename to docs/features/field/post-object/tutorial.md
index 5dee26aa..53e18e6b 100644
--- a/docs/features/fields/post-object/tutorial.md
+++ b/docs/features/field/post-object/tutorial.md
@@ -1,6 +1,7 @@
# Using the Post Object Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Post Object field
3. Configure options:
@@ -10,6 +11,7 @@
- Choose return format
## Common Use Cases
+
1. Content Relationships
- Related posts
- Parent/child content
@@ -21,7 +23,8 @@
- Content linking
## Tips
+
- Use clear search filters
- Consider relationship structure
- Plan for scalability
-- Test search performance
\ No newline at end of file
+- Test search performance
diff --git a/docs/features/fields/radio/index.md b/docs/features/field/radio/index.md
similarity index 93%
rename from docs/features/fields/radio/index.md
rename to docs/features/field/radio/index.md
index e8ea6a11..76930bff 100644
--- a/docs/features/fields/radio/index.md
+++ b/docs/features/field/radio/index.md
@@ -3,6 +3,7 @@
The Radio field presents users with a list of options where they can select a single choice. It provides a clear visual representation of available options.
## Key Features
+
- Single option selection
- Custom choice labels
- Vertical or horizontal layout
@@ -10,8 +11,9 @@ The Radio field presents users with a list of options where they can select a si
- Clear visual feedback
## Settings
+
- Choices - Define available options
- Default Value - Pre-selected option
- Layout - Vertical or horizontal display
- Allow Other - Enable custom value input
-- Return Format - Value or label
\ No newline at end of file
+- Return Format - Value or label
diff --git a/docs/features/fields/radio/tutorial.md b/docs/features/field/radio/tutorial.md
similarity index 95%
rename from docs/features/fields/radio/tutorial.md
rename to docs/features/field/radio/tutorial.md
index e04b5544..545f0893 100644
--- a/docs/features/fields/radio/tutorial.md
+++ b/docs/features/field/radio/tutorial.md
@@ -1,6 +1,7 @@
# Using the Radio Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Radio field
3. Configure options:
@@ -10,6 +11,7 @@
- Enable/disable features
## Common Use Cases
+
1. Single Choice Selection
- Status options
- Display preferences
@@ -21,7 +23,8 @@
- Display modes
## Tips
+
- Keep options clear
- Use logical ordering
- Consider mobile layout
-- Provide clear labels
\ No newline at end of file
+- Provide clear labels
diff --git a/docs/features/fields/range/index.md b/docs/features/field/range/index.md
similarity index 91%
rename from docs/features/fields/range/index.md
rename to docs/features/field/range/index.md
index c1462aeb..288da2ed 100644
--- a/docs/features/fields/range/index.md
+++ b/docs/features/field/range/index.md
@@ -3,6 +3,7 @@
The Range field provides a slider interface for selecting numeric values within a defined range. It offers an intuitive way to input numbers with visual feedback.
## Key Features
+
- Slider interface
- Min/max value limits
- Step increment control
@@ -10,8 +11,9 @@ The Range field provides a slider interface for selecting numeric values within
- Prepend/append text
## Settings
+
- Default Value - Starting position
- Min - Minimum allowed value
- Max - Maximum allowed value
- Step - Value increment size
-- Prepend/Append - Add text before/after
\ No newline at end of file
+- Prepend/Append - Add text before/after
diff --git a/docs/features/fields/range/tutorial.md b/docs/features/field/range/tutorial.md
similarity index 95%
rename from docs/features/fields/range/tutorial.md
rename to docs/features/field/range/tutorial.md
index 90d49672..45edd837 100644
--- a/docs/features/fields/range/tutorial.md
+++ b/docs/features/field/range/tutorial.md
@@ -1,6 +1,7 @@
# Using the Range Field
## Basic Setup
+
1. Create a new Field Group
2. Add a Range field
3. Configure options:
@@ -10,6 +11,7 @@
- Set default value
## Common Use Cases
+
1. Numeric Ranges
- Volume controls
- Percentage settings
@@ -21,7 +23,8 @@
- Intensity controls
## Tips
+
- Set intuitive ranges
- Use clear min/max values
- Consider step granularity
-- Add helpful labels
\ No newline at end of file
+- Add helpful labels
diff --git a/docs/features/field/repeater/index.md b/docs/features/field/repeater/index.md
new file mode 100644
index 00000000..4319034c
--- /dev/null
+++ b/docs/features/field/repeater/index.md
@@ -0,0 +1,19 @@
+# Repeater Field
+
+The Repeater field allows you to create a set of sub fields which can be repeated again and again.
+
+## Key Features
+
+- Flexible row management
+- Multiple field types support
+- Nested repeater capability
+- Row reordering
+- Min/max rows control
+
+## Settings
+
+- Sub Fields - Add fields to repeat
+- Minimum Rows - Set required rows
+- Maximum Rows - Limit total rows
+- Layout - Table or block display
+- Button Label - Customize add row text
diff --git a/docs/features/field/repeater/tutorial.md b/docs/features/field/repeater/tutorial.md
new file mode 100644
index 00000000..d8a6b061
--- /dev/null
+++ b/docs/features/field/repeater/tutorial.md
@@ -0,0 +1,30 @@
+# Using the Repeater Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Repeater field
+3. Configure options:
+ - Add sub fields
+ - Set min/max rows
+ - Choose layout style
+ - Configure labels
+
+## Common Use Cases
+
+1. Dynamic Content
+ - Social media links
+ - Team members
+ - Feature lists
+
+2. Content Management
+ - Gallery items
+ - Related links
+ - Service offerings
+
+## Tips
+
+- Plan field structure carefully
+- Consider nesting depth
+- Use clear labels
+- Set appropriate limits
diff --git a/docs/features/field/select/index.md b/docs/features/field/select/index.md
new file mode 100644
index 00000000..4a35edea
--- /dev/null
+++ b/docs/features/field/select/index.md
@@ -0,0 +1,19 @@
+# Select Field
+
+The Select field provides a dropdown interface for selecting single or multiple options from a predefined list.
+
+## Key Features
+
+- Single/multiple selection
+- Custom choices
+- Ajax loading support
+- Placeholder text
+- Conditional logic
+
+## Settings
+
+- Choices - Define available options
+- Default Value - Set initial selection
+- Allow Null - Make selection optional
+- Multiple - Enable multiple selections
+- UI - Enhanced select interface
diff --git a/docs/features/field/select/tutorial.md b/docs/features/field/select/tutorial.md
new file mode 100644
index 00000000..fcc4673a
--- /dev/null
+++ b/docs/features/field/select/tutorial.md
@@ -0,0 +1,30 @@
+# Using the Select Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Select field
+3. Configure options:
+ - Add choice options
+ - Set default value
+ - Configure UI settings
+ - Enable/disable features
+
+## Common Use Cases
+
+1. Option Selection
+ - Status choices
+ - Category selection
+ - Preference settings
+
+2. Data Filtering
+ - View options
+ - Content filtering
+ - Display settings
+
+## Tips
+
+- Use clear option labels
+- Consider grouping options
+- Enable search for long lists
+- Set meaningful defaults
diff --git a/docs/features/field/separator/index.md b/docs/features/field/separator/index.md
new file mode 100644
index 00000000..b365b289
--- /dev/null
+++ b/docs/features/field/separator/index.md
@@ -0,0 +1,17 @@
+# Separator Field
+
+The Separator field provides visual separation between fields in the editing interface. It helps organize and structure field layouts.
+
+## Key Features
+
+- Visual organization
+- Custom styling
+- Layout control
+- Group separation
+- Visual hierarchy
+
+## Settings
+
+- Label - Optional separator text
+- Instructions - Field description
+- Wrapper - CSS class options
diff --git a/docs/features/field/separator/tutorial.md b/docs/features/field/separator/tutorial.md
new file mode 100644
index 00000000..cfae555f
--- /dev/null
+++ b/docs/features/field/separator/tutorial.md
@@ -0,0 +1,30 @@
+# Using the Separator Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Separator field
+3. Configure options:
+ - Set label text
+ - Add instructions
+ - Style wrapper
+ - Position field
+
+## Common Use Cases
+
+1. Content Organization
+ - Section breaks
+ - Field grouping
+ - Visual hierarchy
+
+2. Form Structure
+ - Content sections
+ - Logical breaks
+ - Visual spacing
+
+## Tips
+
+- Use clear labels
+- Keep consistent styling
+- Consider spacing
+- Group related fields
diff --git a/docs/features/field/tab/index.md b/docs/features/field/tab/index.md
new file mode 100644
index 00000000..d34ab4f4
--- /dev/null
+++ b/docs/features/field/tab/index.md
@@ -0,0 +1,18 @@
+# Tab Field
+
+The Tab field creates navigation tabs to organize fields into sections. It improves the editing interface by grouping related fields together.
+
+## Key Features
+
+- Field organization
+- Visual navigation
+- Grouped content
+- Layout control
+- Conditional display
+
+## Settings
+
+- Placement - Top/Left alignment
+- Endpoint - Tab section end
+- Label - Tab name
+- Instructions - Optional help text
diff --git a/docs/features/field/tab/tutorial.md b/docs/features/field/tab/tutorial.md
new file mode 100644
index 00000000..e52bdfbe
--- /dev/null
+++ b/docs/features/field/tab/tutorial.md
@@ -0,0 +1,30 @@
+# Using the Tab Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Tab field
+3. Configure options:
+ - Set tab label
+ - Choose placement
+ - Set endpoint
+ - Add instructions
+
+## Common Use Cases
+
+1. Content Organization
+ - Content sections
+ - Settings groups
+ - Form organization
+
+2. Interface Design
+ - Complex forms
+ - Settings panels
+ - Data grouping
+
+## Tips
+
+- Use clear tab labels
+- Group related fields
+- Consider tab order
+- Plan section breaks
diff --git a/docs/features/field/taxonomy/index.md b/docs/features/field/taxonomy/index.md
new file mode 100644
index 00000000..486a3420
--- /dev/null
+++ b/docs/features/field/taxonomy/index.md
@@ -0,0 +1,19 @@
+# Taxonomy Field
+
+The Taxonomy field creates an interface for selecting taxonomy terms. It supports multiple selection methods and term management.
+
+## Key Features
+
+- Term selection
+- Multiple display types
+- Term creation
+- Hierarchical support
+- Load on demand
+
+## Settings
+
+- Taxonomy - Choose taxonomy
+- Appearance - Select UI style
+- Allow Create - Enable term creation
+- Load Terms - Auto-load options
+- Save Terms - Term relationships
diff --git a/docs/features/field/taxonomy/tutorial.md b/docs/features/field/taxonomy/tutorial.md
new file mode 100644
index 00000000..c5ce9466
--- /dev/null
+++ b/docs/features/field/taxonomy/tutorial.md
@@ -0,0 +1,30 @@
+# Using the Taxonomy Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Taxonomy field
+3. Configure options:
+ - Select taxonomy
+ - Choose field type
+ - Set load behavior
+ - Configure saving
+
+## Common Use Cases
+
+1. Content Classification
+ - Categories
+ - Tags
+ - Custom taxonomies
+
+2. Term Management
+ - Content organization
+ - Filtering systems
+ - Related content
+
+## Tips
+
+- Choose appropriate UI
+- Consider term hierarchy
+- Enable term creation
+- Plan relationship structure
diff --git a/docs/features/field/text/index.md b/docs/features/field/text/index.md
new file mode 100644
index 00000000..f6f45223
--- /dev/null
+++ b/docs/features/field/text/index.md
@@ -0,0 +1,19 @@
+# Text Field
+
+The Text field provides a standard single-line text input with various formatting and validation options.
+
+## Key Features
+
+- Text input
+- Character limits
+- Placeholder text
+- Prepend/append
+- Custom formatting
+
+## Settings
+
+- Default Value - Preset text
+- Placeholder - Input helper text
+- Character Limit - Set max length
+- Prepend - Text before input
+- Append - Text after input
diff --git a/docs/features/field/text/tutorial.md b/docs/features/field/text/tutorial.md
new file mode 100644
index 00000000..1329b564
--- /dev/null
+++ b/docs/features/field/text/tutorial.md
@@ -0,0 +1,32 @@
+# Using the Text Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Text field
+3. Configure options:
+ - Set placeholder
+ - Add character limits
+ - Configure formatting
+ - Set default value
+
+## Common Use Cases
+
+1. Basic Information
+ - Titles
+ - Names
+ - Short descriptions
+ - References
+
+2. Form Elements
+ - Input fields
+ - Search boxes
+ - Labels
+ - Identifiers
+
+## Tips
+
+- Use clear placeholders
+- Set appropriate limits
+- Consider validation
+- Use meaningful defaults
diff --git a/docs/features/field/textarea/index.md b/docs/features/field/textarea/index.md
new file mode 100644
index 00000000..138bfe21
--- /dev/null
+++ b/docs/features/field/textarea/index.md
@@ -0,0 +1,19 @@
+# Textarea Field
+
+The Textarea field provides a multi-line text input for longer content with formatting options and character limits.
+
+## Key Features
+
+- Multi-line text input
+- Character counting
+- Rows configuration
+- New line handling
+- Placeholder support
+
+## Settings
+
+- Default Value - Preset content
+- Placeholder - Helper text
+- Character Limit - Max length
+- Rows - Input height
+- New Lines - Handling options
diff --git a/docs/features/field/textarea/tutorial.md b/docs/features/field/textarea/tutorial.md
new file mode 100644
index 00000000..c8589df3
--- /dev/null
+++ b/docs/features/field/textarea/tutorial.md
@@ -0,0 +1,32 @@
+# Using the Textarea Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Textarea field
+3. Configure options:
+ - Set rows
+ - Add placeholder
+ - Configure limits
+ - Set line handling
+
+## Common Use Cases
+
+1. Long Text Content
+ - Descriptions
+ - Biographies
+ - Instructions
+ - Notes
+
+2. Content Management
+ - Excerpts
+ - Summaries
+ - Meta descriptions
+ - Comments
+
+## Tips
+
+- Set appropriate height
+- Consider word limits
+- Use clear placeholders
+- Plan for formatting
diff --git a/docs/features/field/time-picker/index.md b/docs/features/field/time-picker/index.md
new file mode 100644
index 00000000..52d9e8c1
--- /dev/null
+++ b/docs/features/field/time-picker/index.md
@@ -0,0 +1,19 @@
+# Time Picker Field
+
+The Time Picker field provides an interface for selecting time values with customizable display and increment options.
+
+## Key Features
+
+- Time selection
+- Format options
+- Step intervals
+- Range limits
+- Display customization
+
+## Settings
+
+- Display Format - Time format
+- Return Format - Data format
+- Time Increment - Minute steps
+- Placeholder - Helper text
+- Default Value - Preset time
diff --git a/docs/features/field/time-picker/tutorial.md b/docs/features/field/time-picker/tutorial.md
new file mode 100644
index 00000000..1ce80d32
--- /dev/null
+++ b/docs/features/field/time-picker/tutorial.md
@@ -0,0 +1,30 @@
+# Using the Time Picker Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a Time Picker field
+3. Configure options:
+ - Set time format
+ - Choose increment
+ - Set default time
+ - Configure display
+
+## Common Use Cases
+
+1. Schedule Management
+ - Event times
+ - Opening hours
+ - Appointment slots
+
+2. Time Settings
+ - Scheduling
+ - Time restrictions
+ - Operating hours
+
+## Tips
+
+- Use consistent formats
+- Set appropriate steps
+- Consider time zones
+- Plan for validation
diff --git a/docs/features/field/true-false/index.md b/docs/features/field/true-false/index.md
new file mode 100644
index 00000000..a976efed
--- /dev/null
+++ b/docs/features/field/true-false/index.md
@@ -0,0 +1,19 @@
+# True/False Field
+
+The True/False field provides a simple toggle switch for boolean values. It offers a clean interface for yes/no choices.
+
+## Key Features
+
+- Toggle interface
+- Custom labels
+- Default state
+- Message display
+- UI customization
+
+## Settings
+
+- Message - Field description
+- Default Value - Initial state
+- On Text - Custom label
+- Off Text - Custom label
+- UI - Style options
diff --git a/docs/features/field/true-false/tutorial.md b/docs/features/field/true-false/tutorial.md
new file mode 100644
index 00000000..0bd885e3
--- /dev/null
+++ b/docs/features/field/true-false/tutorial.md
@@ -0,0 +1,30 @@
+# Using the True/False Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a True/False field
+3. Configure options:
+ - Set message
+ - Choose default
+ - Configure labels
+ - Style interface
+
+## Common Use Cases
+
+1. Simple Toggles
+ - Feature flags
+ - Display options
+ - Status switches
+
+2. Settings Control
+ - Visibility settings
+ - Enable/disable
+ - Option toggles
+
+## Tips
+
+- Use clear labels
+- Set logical defaults
+- Consider UI placement
+- Plan conditional logic
diff --git a/docs/features/field/url/index.md b/docs/features/field/url/index.md
new file mode 100644
index 00000000..9b434485
--- /dev/null
+++ b/docs/features/field/url/index.md
@@ -0,0 +1,18 @@
+# URL Field
+
+The URL field provides input for web addresses with validation and formatting options. It ensures proper URL format and structure.
+
+## Key Features
+
+- URL validation
+- Protocol handling
+- Placeholder text
+- Custom formatting
+- Link preview
+
+## Settings
+
+- Default Value - Preset URL
+- Placeholder - Helper text
+- Protocol - Required/optional
+- Return Format - URL structure
diff --git a/docs/features/field/url/tutorial.md b/docs/features/field/url/tutorial.md
new file mode 100644
index 00000000..44fb8c50
--- /dev/null
+++ b/docs/features/field/url/tutorial.md
@@ -0,0 +1,30 @@
+# Using the URL Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a URL field
+3. Configure options:
+ - Set placeholder
+ - Configure protocol
+ - Set validation
+ - Choose format
+
+## Common Use Cases
+
+1. Web Links
+ - Website URLs
+ - Social profiles
+ - Resource links
+
+2. Reference Links
+ - Documentation
+ - External content
+ - Media sources
+
+## Tips
+
+- Validate URLs properly
+- Consider protocols
+- Use clear placeholders
+- Check link validity
diff --git a/docs/features/field/user/index.md b/docs/features/field/user/index.md
new file mode 100644
index 00000000..84b62130
--- /dev/null
+++ b/docs/features/field/user/index.md
@@ -0,0 +1,19 @@
+# User Field
+
+The User field creates an interface for selecting WordPress users. It supports multiple selection methods and user filtering.
+
+## Key Features
+
+- User selection
+- Role filtering
+- Multiple formats
+- Search capability
+- Multiple selection
+
+## Settings
+
+- Roles - Filter by role
+- Allow Null - Optional selection
+- Multiple - Enable multiple
+- Return Format - Object/ID/Array
+- Filter - User query args
diff --git a/docs/features/field/user/tutorial.md b/docs/features/field/user/tutorial.md
new file mode 100644
index 00000000..deeac6e1
--- /dev/null
+++ b/docs/features/field/user/tutorial.md
@@ -0,0 +1,30 @@
+# Using the User Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a User field
+3. Configure options:
+ - Select roles
+ - Set return format
+ - Configure multiple
+ - Set filters
+
+## Common Use Cases
+
+1. User Assignment
+ - Author selection
+ - Team members
+ - User permissions
+
+2. User Relations
+ - Content ownership
+ - User groups
+ - Access control
+
+## Tips
+
+- Filter appropriate roles
+- Consider permissions
+- Use clear search
+- Plan user structure
diff --git a/docs/features/field/wysiwyg/index.md b/docs/features/field/wysiwyg/index.md
new file mode 100644
index 00000000..646153ba
--- /dev/null
+++ b/docs/features/field/wysiwyg/index.md
@@ -0,0 +1,19 @@
+# WYSIWYG Field
+
+The WYSIWYG (What You See Is What You Get) field provides a rich text editor with formatting tools and media integration.
+
+## Key Features
+
+- Rich text editing
+- Media integration
+- Toolbar customization
+- HTML handling
+- Editor styles
+
+## Settings
+
+- Toolbar - Editor tools
+- Media Upload - Enable/disable
+- Tabs - Visual/Text tabs
+- Height - Editor height
+- Default Value - Initial content
diff --git a/docs/features/field/wysiwyg/tutorial.md b/docs/features/field/wysiwyg/tutorial.md
new file mode 100644
index 00000000..528605f1
--- /dev/null
+++ b/docs/features/field/wysiwyg/tutorial.md
@@ -0,0 +1,30 @@
+# Using the WYSIWYG Field
+
+## Basic Setup
+
+1. Create a new Field Group
+2. Add a WYSIWYG field
+3. Configure options:
+ - Choose toolbar
+ - Set media options
+ - Configure height
+ - Set defaults
+
+## Common Use Cases
+
+1. Rich Content
+ - Post content
+ - Product descriptions
+ - Page sections
+
+2. Formatted Text
+ - Documentation
+ - Guidelines
+ - Formatted messages
+
+## Tips
+
+- Configure appropriate tools
+- Consider media handling
+- Plan content structure
+- Set consistent styling
diff --git a/docs/features/fields/META.md b/docs/features/fields/META.md
deleted file mode 100644
index f972e354..00000000
--- a/docs/features/fields/META.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Field Documentation Guide
-
-This directory contains documentation for all field types in Secure Custom Fields.
-
-## Structure
-Each field type has its own directory containing:
-- `index.md` - Main documentation for the field
-- `tutorial.md` - Step-by-step tutorial for implementing the field
-
-## Adding New Field Documentation
-1. Create a new directory for the field type
-2. Create both required files
-3. Follow the standard format for each file type
-4. Include code examples and use cases
-
-## Documentation Standards
-(To be added)
-
-## Available Fields
-
-- [Accordion](accordion/README.md) - Group fields into collapsible sections
-- [Button Group](button-group/README.md) - Select one option from a group of buttons
-- [Checkbox](checkbox/README.md) - Select one or more choices
-- [Color Picker](color-picker/README.md) - Choose colors with a visual picker
-- [Date Picker](date-picker/README.md) - Select dates from a calendar
-- [Date/Time Picker](date-time-picker/README.md) - Select dates and times
-- [Email](email/README.md) - Input and validate email addresses
-- [File](file/README.md) - Upload and manage files
-- [Flexible Content](flexible-content/README.md) - Create flexible content layouts
-- [Gallery](gallery/README.md) - Manage collections of images
-- [Google Map](google-map/README.md) - Add location data with Google Maps
-- [Group](group/README.md) - Group fields together
-- [Icon Picker](icon-picker/README.md) - Select from available icons
-- [Image](image/README.md) - Upload and manage images
-- [Link](link/README.md) - Create links with titles and targets
-- [Message](message/README.md) - Display instructional text
-- [Number](number/README.md) - Input numeric values
-- [oEmbed](oembed/README.md) - Embed external content
-- [Page Link](page-link/README.md) - Link to internal content
-- [Password](password/README.md) - Securely input passwords
-- [Post Object](post-object/README.md) - Relate to other posts
-- [Radio](radio/README.md) - Select one choice from options
-- [Range](range/README.md) - Select a numeric value with a slider
\ No newline at end of file
diff --git a/docs/features/fields/index.md b/docs/features/fields/index.md
deleted file mode 100644
index 14e43d97..00000000
--- a/docs/features/fields/index.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Field Types
-
-Documentation for all available field types in Secure Custom Fields.
-
-Each field type has its own documentation and tutorial showing how to implement and use it effectively.
-
-## Available Fields
-
-- [Accordion](accordion/index.md) - Group fields into collapsible sections
-- [Clone](clone/index.md) - Duplicate and reuse existing field configurations
-- [Button Group](button-group/index.md) - Select one option from a group of buttons
-- [Checkbox](checkbox/index.md) - Select one or more choices
-- [Color Picker](color-picker/index.md) - Choose colors with a visual picker
-- [Date Picker](date-picker/index.md) - Select dates from a calendar
-- [Date/Time Picker](date-time-picker/index.md) - Select dates and times
-- [Email](email/index.md) - Input and validate email addresses
-- [File](file/index.md) - Upload and manage files
-- [Flexible Content](flexible-content/index.md) - Create flexible content layouts
-- [Gallery](gallery/index.md) - Manage collections of images
-- [Google Map](google-map/index.md) - Add location data with Google Maps
-- [Group](group/index.md) - Group fields together
-- [Icon Picker](icon-picker/index.md) - Select from available icons
-- [Image](image/index.md) - Upload and manage images
-- [Link](link/index.md) - Create links with titles and targets
-- [Message](message/index.md) - Display instructional text
-- [Number](number/index.md) - Input numeric values
-- [oEmbed](oembed/index.md) - Embed external content
-- [Page Link](page-link/index.md) - Link to internal content
-- [Password](password/index.md) - Securely input passwords
-- [Post Object](post-object/index.md) - Relate to other posts
-- [Radio](radio/index.md) - Select one choice from options
-- [Range](range/index.md) - Select a numeric value with a slider
\ No newline at end of file
diff --git a/docs/features/index.md b/docs/features/index.md
index 75946214..04b471b9 100644
--- a/docs/features/index.md
+++ b/docs/features/index.md
@@ -4,9 +4,9 @@ This section details all features available in Secure Custom Fields.
## Core Features
-- [Post Types](post-types.md) - Create and manage custom post types
-- [Fields](fields/index.md) - Available field types and their usage
-- [API](api.md) - Programmatic access and integration
+- [Post Types](post-types) - Create and manage custom post types
+- [Fields](fields) - Available field types and their usage
+- [API](api) - Programmatic access and integration
## Feature Categories
@@ -27,27 +27,27 @@ This section details all features available in Secure Custom Fields.
## Available Fields
-- [Accordion](fields/accordion/index.md) - Group fields into collapsible sections
-- [Button Group](fields/button-group/index.md) - Select one option from a group of buttons
-- [Checkbox](fields/checkbox/index.md) - Select one or more choices
-- [Clone](fields/clone/index.md) - Duplicate and reuse existing field configurations
-- [Color Picker](fields/color-picker/index.md) - Choose colors with a visual picker
-- [Date Picker](fields/date-picker/index.md) - Select dates from a calendar
-- [Date/Time Picker](fields/date-time-picker/index.md) - Select dates and times
-- [Email](fields/email/index.md) - Input and validate email addresses
-- [File](fields/file/index.md) - Upload and manage files
-- [Flexible Content](fields/flexible-content/index.md) - Create flexible content layouts
-- [Gallery](fields/gallery/index.md) - Manage collections of images
-- [Google Map](fields/google-map/index.md) - Add location data with Google Maps
-- [Group](fields/group/index.md) - Group fields together
-- [Icon Picker](fields/icon-picker/index.md) - Select from available icons
-- [Image](fields/image/index.md) - Upload and manage images
-- [Link](fields/link/index.md) - Create links with titles and targets
-- [Message](fields/message/index.md) - Display instructional text
-- [Number](fields/number/index.md) - Input numeric values
-- [oEmbed](fields/oembed/index.md) - Embed external content
-- [Page Link](fields/page-link/index.md) - Link to internal content
-- [Password](fields/password/index.md) - Securely input passwords
-- [Post Object](fields/post-object/index.md) - Relate to other posts
-- [Radio](fields/radio/index.md) - Select one choice from options
-- [Range](fields/range/index.md) - Select a numeric value with a slider
\ No newline at end of file
+- [Accordion](fields/accordion) - Group fields into collapsible sections
+- [Button Group](fields/button-group) - Select one option from a group of buttons
+- [Checkbox](fields/checkbox) - Select one or more choices
+- [Clone](fields/clone) - Duplicate and reuse existing field configurations
+- [Color Picker](fields/color-picker) - Choose colors with a visual picker
+- [Date Picker](fields/date-picker) - Select dates from a calendar
+- [Date/Time Picker](fields/date-time-picker) - Select dates and times
+- [Email](fields/email) - Input and validate email addresses
+- [File](fields/file) - Upload and manage files
+- [Flexible Content](fields/flexible-content) - Create flexible content layouts
+- [Gallery](fields/gallery) - Manage collections of images
+- [Google Map](fields/google-map) - Add location data with Google Maps
+- [Group](fields/group) - Group fields together
+- [Icon Picker](fields/icon-picker) - Select from available icons
+- [Image](fields/image) - Upload and manage images
+- [Link](fields/link) - Create links with titles and targets
+- [Message](fields/message) - Display instructional text
+- [Number](fields/number) - Input numeric values
+- [oEmbed](fields/oembed) - Embed external content
+- [Page Link](fields/page-link) - Link to internal content
+- [Password](fields/password) - Securely input passwords
+- [Post Object](fields/post-object) - Relate to other posts
+- [Radio](fields/radio) - Select one choice from options
+- [Range](fields/range) - Select a numeric value with a slider
diff --git a/docs/features/post-types.md b/docs/features/post-types.md
index 3ea352b5..82033d67 100644
--- a/docs/features/post-types.md
+++ b/docs/features/post-types.md
@@ -31,8 +31,9 @@ Create a custom post type through the admin interface:
## Examples
Common use cases for custom post types:
+
- Products
- Team Members
- Portfolio Items
- Testimonials
-- Events
\ No newline at end of file
+- Events
diff --git a/docs/features/api.md b/docs/features/scf-api.md
similarity index 95%
rename from docs/features/api.md
rename to docs/features/scf-api.md
index 9c079ce0..47b2c514 100644
--- a/docs/features/api.md
+++ b/docs/features/scf-api.md
@@ -41,4 +41,4 @@ The Secure Custom Fields API provides programmatic access to field data and plug
2. Validate data types
3. Use proper escaping
4. Check capabilities
-5. Follow WordPress coding standards
\ No newline at end of file
+5. Follow WordPress coding standards
diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md
index 54d792cb..ffde3f82 100644
--- a/docs/getting-started/index.md
+++ b/docs/getting-started/index.md
@@ -4,11 +4,11 @@ This section helps you get up and running with Secure Custom Fields (SCF). Wheth
## In This Section
-- [Installation](installation.md) - How to install and activate SCF
-- [Quick Start](quick-start.md) - Create your first custom field group in minutes
+- [Installation](installation) - How to install and activate SCF
+- [Quick Start](quick-start) - Create your first custom field group in minutes
## Prerequisites
- WordPress 6.0 or later
- PHP 7.4 or later
-- Basic understanding of WordPress development
\ No newline at end of file
+- Basic understanding of WordPress development
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index 4d24ca51..d4741159 100644
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -33,4 +33,4 @@ After installation:
1. Navigate to Custom Fields in your admin menu
2. Verify you can access all plugin features
-3. Create a test field group to ensure functionality
\ No newline at end of file
+3. Create a test field group to ensure functionality
diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md
index 387c04a0..bb62b48b 100644
--- a/docs/getting-started/quick-start.md
+++ b/docs/getting-started/quick-start.md
@@ -26,6 +26,6 @@ Let's create a simple author bio field group:
## Next Steps
-- Learn about [field types](../features/fields.md)
-- Explore [advanced features](../features/README.md)
-- Read the [security guidelines](../concepts/security.md)
\ No newline at end of file
+- Learn about [field types](../features/fields)
+- Explore [advanced features](../features/README)
+- Read the [security guidelines](../concepts/security)
diff --git a/docs/tutorials/first-post-type.md b/docs/tutorials/first-post-type.md
index 9db568df..90c83c2a 100644
--- a/docs/tutorials/first-post-type.md
+++ b/docs/tutorials/first-post-type.md
@@ -33,4 +33,4 @@ A step-by-step guide to creating a custom post type using Secure Custom Fields.
- Add custom fields to your post type
- Configure archive displays
-- Set up custom taxonomies
\ No newline at end of file
+- Set up custom taxonomies
diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md
index 6830efdc..6d8c02c5 100644
--- a/docs/tutorials/index.md
+++ b/docs/tutorials/index.md
@@ -4,9 +4,9 @@ Step-by-step guides for working with Secure Custom Fields.
## Getting Started
-- [Creating Your First Post Type](first-post-type.md) - Basic post type setup
-- [Field Group Basics](field-group-basics.md) - Creating and configuring field groups
-- [Working with Fields](working-with-fields.md) - Using different field types
+- [Creating Your First Post Type](first-post-type) - Basic post type setup
+- [Field Group Basics](field-group-basics) - Creating and configuring field groups
+- [Working with Fields](working-with-fields) - Using different field types
## Advanced Topics
@@ -18,7 +18,8 @@ Step-by-step guides for working with Secure Custom Fields.
## Best Practices
Each tutorial follows these principles:
+
- Clear step-by-step instructions
- Practical examples
- Security considerations
-- Performance optimization tips
\ No newline at end of file
+- Performance optimization tips
diff --git a/docs/scf.md b/docs/welcome.md
similarity index 71%
rename from docs/scf.md
rename to docs/welcome.md
index 10bb401e..e35349f5 100644
--- a/docs/scf.md
+++ b/docs/welcome.md
@@ -4,4 +4,4 @@ Secure Custom Fields is a WordPress plugin that allows you to create custom fiel
## Features
-- [Fields](features/fields/index.md) - Create and manage custom fields.
+- [Fields](features/fields) - Create and manage custom fields.
diff --git a/includes/admin/post-types/admin-field-group.php b/includes/admin/post-types/admin-field-group.php
index aacad7d4..501cdbc5 100644
--- a/includes/admin/post-types/admin-field-group.php
+++ b/includes/admin/post-types/admin-field-group.php
@@ -152,7 +152,6 @@ public function admin_enqueue_scripts() {
array(
'fieldTypes' => acf_get_field_types_info(),
'fieldCategoriesL10n' => acf_get_field_categories_i18n(),
- 'PROUpgradeURL' => 'https://www.advancedcustomfields.com/pro/',
'PROFieldTypes' => acf_get_pro_field_types(),
'PROLocationTypes' => array(
'block' => esc_html__( 'Block', 'secure-custom-fields' ),
diff --git a/includes/admin/views/acf-field-group/fields.php b/includes/admin/views/acf-field-group/fields.php
index 6bf2652e..48870eba 100644
--- a/includes/admin/views/acf-field-group/fields.php
+++ b/includes/admin/views/acf-field-group/fields.php
@@ -71,7 +71,7 @@
sprintf(
/* translators: %s url to field types list */
__( 'Choose from over 30 field types. Learn more.', 'secure-custom-fields' ),
- 'https://www.advancedcustomfields.com/resources/'
+ 'https://developer.wordpress.org/secure-custom-fields/features/fields/'
)
);
?>
diff --git a/includes/admin/views/escaped-html-notice.php b/includes/admin/views/escaped-html-notice.php
index 8576b3cf..cd8d3e6c 100644
--- a/includes/admin/views/escaped-html-notice.php
+++ b/includes/admin/views/escaped-html-notice.php
@@ -1,10 +1,9 @@
' . $acf_plugin_name . ' —';
-$acf_learn_how_to_fix = '' . __( 'Learn more', 'secure-custom-fields' ) . '';
-$acf_class = 'notice-error';
-$acf_user_can_acf = false;
+$acf_plugin_name = 'Secure Custom Fields';
+$acf_plugin_name = '' . $acf_plugin_name . ' —';
+$acf_class = 'notice-error';
+$acf_user_can_acf = false;
if ( current_user_can( acf_get_setting( 'capability' ) ) ) {
$acf_user_can_acf = true;
@@ -29,9 +28,8 @@
$acf_error_msg = sprintf(
/* translators: %1$s - name of the SCF plugin. %2$s - Link to documentation. */
- __( '%1$s SCF automatically escapes unsafe HTML when rendered by the_field
or the ACF shortcode. We\'ve detected the output of some of your fields has been modified by this change, but this may not be a breaking change. %2$s.', 'secure-custom-fields' ),
- $acf_plugin_name,
- $acf_learn_how_to_fix
+ __( '%1$s SCF automatically escapes unsafe HTML when rendered by the_field
or the ACF shortcode. We\'ve detected the output of some of your fields has been modified by this change, but this may not be a breaking change.', 'secure-custom-fields' ),
+ $acf_plugin_name
);
diff --git a/includes/fields.php b/includes/fields.php
index 2fe101d7..a83fc303 100644
--- a/includes/fields.php
+++ b/includes/fields.php
@@ -414,40 +414,40 @@ function acf_get_pro_field_types() {
'clone' => array(
'name' => 'clone',
'label' => _x( 'Clone', 'noun', 'secure-custom-fields' ),
- 'doc_url' => 'https://www.advancedcustomfields.com/resources/clone/',
+ 'doc_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/clone/',
'preview_image' => acf_get_url() . '/assets/images/field-type-previews/field-preview-clone.png',
'description' => __( 'This allows you to select and display existing fields. It does not duplicate any fields in the database, but loads and displays the selected fields at run-time. The Clone field can either replace itself with the selected fields or display the selected fields as a group of subfields.', 'secure-custom-fields' ),
- 'tutorial_url' => 'https://www.advancedcustomfields.com/resources/how-to-use-the-clone-field/',
+ 'tutorial_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/clone/clone-tutorial/',
'category' => 'layout',
'pro' => false,
),
'flexible_content' => array(
'name' => 'flexible_content',
'label' => __( 'Flexible Content', 'secure-custom-fields' ),
- 'doc_url' => 'https://www.advancedcustomfields.com/resources/flexible-content/',
+ 'doc_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/flexible-content/',
'preview_image' => acf_get_url() . '/assets/images/field-type-previews/field-preview-flexible-content.png',
'description' => __( 'This provides a simple, structured, layout-based editor. The Flexible Content field allows you to define, create and manage content with total control by using layouts and subfields to design the available blocks.', 'secure-custom-fields' ),
- 'tutorial_url' => 'https://www.advancedcustomfields.com/resources/building-layouts-with-the-flexible-content-field-in-a-theme/',
+ 'tutorial_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/flexible-content/flexible-content-tutorial/',
'category' => 'layout',
'pro' => false,
),
'gallery' => array(
'name' => 'gallery',
'label' => __( 'Gallery', 'secure-custom-fields' ),
- 'doc_url' => 'https://www.advancedcustomfields.com/resources/gallery/',
+ 'doc_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/gallery/',
'preview_image' => acf_get_url() . '/assets/images/field-type-previews/field-preview-gallery.png',
'description' => __( 'This provides an interactive interface for managing a collection of attachments. Most settings are similar to the Image field type. Additional settings allow you to specify where new attachments are added in the gallery and the minimum/maximum number of attachments allowed.', 'secure-custom-fields' ),
- 'tutorial_url' => 'https://www.advancedcustomfields.com/resources/how-to-use-the-gallery-field/',
+ 'tutorial_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/gallery/gallery-tutorial/',
'category' => 'content',
'pro' => false,
),
'repeater' => array(
'name' => 'repeater',
'label' => __( 'Repeater', 'secure-custom-fields' ),
- 'doc_url' => 'https://www.advancedcustomfields.com/resources/repeater/',
+ 'doc_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/repeater/',
'preview_image' => acf_get_url() . '/assets/images/field-type-previews/field-preview-repeater.png',
'description' => __( 'This provides a solution for repeating content such as slides, team members, and call-to-action tiles, by acting as a parent to a set of subfields which can be repeated again and again.', 'secure-custom-fields' ),
- 'tutorial_url' => 'https://www.advancedcustomfields.com/resources/repeater/how-to-use-the-repeater-field/',
+ 'tutorial_url' => 'https://developer.wordpress.org/secure-custom-fields/features/fields/repeater/repeater-tutorial/',
'category' => 'layout',
'pro' => false,
),
diff --git a/includes/fields/class-acf-field-accordion.php b/includes/fields/class-acf-field-accordion.php
index 643be51c..e92f3f22 100644
--- a/includes/fields/class-acf-field-accordion.php
+++ b/includes/fields/class-acf-field-accordion.php
@@ -25,7 +25,8 @@ function initialize() {
$this->category = 'layout';
$this->description = __( 'Allows you to group and organize custom fields into collapsable panels that are shown while editing content. Useful for keeping large datasets tidy.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-accordion.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/accordion/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/accordion/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/accordion/accordion-tutorial/';
$this->supports = array(
'required' => false,
'bindings' => false,
diff --git a/includes/fields/class-acf-field-button-group.php b/includes/fields/class-acf-field-button-group.php
index 3f417b65..dabb004f 100644
--- a/includes/fields/class-acf-field-button-group.php
+++ b/includes/fields/class-acf-field-button-group.php
@@ -24,7 +24,8 @@ function initialize() {
$this->category = 'choice';
$this->description = __( 'A group of buttons with values that you specify, users can choose one option from the values provided.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-button-group.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/button-group/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/button-group/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/button-group/button-group-tutorial/';
$this->defaults = array(
'choices' => array(),
'default_value' => '',
diff --git a/includes/fields/class-acf-field-checkbox.php b/includes/fields/class-acf-field-checkbox.php
index c791a107..eaae8db8 100644
--- a/includes/fields/class-acf-field-checkbox.php
+++ b/includes/fields/class-acf-field-checkbox.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'choice';
$this->description = __( 'A group of checkbox inputs that allow the user to select one, or multiple values that you specify.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-checkbox.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/checkbox/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/checkbox/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/checkbox/checkbox-tutorial/';
$this->defaults = array(
'layout' => 'vertical',
'choices' => array(),
diff --git a/includes/fields/class-acf-field-clone.php b/includes/fields/class-acf-field-clone.php
index a9c096b4..1acdd1e1 100644
--- a/includes/fields/class-acf-field-clone.php
+++ b/includes/fields/class-acf-field-clone.php
@@ -35,8 +35,8 @@ public function initialize() {
$this->category = 'layout';
$this->description = __( 'Allows you to select and display existing fields. It does not duplicate any fields in the database, but loads and displays the selected fields at run-time. The Clone field can either replace itself with the selected fields or display the selected fields as a group of subfields.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-clone.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/clone/';
- $this->tutorial_url = 'https://www.advancedcustomfields.com/resources/how-to-use-the-clone-field/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/clone/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/clone/clone-tutorial/';
$this->pro = true;
$this->supports = array( 'bindings' => false );
$this->defaults = array(
diff --git a/includes/fields/class-acf-field-color_picker.php b/includes/fields/class-acf-field-color_picker.php
index c089fc99..98fd1e0f 100644
--- a/includes/fields/class-acf-field-color_picker.php
+++ b/includes/fields/class-acf-field-color_picker.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'advanced';
$this->description = __( 'An interactive UI for selecting a color, or specifying a Hex value.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-color-picker.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/color-picker/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/color-picker/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/color-picker/color-picker-tutorial/';
$this->defaults = array(
'default_value' => '',
'enable_opacity' => false,
diff --git a/includes/fields/class-acf-field-date_picker.php b/includes/fields/class-acf-field-date_picker.php
index 16936e42..2244e489 100644
--- a/includes/fields/class-acf-field-date_picker.php
+++ b/includes/fields/class-acf-field-date_picker.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'advanced';
$this->description = __( 'An interactive UI for picking a date. The date return format can be customized using the field settings.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-date-picker.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/date-picker/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/date-picker/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/date-picker/date-picker-tutorial/';
$this->defaults = array(
'display_format' => 'd/m/Y',
'return_format' => 'd/m/Y',
diff --git a/includes/fields/class-acf-field-date_time_picker.php b/includes/fields/class-acf-field-date_time_picker.php
index 6ef32733..91f5d4b2 100644
--- a/includes/fields/class-acf-field-date_time_picker.php
+++ b/includes/fields/class-acf-field-date_time_picker.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'advanced';
$this->description = __( 'An interactive UI for picking a date and time. The date return format can be customized using the field settings.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-date-time.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/date-time-picker/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/date-time-picker/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/date-time-picker/date-time-picker-tutorial/';
$this->defaults = array(
'display_format' => 'd/m/Y g:i a',
'return_format' => 'd/m/Y g:i a',
diff --git a/includes/fields/class-acf-field-email.php b/includes/fields/class-acf-field-email.php
index 7cfdac51..a8c427db 100644
--- a/includes/fields/class-acf-field-email.php
+++ b/includes/fields/class-acf-field-email.php
@@ -23,7 +23,8 @@ function initialize() {
$this->label = __( 'Email', 'secure-custom-fields' );
$this->description = __( 'A text input specifically designed for storing email addresses.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-email.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/email/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/email/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/email/email-tutorial/';
$this->defaults = array(
'default_value' => '',
'placeholder' => '',
diff --git a/includes/fields/class-acf-field-file.php b/includes/fields/class-acf-field-file.php
index fa65515d..8584fa0a 100644
--- a/includes/fields/class-acf-field-file.php
+++ b/includes/fields/class-acf-field-file.php
@@ -24,7 +24,8 @@ function initialize() {
$this->category = 'content';
$this->description = __( 'Uses the native WordPress media picker to upload, or choose files.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-file.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/file/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/file/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/file/file-tutorial/';
$this->defaults = array(
'return_format' => 'array',
'library' => 'all',
diff --git a/includes/fields/class-acf-field-flexible-content.php b/includes/fields/class-acf-field-flexible-content.php
index 15456b34..bb2df54e 100644
--- a/includes/fields/class-acf-field-flexible-content.php
+++ b/includes/fields/class-acf-field-flexible-content.php
@@ -30,8 +30,8 @@ public function initialize() {
$this->category = 'layout';
$this->description = __( 'Allows you to define, create and manage content with total control by creating layouts that contain subfields that content editors can choose from.', 'secure-custom-fields' ) . ' ' . __( 'We do not recommend using this field in ACF Blocks.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-flexible-content.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/flexible-content/';
- $this->tutorial_url = 'https://www.advancedcustomfields.com/resources/building-layouts-with-the-flexible-content-field-in-a-theme/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/flexible-content/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/flexible-content/flexible-content-tutorial/';
$this->pro = true;
$this->supports = array( 'bindings' => false );
$this->defaults = array(
diff --git a/includes/fields/class-acf-field-gallery.php b/includes/fields/class-acf-field-gallery.php
index aecdca91..7369b647 100644
--- a/includes/fields/class-acf-field-gallery.php
+++ b/includes/fields/class-acf-field-gallery.php
@@ -30,8 +30,8 @@ public function initialize() {
$this->category = 'content';
$this->description = __( 'An interactive interface for managing a collection of attachments, such as images.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-gallery.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/gallery/';
- $this->tutorial_url = 'https://www.advancedcustomfields.com/resources/how-to-use-the-gallery-field/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/gallery/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/gallery/gallery-tutorial/';
$this->pro = true;
$this->supports = array( 'bindings' => false );
$this->defaults = array(
diff --git a/includes/fields/class-acf-field-google-map.php b/includes/fields/class-acf-field-google-map.php
index be0df45f..55cd6d7b 100644
--- a/includes/fields/class-acf-field-google-map.php
+++ b/includes/fields/class-acf-field-google-map.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'advanced';
$this->description = __( 'An interactive UI for selecting a location using Google Maps. Requires a Google Maps API key and additional configuration to display correctly.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-google-map.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/google-map/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/google-map/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/google-map/google-map-tutorial/';
$this->defaults = array(
'height' => '',
'center_lat' => '',
diff --git a/includes/fields/class-acf-field-group.php b/includes/fields/class-acf-field-group.php
index 32635dd7..cd7ddb01 100644
--- a/includes/fields/class-acf-field-group.php
+++ b/includes/fields/class-acf-field-group.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'layout';
$this->description = __( 'Provides a way to structure fields into groups to better organize the data and the edit screen.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-group.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/group/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/group/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/group/group-tutorial/';
$this->supports = array(
'bindings' => false,
);
diff --git a/includes/fields/class-acf-field-icon_picker.php b/includes/fields/class-acf-field-icon_picker.php
index eba04328..014dbb01 100644
--- a/includes/fields/class-acf-field-icon_picker.php
+++ b/includes/fields/class-acf-field-icon_picker.php
@@ -25,7 +25,8 @@ public function initialize() {
$this->category = 'advanced';
$this->description = __( 'An interactive UI for selecting an icon. Select from Dashicons, the media library, or a standalone URL input.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-icon-picker.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/icon-picker/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/icon-picker/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/icon-picker/icon-picker-tutorial/';
$this->defaults = array(
'library' => 'all',
'tabs' => array_keys( $this->get_tabs() ),
@@ -244,7 +245,7 @@ public function render_field_settings( $field ) {
$return_format_doc = sprintf(
'%s',
- 'https://www.advancedcustomfields.com/resources/icon-picker/',
+ $this->doc_url,
__( 'Learn More', 'secure-custom-fields' )
);
diff --git a/includes/fields/class-acf-field-image.php b/includes/fields/class-acf-field-image.php
index 2113dd09..784e99e2 100644
--- a/includes/fields/class-acf-field-image.php
+++ b/includes/fields/class-acf-field-image.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'content';
$this->description = __( 'Uses the native WordPress media picker to upload, or choose images.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-image.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/image/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/image/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/image/image-tutorial/';
$this->defaults = array(
'return_format' => 'array',
'preview_size' => 'medium',
diff --git a/includes/fields/class-acf-field-link.php b/includes/fields/class-acf-field-link.php
index 3032f638..34744b46 100644
--- a/includes/fields/class-acf-field-link.php
+++ b/includes/fields/class-acf-field-link.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'relational';
$this->description = __( 'Allows you to specify a link and its properties such as title and target using the WordPress native link picker.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-link.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/link/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/link/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/link/link-tutorial/';
$this->defaults = array(
'return_format' => 'array',
);
diff --git a/includes/fields/class-acf-field-number.php b/includes/fields/class-acf-field-number.php
index c242d741..4bd62a5b 100644
--- a/includes/fields/class-acf-field-number.php
+++ b/includes/fields/class-acf-field-number.php
@@ -23,7 +23,8 @@ function initialize() {
$this->label = __( 'Number', 'secure-custom-fields' );
$this->description = __( 'An input limited to numerical values.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-number.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/number/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/number/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/number/number-tutorial/';
$this->defaults = array(
'default_value' => '',
'min' => '',
diff --git a/includes/fields/class-acf-field-oembed.php b/includes/fields/class-acf-field-oembed.php
index d2adeca7..af46e79a 100644
--- a/includes/fields/class-acf-field-oembed.php
+++ b/includes/fields/class-acf-field-oembed.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'content';
$this->description = __( 'An interactive component for embedding videos, images, tweets, audio and other content by making use of the native WordPress oEmbed functionality.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-oembed.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/oembed/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/oembed/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/oembed/oembed-tutorial/';
$this->defaults = array(
'width' => '',
'height' => '',
diff --git a/includes/fields/class-acf-field-page_link.php b/includes/fields/class-acf-field-page_link.php
index d96d2cfb..77ad1fe8 100644
--- a/includes/fields/class-acf-field-page_link.php
+++ b/includes/fields/class-acf-field-page_link.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'relational';
$this->description = __( 'An interactive dropdown to select one or more posts, pages, custom post type items or archive URLs, with the option to search.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-page-link.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/page-link/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/page-link/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/page-link/page-link-tutorial/';
$this->defaults = array(
'post_type' => array(),
'taxonomy' => array(),
diff --git a/includes/fields/class-acf-field-password.php b/includes/fields/class-acf-field-password.php
index e52f913b..c47d005b 100644
--- a/includes/fields/class-acf-field-password.php
+++ b/includes/fields/class-acf-field-password.php
@@ -22,7 +22,8 @@ function initialize() {
$this->label = __( 'Password', 'secure-custom-fields' );
$this->description = __( 'An input for providing a password using a masked field.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-password.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/password/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/password/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/password/password-tutorial/';
$this->defaults = array(
'placeholder' => '',
'prepend' => '',
diff --git a/includes/fields/class-acf-field-post_object.php b/includes/fields/class-acf-field-post_object.php
index 16856e63..b9dc1c51 100644
--- a/includes/fields/class-acf-field-post_object.php
+++ b/includes/fields/class-acf-field-post_object.php
@@ -17,7 +17,8 @@ public function initialize() {
$this->category = 'relational';
$this->description = __( 'An interactive and customizable UI for picking one or many posts, pages or post type items with the option to search. ', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-post-object.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/post-object/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/post-object/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/post-object/post-object-tutorial/';
$this->defaults = array(
'post_type' => array(),
'taxonomy' => array(),
diff --git a/includes/fields/class-acf-field-radio.php b/includes/fields/class-acf-field-radio.php
index 1733b384..96dcf641 100644
--- a/includes/fields/class-acf-field-radio.php
+++ b/includes/fields/class-acf-field-radio.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'choice';
$this->description = __( 'A group of radio button inputs that allows the user to make a single selection from values that you specify.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-radio-button.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/radio-button/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/radio/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/radio/radio-tutorial/';
$this->defaults = array(
'layout' => 'vertical',
'choices' => array(),
diff --git a/includes/fields/class-acf-field-range.php b/includes/fields/class-acf-field-range.php
index ef79d4ef..397381f1 100644
--- a/includes/fields/class-acf-field-range.php
+++ b/includes/fields/class-acf-field-range.php
@@ -22,7 +22,8 @@ function initialize() {
$this->label = __( 'Range', 'secure-custom-fields' );
$this->description = __( 'An input for selecting a numerical value within a specified range using a range slider element.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-range.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/range/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/range/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/range/range-tutorial/';
$this->defaults = array(
'default_value' => '',
'min' => '',
diff --git a/includes/fields/class-acf-field-relationship.php b/includes/fields/class-acf-field-relationship.php
index 9f59c911..aac6ff50 100644
--- a/includes/fields/class-acf-field-relationship.php
+++ b/includes/fields/class-acf-field-relationship.php
@@ -19,7 +19,8 @@ public function initialize() {
$this->category = 'relational';
$this->description = __( 'A dual-column interface to select one or more posts, pages, or custom post type items to create a relationship with the item that you\'re currently editing. Includes options to search and filter.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-relationship.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/relationship/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/relationship/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/relationship/relationship-tutorial/';
$this->defaults = array(
'post_type' => array(),
'taxonomy' => array(),
diff --git a/includes/fields/class-acf-field-repeater.php b/includes/fields/class-acf-field-repeater.php
index 3b43cb77..99bbfda5 100644
--- a/includes/fields/class-acf-field-repeater.php
+++ b/includes/fields/class-acf-field-repeater.php
@@ -37,8 +37,8 @@ public function initialize() {
$this->category = 'layout';
$this->description = __( 'Provides a solution for repeating content such as slides, team members, and call-to-action tiles, by acting as a parent to a set of subfields which can be repeated again and again.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-repeater.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/repeater/';
- $this->tutorial_url = 'https://www.advancedcustomfields.com/resources/repeater/how-to-use-the-repeater-field/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/repeater/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/repeater/repeater-tutorial/';
$this->pro = true;
$this->supports = array( 'bindings' => false );
$this->defaults = array(
diff --git a/includes/fields/class-acf-field-select.php b/includes/fields/class-acf-field-select.php
index 957efa49..fb559372 100644
--- a/includes/fields/class-acf-field-select.php
+++ b/includes/fields/class-acf-field-select.php
@@ -24,7 +24,8 @@ function initialize() {
$this->category = 'choice';
$this->description = __( 'A dropdown list with a selection of choices that you specify.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-select.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/select/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/select/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/select/select-tutorial/';
$this->defaults = array(
'multiple' => 0,
'allow_null' => 0,
diff --git a/includes/fields/class-acf-field-tab.php b/includes/fields/class-acf-field-tab.php
index 777f696b..ea6cf760 100644
--- a/includes/fields/class-acf-field-tab.php
+++ b/includes/fields/class-acf-field-tab.php
@@ -24,7 +24,8 @@ function initialize() {
$this->category = 'layout';
$this->description = __( 'Allows you to group fields into tabbed sections in the edit screen. Useful for keeping fields organized and structured.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-tabs.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/tab/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/tab/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/tab/tab-tutorial/';
$this->supports = array(
'required' => false,
'bindings' => false,
diff --git a/includes/fields/class-acf-field-taxonomy.php b/includes/fields/class-acf-field-taxonomy.php
index fcbadd71..a65142eb 100644
--- a/includes/fields/class-acf-field-taxonomy.php
+++ b/includes/fields/class-acf-field-taxonomy.php
@@ -22,7 +22,8 @@ public function initialize() {
$this->category = 'relational';
$this->description = __( 'Allows the selection of one or more taxonomy terms based on the criteria and options specified in the fields settings.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-taxonomy.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/taxonomy/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/taxonomy/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/taxonomy/taxonomy-tutorial/';
$this->defaults = array(
'taxonomy' => 'category',
'field_type' => 'checkbox',
diff --git a/includes/fields/class-acf-field-text.php b/includes/fields/class-acf-field-text.php
index 75318424..fab5a2dd 100644
--- a/includes/fields/class-acf-field-text.php
+++ b/includes/fields/class-acf-field-text.php
@@ -23,7 +23,8 @@ function initialize() {
$this->label = __( 'Text', 'secure-custom-fields' );
$this->description = __( 'A basic text input, useful for storing single string values.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-text.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/text/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/text/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/text/text-tutorial/';
$this->defaults = array(
'default_value' => '',
'maxlength' => '',
diff --git a/includes/fields/class-acf-field-textarea.php b/includes/fields/class-acf-field-textarea.php
index a37ff6bb..9add736f 100644
--- a/includes/fields/class-acf-field-textarea.php
+++ b/includes/fields/class-acf-field-textarea.php
@@ -23,7 +23,8 @@ function initialize() {
$this->label = __( 'Text Area', 'secure-custom-fields' );
$this->description = __( 'A basic textarea input for storing paragraphs of text.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-textarea.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/textarea/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/textarea/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/textarea/textarea-tutorial/';
$this->defaults = array(
'default_value' => '',
'new_lines' => '',
diff --git a/includes/fields/class-acf-field-time_picker.php b/includes/fields/class-acf-field-time_picker.php
index e2d54888..ba1c4a6a 100644
--- a/includes/fields/class-acf-field-time_picker.php
+++ b/includes/fields/class-acf-field-time_picker.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'advanced';
$this->description = __( 'An interactive UI for picking a time. The time format can be customized using the field settings.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-time.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/time-picker/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/time-picker/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/time-picker/time-picker-tutorial/';
$this->defaults = array(
'display_format' => 'g:i a',
'return_format' => 'g:i a',
diff --git a/includes/fields/class-acf-field-true_false.php b/includes/fields/class-acf-field-true_false.php
index ac7f2672..d0551209 100644
--- a/includes/fields/class-acf-field-true_false.php
+++ b/includes/fields/class-acf-field-true_false.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'choice';
$this->description = __( 'A toggle that allows you to pick a value of 1 or 0 (on or off, true or false, etc). Can be presented as a stylized switch or checkbox.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-true-false.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/true-false/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/true-false/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/true-false/true-false-tutorial/';
$this->defaults = array(
'default_value' => 0,
'message' => '',
diff --git a/includes/fields/class-acf-field-url.php b/includes/fields/class-acf-field-url.php
index e13a7473..a33fbcd3 100644
--- a/includes/fields/class-acf-field-url.php
+++ b/includes/fields/class-acf-field-url.php
@@ -19,7 +19,8 @@ public function initialize() {
$this->label = __( 'URL', 'secure-custom-fields' );
$this->description = __( 'A text input specifically designed for storing web addresses.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-url.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/url/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/url/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/url/url-tutorial/';
$this->defaults = array(
'default_value' => '',
'placeholder' => '',
diff --git a/includes/fields/class-acf-field-user.php b/includes/fields/class-acf-field-user.php
index f66456bc..ee4cf1bc 100644
--- a/includes/fields/class-acf-field-user.php
+++ b/includes/fields/class-acf-field-user.php
@@ -17,7 +17,8 @@ function initialize() {
$this->category = 'relational';
$this->description = __( 'Allows the selection of one or more users which can be used to create relationships between data objects.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-user.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/user/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/user/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/user/user-tutorial/';
$this->defaults = array(
'role' => '',
'multiple' => 0,
diff --git a/includes/fields/class-acf-field-wysiwyg.php b/includes/fields/class-acf-field-wysiwyg.php
index dedc6145..34583dd1 100644
--- a/includes/fields/class-acf-field-wysiwyg.php
+++ b/includes/fields/class-acf-field-wysiwyg.php
@@ -23,7 +23,8 @@ function initialize() {
$this->category = 'content';
$this->description = __( 'Displays the WordPress WYSIWYG editor as seen in Posts and Pages allowing for a rich text-editing experience that also allows for multimedia content.', 'secure-custom-fields' ) . ' ' . __( 'We do not recommend using this field in ACF Blocks.', 'secure-custom-fields' );
$this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-wysiwyg.png';
- $this->doc_url = 'https://www.advancedcustomfields.com/resources/wysiwyg-editor/';
+ $this->doc_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/wysiwyg/';
+ $this->tutorial_url = 'https://developer.wordpress.org/secure-custom-fields/features/fields/wysiwyg/wysiwyg-tutorial/';
$this->defaults = array(
'tabs' => 'all',
'toolbar' => 'full',
diff --git a/package-lock.json b/package-lock.json
index 591b66eb..ea2481af 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.0",
"husky": "^9.0.11",
+ "markdownlint-cli": "^0.39.0",
"mini-css-extract-plugin": "^2.9.1",
"sass": "^1.79.5",
"sass-loader": "^16.0.2",
@@ -1585,6 +1586,24 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@jest/schemas": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
@@ -2015,6 +2034,17 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -2358,6 +2388,19 @@
"ajv": "^8.8.2"
}
},
+ "node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -2370,6 +2413,13 @@
"node": ">=4"
}
},
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
"node_modules/babel-loader": {
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz",
@@ -2426,12 +2476,29 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
@@ -2955,6 +3022,16 @@
}
}
},
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
@@ -3022,12 +3099,26 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/electron-to-chromium": {
"version": "1.5.40",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.40.tgz",
"integrity": "sha512-LYm78o6if4zTasnYclgQzxEcgMoIcybWOhkATWepN95uwVVWV0/IW10v+2sIeHE+bIYWipLneTftVyQm45UY7g==",
"dev": true
},
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/enhanced-resolve": {
"version": "5.17.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
@@ -3230,6 +3321,23 @@
"flat": "cli.js"
}
},
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -3248,6 +3356,42 @@
"node": ">=6.9.0"
}
},
+ "node_modules/get-stdin": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
+ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.3.16",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz",
+ "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.1",
+ "minipass": "^7.0.4",
+ "path-scurry": "^1.11.0"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/glob-to-regexp": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
@@ -3318,6 +3462,16 @@
"postcss": "^8.1.0"
}
},
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
"node_modules/immutable": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
@@ -3416,6 +3570,16 @@
"node": ">=8"
}
},
+ "node_modules/ini": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+ "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
"node_modules/interpret": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
@@ -3454,6 +3618,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -3502,6 +3676,22 @@
"node": ">=0.10.0"
}
},
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jest-util": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
@@ -3634,6 +3824,19 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
"node_modules/jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
@@ -3670,6 +3873,13 @@
"node": ">=6"
}
},
+ "node_modules/jsonc-parser": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -3691,6 +3901,16 @@
"url": "https://github.com/sponsors/antonk52"
}
},
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
"node_modules/loader-runner": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
@@ -3742,6 +3962,88 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/markdown-it": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz",
+ "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.0.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
+ "node_modules/markdownlint": {
+ "version": "0.33.0",
+ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.33.0.tgz",
+ "integrity": "sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "markdown-it": "14.0.0",
+ "markdownlint-micromark": "0.1.8"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/DavidAnson"
+ }
+ },
+ "node_modules/markdownlint-cli": {
+ "version": "0.39.0",
+ "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.39.0.tgz",
+ "integrity": "sha512-ZuFN7Xpsbn1Nbp0YYkeLOfXOMOfLQBik2lKRy8pVI/llmKQ2uW7x+8k5OMgF6o7XCsTDSYC/OOmeJ+3qplvnJQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "~11.1.0",
+ "get-stdin": "~9.0.0",
+ "glob": "~10.3.10",
+ "ignore": "~5.3.0",
+ "js-yaml": "^4.1.0",
+ "jsonc-parser": "~3.2.1",
+ "markdownlint": "~0.33.0",
+ "minimatch": "~9.0.3",
+ "run-con": "~1.3.2"
+ },
+ "bin": {
+ "markdownlint": "markdownlint.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/markdownlint-cli/node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/markdownlint-micromark": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.8.tgz",
+ "integrity": "sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/DavidAnson"
+ }
+ },
"node_modules/md5": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -3758,6 +4060,13 @@
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -3818,6 +4127,42 @@
"webpack": "^5.0.0"
}
},
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -3936,6 +4281,30 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4495,6 +4864,16 @@
"node": ">=6"
}
},
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -4644,6 +5023,22 @@
"node": ">=8"
}
},
+ "node_modules/run-con": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz",
+ "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==",
+ "dev": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~4.1.0",
+ "minimist": "^1.2.8",
+ "strip-json-comments": "~3.1.1"
+ },
+ "bin": {
+ "run-con": "cli.js"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -4792,6 +5187,19 @@
"node": ">=8"
}
},
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -4820,6 +5228,123 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/stylehacks": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz",
@@ -5060,6 +5585,13 @@
"node": ">=8.0"
}
},
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -5364,6 +5896,137 @@
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
"dev": true
},
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
diff --git a/package.json b/package.json
index 4f85f106..e327c846 100644
--- a/package.json
+++ b/package.json
@@ -13,13 +13,16 @@
"terser-webpack-plugin": "^5.3.10",
"webpack": "^5.95.0",
"webpack-cli": "^5.1.4",
- "webpack-fix-style-only-entries": "^0.6.1"
+ "webpack-fix-style-only-entries": "^0.6.1",
+ "markdownlint-cli": "^0.39.0"
},
"scripts": {
"build": "webpack",
"watch": "webpack --watch",
"clean": "rm -rf assets/build/js/*.js assets/build/css/*.css assets/build/js/*.map assets/build/css/*.map assets/build/css/*.js",
- "prepare": "husky"
+ "prepare": "husky",
+ "lint:md": "markdownlint 'docs/**/*.md' --config .markdownlint.json",
+ "fix:md": "markdownlint 'docs/**/*.md' --config .markdownlint.json --fix"
},
"dependencies": {
"md5": "^2.3.0"
diff --git a/readme.txt b/readme.txt
index 40ef08ef..765ff9d4 100644
--- a/readme.txt
+++ b/readme.txt
@@ -31,6 +31,8 @@ The field interface aligns with WordPress’s native design, creating an experie
Installing this plugin will deactivate plugins with matching function names/functionality, specifically Advanced Custom Fields, Advanced Custom Fields Pro, and the legacy Secure Custom Fields plugins, to avoid code errors.
+Read more about Secure Custom Fields at [developer.wordpress.org/secure-custom-fields](https://developer.wordpress.org/secure-custom-fields/).
+
= Features =
* Clear and easy-to-use setup
* Robust functions for content management
diff --git a/secure-custom-fields.php b/secure-custom-fields.php
index e841d5ac..ee186954 100644
--- a/secure-custom-fields.php
+++ b/secure-custom-fields.php
@@ -4,7 +4,7 @@
* Secure Custom Fields
*
* Plugin Name: Secure Custom Fields
- * Plugin URI: http://wordpress.org/plugins/secure-custom-fields/
+ * Plugin URI: https://developer.wordpress.org/secure-custom-fields/
* Description: Secure Custom Fields (SCF) offers an intuitive way for developers to enhance WordPress content management by adding extra fields and options without coding requirements.
* Version: 6.4.1-beta6
* Author: WordPress.org