├── .github └── workflows │ ├── e2e.yml │ ├── phpcs.yml │ ├── phpstan.yml │ └── phpunit.yml ├── .gitignore ├── .husky ├── pre-commit └── pre-commit-phpcbf.sh ├── .markdownlint.json ├── .nvmrc ├── .phpcs.xml.dist ├── .prettierrc.js ├── .wordpress-org ├── banner-1544x500.jpg ├── banner-772x250.jpg ├── blueprints │ └── blueprint.json ├── icon-128x128.png ├── icon-256x256.png ├── icon.svg ├── screenshot-1.png ├── screenshot-2.png ├── screenshot-3.png └── screenshot-4.png ├── .wp-env.json ├── README.md ├── SECURITY.md ├── acf.php ├── assets ├── build │ ├── css │ │ ├── index.php │ │ └── pro │ │ │ └── index.php │ ├── index.php │ └── js │ │ ├── index.php │ │ └── pro │ │ └── index.php ├── images │ ├── empty-group.svg │ ├── empty-post-types.svg │ ├── empty-taxonomies.svg │ ├── face-sad.svg │ ├── field-preview-grid.png │ ├── field-states │ │ ├── checkbox-active.svg │ │ ├── checkbox-indeterminate.svg │ │ ├── index.php │ │ └── radio-active.svg │ ├── field-type-icons │ │ ├── icon-field-accordion.svg │ │ ├── icon-field-button-group.svg │ │ ├── icon-field-checkbox.svg │ │ ├── icon-field-clone.svg │ │ ├── icon-field-color-picker.svg │ │ ├── icon-field-date-picker.svg │ │ ├── icon-field-date-time-picker.svg │ │ ├── icon-field-default.svg │ │ ├── icon-field-email.svg │ │ ├── icon-field-file.svg │ │ ├── icon-field-flexible-content.svg │ │ ├── icon-field-gallery.svg │ │ ├── icon-field-google-map.svg │ │ ├── icon-field-group.svg │ │ ├── icon-field-icon-picker.svg │ │ ├── icon-field-image.svg │ │ ├── icon-field-link.svg │ │ ├── icon-field-message.svg │ │ ├── icon-field-number.svg │ │ ├── icon-field-oembed.svg │ │ ├── icon-field-page-link.svg │ │ ├── icon-field-password.svg │ │ ├── icon-field-post-object.svg │ │ ├── icon-field-radio.svg │ │ ├── icon-field-range.svg │ │ ├── icon-field-relationship.svg │ │ ├── icon-field-repeater.svg │ │ ├── icon-field-select.svg │ │ ├── icon-field-tab.svg │ │ ├── icon-field-taxonomy.svg │ │ ├── icon-field-text.svg │ │ ├── icon-field-textarea.svg │ │ ├── icon-field-time-picker.svg │ │ ├── icon-field-true-false.svg │ │ ├── icon-field-url.svg │ │ ├── icon-field-user.svg │ │ ├── icon-field-wysiwyg.svg │ │ └── index.php │ ├── field-type-previews │ │ ├── field-preview-accordion.png │ │ ├── field-preview-button-group.png │ │ ├── field-preview-checkbox.png │ │ ├── field-preview-clone.png │ │ ├── field-preview-color-picker.png │ │ ├── field-preview-date-picker.png │ │ ├── field-preview-date-time.png │ │ ├── field-preview-email.png │ │ ├── field-preview-file.png │ │ ├── field-preview-flexible-content.png │ │ ├── field-preview-gallery.png │ │ ├── field-preview-google-map.png │ │ ├── field-preview-group.png │ │ ├── field-preview-icon-picker.png │ │ ├── field-preview-image.png │ │ ├── field-preview-link.png │ │ ├── field-preview-message.png │ │ ├── field-preview-number.png │ │ ├── field-preview-oembed.png │ │ ├── field-preview-page-link.png │ │ ├── field-preview-password.png │ │ ├── field-preview-post-object.png │ │ ├── field-preview-radio-button.png │ │ ├── field-preview-range.png │ │ ├── field-preview-relationship.png │ │ ├── field-preview-repeater.png │ │ ├── field-preview-select.png │ │ ├── field-preview-tabs.png │ │ ├── field-preview-taxonomy.png │ │ ├── field-preview-text.png │ │ ├── field-preview-textarea.png │ │ ├── field-preview-time.png │ │ ├── field-preview-true-false.png │ │ ├── field-preview-url.png │ │ ├── field-preview-user.png │ │ ├── field-preview-wysiwyg.png │ │ └── index.php │ ├── icons │ │ ├── icon-add.svg │ │ ├── icon-alert-triangle.svg │ │ ├── icon-arrow-left.svg │ │ ├── icon-arrow-right.svg │ │ ├── icon-arrow-up-right.svg │ │ ├── icon-check-circle-solid.svg │ │ ├── icon-check.svg │ │ ├── icon-chevron-down.svg │ │ ├── icon-chevron-left-double.svg │ │ ├── icon-chevron-left.svg │ │ ├── icon-chevron-right-double.svg │ │ ├── icon-chevron-right.svg │ │ ├── icon-chevron-up.svg │ │ ├── icon-close-circle.svg │ │ ├── icon-close.svg │ │ ├── icon-copy.svg │ │ ├── icon-document.svg │ │ ├── icon-dots-grid.svg │ │ ├── icon-draggable.svg │ │ ├── icon-export.svg │ │ ├── icon-extended-menu.svg │ │ ├── icon-field-groups.svg │ │ ├── icon-fields.svg │ │ ├── icon-globe.svg │ │ ├── icon-help.svg │ │ ├── icon-hidden.svg │ │ ├── icon-import.svg │ │ ├── icon-info-red.svg │ │ ├── icon-info-solid.svg │ │ ├── icon-info-white.svg │ │ ├── icon-info.svg │ │ ├── icon-key-solid.svg │ │ ├── icon-layout.svg │ │ ├── icon-lock.svg │ │ ├── icon-play.svg │ │ ├── icon-post-type.svg │ │ ├── icon-regenerate.svg │ │ ├── icon-search.svg │ │ ├── icon-settings.svg │ │ ├── icon-sliders.svg │ │ ├── icon-stars.svg │ │ ├── icon-taxonomies.svg │ │ ├── icon-time.svg │ │ ├── icon-tools.svg │ │ ├── icon-trash.svg │ │ ├── icon-updates.svg │ │ ├── icon-warning-alt-red.svg │ │ ├── icon-warning-alt.svg │ │ ├── icon-warning.svg │ │ └── index.php │ ├── index.php │ ├── scf-logo.svg │ ├── spinner │ └── spinner.gif ├── inc │ ├── color-picker-alpha │ │ ├── index.php │ │ ├── wp-color-picker-alpha.js │ │ └── wp-color-picker-alpha.min.js │ ├── datepicker │ │ ├── images │ │ │ ├── index.php │ │ │ ├── ui-bg_highlight-soft_0_ffffff_1x100.png │ │ │ ├── ui-icons_444444_256x240.png │ │ │ ├── ui-icons_DDDDDD_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ ├── index.php │ │ ├── jquery-ui.css │ │ └── jquery-ui.min.css │ ├── index.php │ ├── select2 │ │ ├── 3 │ │ │ ├── index.php │ │ │ ├── select2-spinner.gif │ │ │ ├── select2.css │ │ │ ├── select2.js │ │ │ ├── select2.min.js │ │ │ ├── select2.png │ │ │ └── select2x2.png │ │ ├── 4 │ │ │ ├── index.php │ │ │ ├── select2.css │ │ │ ├── select2.full.js │ │ │ ├── select2.full.min.js │ │ │ ├── select2.js │ │ │ ├── select2.min.css │ │ │ └── select2.min.js │ │ └── index.php │ └── timepicker │ │ ├── index.php │ │ ├── jquery-ui-timepicker-addon.css │ │ ├── jquery-ui-timepicker-addon.js │ │ ├── jquery-ui-timepicker-addon.min.css │ │ └── jquery-ui-timepicker-addon.min.js └── src │ ├── js │ ├── _acf-compatibility.js │ ├── _acf-condition-types.js │ ├── _acf-condition.js │ ├── _acf-conditions.js │ ├── _acf-field-accordion.js │ ├── _acf-field-button-group.js │ ├── _acf-field-checkbox.js │ ├── _acf-field-color-picker.js │ ├── _acf-field-date-picker.js │ ├── _acf-field-date-time-picker.js │ ├── _acf-field-file.js │ ├── _acf-field-google-map.js │ ├── _acf-field-icon-picker.js │ ├── _acf-field-image.js │ ├── _acf-field-link.js │ ├── _acf-field-oembed.js │ ├── _acf-field-page-link.js │ ├── _acf-field-post-object.js │ ├── _acf-field-radio.js │ ├── _acf-field-range.js │ ├── _acf-field-relationship.js │ ├── _acf-field-select.js │ ├── _acf-field-tab.js │ ├── _acf-field-taxonomy.js │ ├── _acf-field-time-picker.js │ ├── _acf-field-true-false.js │ ├── _acf-field-url.js │ ├── _acf-field-user.js │ ├── _acf-field-wysiwyg.js │ ├── _acf-field.js │ ├── _acf-fields.js │ ├── _acf-helpers.js │ ├── _acf-hooks.js │ ├── _acf-internal-post-type.js │ ├── _acf-media.js │ ├── _acf-modal.js │ ├── _acf-model.js │ ├── _acf-notice.js │ ├── _acf-panel.js │ ├── _acf-popup.js │ ├── _acf-postbox.js │ ├── _acf-screen.js │ ├── _acf-select2.js │ ├── _acf-tinymce.js │ ├── _acf-tooltip.js │ ├── _acf-unload.js │ ├── _acf-validation.js │ ├── _acf.js │ ├── _browse-fields-modal.js │ ├── _field-group-compatibility.js │ ├── _field-group-conditions.js │ ├── _field-group-field.js │ ├── _field-group-fields.js │ ├── _field-group-locations.js │ ├── _field-group-settings.js │ ├── _field-group.js │ ├── acf-escaped-html-notice.js │ ├── acf-field-group.js │ ├── acf-input.js │ ├── acf-internal-post-type.js │ ├── acf.js │ ├── commands │ │ ├── admin-commands.js │ │ └── custom-post-type-commands.js │ └── pro │ │ ├── _acf-blocks.js │ │ ├── _acf-field-flexible-content.js │ │ ├── _acf-field-gallery.js │ │ ├── _acf-field-repeater.js │ │ ├── _acf-jsx-names.js │ │ ├── _acf-setting-clone.js │ │ ├── _acf-setting-flexible-content.js │ │ ├── _acf-setting-repeater.js │ │ ├── _acf-ui-options-page.js │ │ ├── acf-pro-blocks.js │ │ ├── acf-pro-field-group.js │ │ ├── acf-pro-input.js │ │ └── acf-pro-ui-options-page.js │ └── sass │ ├── _acf-headerbar.scss │ ├── _acf-icon-picker.scss │ ├── _admin-inputs.scss │ ├── _admin-toolbar.scss │ ├── _btn.scss │ ├── _dark.scss │ ├── _edit-field-group.scss │ ├── _field-group.scss │ ├── _field-picker.scss │ ├── _field-type-icons.scss │ ├── _fields.scss │ ├── _forms.scss │ ├── _global.scss │ ├── _icons.scss │ ├── _input.scss │ ├── _list-table.scss │ ├── _media.scss │ ├── _mixins.scss │ ├── _post-types-taxonomies.scss │ ├── _postbox.scss │ ├── _pro-upgrade.scss │ ├── _sub-field-groups.scss │ ├── _tools.scss │ ├── _typography.scss │ ├── _updates.scss │ ├── _variables.scss │ ├── acf-dark.scss │ ├── acf-field-group.scss │ ├── acf-global.scss │ ├── acf-input.scss │ └── pro │ ├── _blocks.scss │ ├── _field-group.scss │ ├── _fields.scss │ ├── acf-pro-field-group.scss │ └── acf-pro-input.scss ├── bin ├── baseline.neon ├── phpstan-bootstrap.php ├── prepare-release.php └── update-translations.php ├── composer.json ├── composer.lock ├── docs ├── bin │ ├── generate-manifest.php │ ├── generate-parsed-md.php │ ├── manifest.json │ └── update-markdown-links.php ├── code-reference │ ├── META.md │ ├── acf-bidirectional-functions-file.md │ ├── acf-field-functions-file.md │ ├── acf-field-group-functions-file.md │ ├── acf-form-functions-file.md │ ├── acf-helper-functions-file.md │ ├── acf-hook-functions-file.md │ ├── acf-input-functions-file.md │ ├── acf-internal-post-type-functions-file.md │ ├── acf-meta-functions-file.md │ ├── acf-post-functions-file.md │ ├── acf-post-type-functions-file.md │ ├── acf-taxonomy-functions-file.md │ ├── acf-user-functions-file.md │ ├── acf-utility-functions-file.md │ ├── acf-value-functions-file.md │ ├── acf-wp-functions-file.md │ ├── admin │ │ ├── admin-notices-file.md │ │ ├── admin-tools-file.md │ │ ├── index.md │ │ └── views │ │ │ └── global │ │ │ ├── index.md │ │ │ └── navigation-file.md │ ├── api │ │ ├── api-helpers-file.md │ │ ├── api-template-file.md │ │ ├── api-term-file.md │ │ └── index.md │ ├── assets-file.md │ ├── blocks-file.md │ ├── compatibility-file.md │ ├── deprecated-file.md │ ├── fields-file.md │ ├── fields │ │ ├── class-acf-repeater-table-file.md │ │ └── index.md │ ├── forms │ │ ├── form-front-file.md │ │ └── index.md │ ├── hooks │ │ └── index.md │ ├── index.md │ ├── l10n-file.md │ ├── local-fields-file.md │ ├── local-json-file.md │ ├── local-meta-file.md │ ├── locations-file.md │ ├── loop-file.md │ ├── rest-api │ │ ├── acf-rest-api-functions-file.md │ │ ├── class-acf-rest-api-file.md │ │ ├── class-acf-rest-embed-links-file.md │ │ ├── class-acf-rest-request-file.md │ │ └── index.md │ ├── revisions-file.md │ ├── scf-ui-options-page-functions-file.md │ ├── upgrades-file.md │ └── validation-file.md ├── concepts │ ├── architecture.md │ ├── index.md │ └── security.md ├── contributing │ ├── documentation.md │ └── index.md ├── features │ ├── field │ │ ├── META.md │ │ ├── accordion │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── button-group │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── checkbox │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── clone │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── color-picker │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── date-picker │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── date-time-picker │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── email │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── file │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── flexible-content │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── gallery │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── google-map │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── group │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── icon-picker │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── image │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── index.md │ │ ├── link │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── message │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── nav_menu │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── number │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── oembed │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── page-link │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── password │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── post-object │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── radio │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── range │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── repeater │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── select │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── separator │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── tab │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── taxonomy │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── text │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── textarea │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── time-picker │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── true-false │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── url │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ ├── user │ │ │ ├── index.md │ │ │ └── tutorial.md │ │ └── wysiwyg │ │ │ ├── index.md │ │ │ └── tutorial.md │ ├── index.md │ ├── post-types.md │ └── scf-api.md ├── tutorials │ ├── first-post-type.md │ └── index.md └── welcome │ ├── index.md │ ├── installation.md │ └── quick-start.md ├── includes ├── Blocks │ └── Bindings.php ├── Meta │ ├── Comment.php │ ├── MetaLocation.php │ ├── Option.php │ ├── Post.php │ ├── Term.php │ ├── User.php │ └── WooOrder.php ├── acf-bidirectional-functions.php ├── acf-field-functions.php ├── acf-field-group-functions.php ├── acf-form-functions.php ├── acf-helper-functions.php ├── acf-hook-functions.php ├── acf-input-functions.php ├── acf-internal-post-type-functions.php ├── acf-meta-functions.php ├── acf-post-functions.php ├── acf-post-type-functions.php ├── acf-taxonomy-functions.php ├── acf-user-functions.php ├── acf-utility-functions.php ├── acf-value-functions.php ├── acf-wp-functions.php ├── admin │ ├── admin-commands.php │ ├── admin-internal-post-type-list.php │ ├── admin-internal-post-type.php │ ├── admin-notices.php │ ├── admin-tools.php │ ├── admin-upgrade.php │ ├── admin.php │ ├── beta-features.php │ ├── beta-features │ │ ├── class-scf-beta-feature-editor-sidebar.php │ │ ├── class-scf-beta-feature.php │ │ └── index.php │ ├── class-acf-admin-options-page.php │ ├── index.php │ ├── post-types │ │ ├── admin-field-group.php │ │ ├── admin-field-groups.php │ │ ├── admin-post-type.php │ │ ├── admin-post-types.php │ │ ├── admin-taxonomies.php │ │ ├── admin-taxonomy.php │ │ ├── class-acf-admin-ui-options-page.php │ │ ├── class-acf-admin-ui-options-pages.php │ │ └── index.php │ ├── tools │ │ ├── class-acf-admin-tool-export.php │ │ ├── class-acf-admin-tool-import.php │ │ ├── class-acf-admin-tool.php │ │ └── index.php │ └── views │ │ ├── acf-field-group │ │ ├── conditional-logic.php │ │ ├── field.php │ │ ├── fields.php │ │ ├── index.php │ │ ├── list-empty.php │ │ ├── location-group.php │ │ ├── location-rule.php │ │ ├── locations.php │ │ └── options.php │ │ ├── acf-post-type │ │ ├── advanced-settings.php │ │ ├── basic-settings.php │ │ ├── index.php │ │ └── list-empty.php │ │ ├── acf-taxonomy │ │ ├── advanced-settings.php │ │ ├── basic-settings.php │ │ ├── index.php │ │ └── list-empty.php │ │ ├── acf-ui-options-page │ │ ├── advanced-settings.php │ │ ├── basic-settings.php │ │ ├── create-options-page-modal.php │ │ └── list-empty.php │ │ ├── beta-features │ │ └── beta-features.php │ │ ├── browse-fields-modal.php │ │ ├── escaped-html-notice.php │ │ ├── global │ │ ├── form-top.php │ │ ├── header.php │ │ ├── index.php │ │ └── navigation.php │ │ ├── html-options-page.php │ │ ├── index.php │ │ ├── tools │ │ ├── index.php │ │ └── tools.php │ │ └── upgrade │ │ ├── index.php │ │ ├── network.php │ │ ├── notice.php │ │ └── upgrade.php ├── ajax │ ├── class-acf-ajax-check-screen.php │ ├── class-acf-ajax-local-json-diff.php │ ├── class-acf-ajax-query-users.php │ ├── class-acf-ajax-query.php │ ├── class-acf-ajax-upgrade.php │ ├── class-acf-ajax-user-setting.php │ ├── class-acf-ajax.php │ └── index.php ├── api │ ├── api-helpers.php │ ├── api-template.php │ ├── api-term.php │ └── index.php ├── assets.php ├── blocks.php ├── class-acf-data.php ├── class-acf-internal-post-type.php ├── class-acf-options-page.php ├── class-acf-site-health.php ├── compatibility.php ├── deprecated.php ├── fields.php ├── fields │ ├── class-acf-field-accordion.php │ ├── class-acf-field-button-group.php │ ├── class-acf-field-checkbox.php │ ├── class-acf-field-clone.php │ ├── class-acf-field-color_picker.php │ ├── class-acf-field-date_picker.php │ ├── class-acf-field-date_time_picker.php │ ├── class-acf-field-email.php │ ├── class-acf-field-file.php │ ├── class-acf-field-flexible-content.php │ ├── class-acf-field-gallery.php │ ├── class-acf-field-google-map.php │ ├── class-acf-field-group.php │ ├── class-acf-field-icon_picker.php │ ├── class-acf-field-image.php │ ├── class-acf-field-link.php │ ├── class-acf-field-message.php │ ├── class-acf-field-nav-menu.php │ ├── class-acf-field-number.php │ ├── class-acf-field-oembed.php │ ├── class-acf-field-output.php │ ├── class-acf-field-page_link.php │ ├── class-acf-field-password.php │ ├── class-acf-field-post_object.php │ ├── class-acf-field-radio.php │ ├── class-acf-field-range.php │ ├── class-acf-field-relationship.php │ ├── class-acf-field-repeater.php │ ├── class-acf-field-select.php │ ├── class-acf-field-separator.php │ ├── class-acf-field-tab.php │ ├── class-acf-field-taxonomy.php │ ├── class-acf-field-text.php │ ├── class-acf-field-textarea.php │ ├── class-acf-field-time_picker.php │ ├── class-acf-field-true_false.php │ ├── class-acf-field-url.php │ ├── class-acf-field-user.php │ ├── class-acf-field-wysiwyg.php │ ├── class-acf-field.php │ ├── class-acf-repeater-table.php │ └── index.php ├── forms │ ├── WC_Order.php │ ├── form-attachment.php │ ├── form-comment.php │ ├── form-customizer.php │ ├── form-front.php │ ├── form-gutenberg.php │ ├── form-nav-menu.php │ ├── form-post.php │ ├── form-taxonomy.php │ ├── form-user.php │ ├── form-widget.php │ └── index.php ├── index.php ├── l10n.php ├── legacy │ ├── index.php │ └── legacy-locations.php ├── local-fields.php ├── local-json.php ├── local-meta.php ├── locations.php ├── locations │ ├── abstract-acf-legacy-location.php │ ├── abstract-acf-location.php │ ├── class-acf-location-attachment.php │ ├── class-acf-location-block.php │ ├── class-acf-location-comment.php │ ├── class-acf-location-current-user-role.php │ ├── class-acf-location-current-user.php │ ├── class-acf-location-nav-menu-item.php │ ├── class-acf-location-nav-menu.php │ ├── class-acf-location-options-page.php │ ├── class-acf-location-page-parent.php │ ├── class-acf-location-page-template.php │ ├── class-acf-location-page-type.php │ ├── class-acf-location-page.php │ ├── class-acf-location-post-category.php │ ├── class-acf-location-post-format.php │ ├── class-acf-location-post-status.php │ ├── class-acf-location-post-taxonomy.php │ ├── class-acf-location-post-template.php │ ├── class-acf-location-post-type.php │ ├── class-acf-location-post.php │ ├── class-acf-location-taxonomy.php │ ├── class-acf-location-user-form.php │ ├── class-acf-location-user-role.php │ ├── class-acf-location-widget.php │ └── index.php ├── loop.php ├── media.php ├── post-types │ ├── class-acf-field-group.php │ ├── class-acf-post-type.php │ ├── class-acf-taxonomy.php │ ├── class-acf-ui-options-page.php │ └── index.php ├── rest-api.php ├── rest-api │ ├── acf-rest-api-functions.php │ ├── class-acf-rest-api.php │ ├── class-acf-rest-embed-links.php │ ├── class-acf-rest-request.php │ ├── class-acf-rest-types-endpoint.php │ └── index.php ├── revisions.php ├── scf-ui-options-page-functions.php ├── third-party.php ├── upgrades.php ├── validation.php ├── walkers │ ├── class-acf-walker-taxonomy-field.php │ └── index.php └── wpml.php ├── index.php ├── lang ├── index.php ├── secure-custom-fields-ar.l10n.php ├── secure-custom-fields-ar.mo ├── secure-custom-fields-ar.po ├── secure-custom-fields-bg_BG.l10n.php ├── secure-custom-fields-bg_BG.mo ├── secure-custom-fields-bg_BG.po ├── secure-custom-fields-ca.l10n.php ├── secure-custom-fields-ca.mo ├── secure-custom-fields-ca.po ├── secure-custom-fields-cs_CZ.l10n.php ├── secure-custom-fields-cs_CZ.mo ├── secure-custom-fields-cs_CZ.po ├── secure-custom-fields-da_DK.l10n.php ├── secure-custom-fields-da_DK.mo ├── secure-custom-fields-da_DK.po ├── secure-custom-fields-de_CH.l10n.php ├── secure-custom-fields-de_CH.mo ├── secure-custom-fields-de_CH.po ├── secure-custom-fields-de_DE.l10n.php ├── secure-custom-fields-de_DE.mo ├── secure-custom-fields-de_DE.po ├── secure-custom-fields-de_DE_formal.l10n.php ├── secure-custom-fields-de_DE_formal.mo ├── secure-custom-fields-de_DE_formal.po ├── secure-custom-fields-el.l10n.php ├── secure-custom-fields-el.mo ├── secure-custom-fields-el.po ├── secure-custom-fields-en_CA.l10n.php ├── secure-custom-fields-en_CA.mo ├── secure-custom-fields-en_CA.po ├── secure-custom-fields-en_GB.l10n.php ├── secure-custom-fields-en_GB.mo ├── secure-custom-fields-en_GB.po ├── secure-custom-fields-en_ZA.l10n.php ├── secure-custom-fields-en_ZA.mo ├── secure-custom-fields-en_ZA.po ├── secure-custom-fields-es_CO.l10n.php ├── secure-custom-fields-es_CO.mo ├── secure-custom-fields-es_CO.po ├── secure-custom-fields-es_CR.l10n.php ├── secure-custom-fields-es_CR.mo ├── secure-custom-fields-es_CR.po ├── secure-custom-fields-es_MX.l10n.php ├── secure-custom-fields-es_MX.mo ├── secure-custom-fields-es_MX.po ├── secure-custom-fields-es_VE.l10n.php ├── secure-custom-fields-es_VE.mo ├── secure-custom-fields-es_VE.po ├── secure-custom-fields-fa_AF.l10n.php ├── secure-custom-fields-fa_AF.mo ├── secure-custom-fields-fa_AF.po ├── secure-custom-fields-fa_IR.l10n.php ├── secure-custom-fields-fa_IR.mo ├── secure-custom-fields-fa_IR.po ├── secure-custom-fields-fi.l10n.php ├── secure-custom-fields-fi.mo ├── secure-custom-fields-fi.po ├── secure-custom-fields-fr_CA.l10n.php ├── secure-custom-fields-fr_CA.mo ├── secure-custom-fields-fr_CA.po ├── secure-custom-fields-fr_FR.l10n.php ├── secure-custom-fields-fr_FR.mo ├── secure-custom-fields-fr_FR.po ├── secure-custom-fields-gl_ES.l10n.php ├── secure-custom-fields-gl_ES.mo ├── secure-custom-fields-gl_ES.po ├── secure-custom-fields-gu.l10n.php ├── secure-custom-fields-gu.mo ├── secure-custom-fields-gu.po ├── secure-custom-fields-he_IL.l10n.php ├── secure-custom-fields-he_IL.mo ├── secure-custom-fields-he_IL.po ├── secure-custom-fields-hr.l10n.php ├── secure-custom-fields-hr.mo ├── secure-custom-fields-hr.po ├── secure-custom-fields-hu_HU.l10n.php ├── secure-custom-fields-hu_HU.mo ├── secure-custom-fields-hu_HU.po ├── secure-custom-fields-id_ID.l10n.php ├── secure-custom-fields-id_ID.mo ├── secure-custom-fields-id_ID.po ├── secure-custom-fields-it_IT.l10n.php ├── secure-custom-fields-it_IT.mo ├── secure-custom-fields-it_IT.po ├── secure-custom-fields-ja.l10n.php ├── secure-custom-fields-ja.mo ├── secure-custom-fields-ja.po ├── secure-custom-fields-ko_KR.l10n.php ├── secure-custom-fields-ko_KR.mo ├── secure-custom-fields-ko_KR.po ├── secure-custom-fields-nb_NO.l10n.php ├── secure-custom-fields-nb_NO.mo ├── secure-custom-fields-nb_NO.po ├── secure-custom-fields-nl_NL_formal.l10n.php ├── secure-custom-fields-nl_NL_formal.mo ├── secure-custom-fields-nl_NL_formal.po ├── secure-custom-fields-pl_PL.l10n.php ├── secure-custom-fields-pl_PL.mo ├── secure-custom-fields-pl_PL.po ├── secure-custom-fields-pt_AO.l10n.php ├── secure-custom-fields-pt_AO.mo ├── secure-custom-fields-pt_AO.po ├── secure-custom-fields-pt_BR.l10n.php ├── secure-custom-fields-pt_BR.mo ├── secure-custom-fields-pt_BR.po ├── secure-custom-fields-pt_PT.l10n.php ├── secure-custom-fields-pt_PT.mo ├── secure-custom-fields-pt_PT.po ├── secure-custom-fields-ro_RO.l10n.php ├── secure-custom-fields-ro_RO.mo ├── secure-custom-fields-ro_RO.po ├── secure-custom-fields-sk_SK.l10n.php ├── secure-custom-fields-sk_SK.mo ├── secure-custom-fields-sk_SK.po ├── secure-custom-fields-tr_TR.l10n.php ├── secure-custom-fields-tr_TR.mo ├── secure-custom-fields-tr_TR.po ├── secure-custom-fields-uk.l10n.php ├── secure-custom-fields-uk.mo ├── secure-custom-fields-uk.po ├── secure-custom-fields-zh_TW.l10n.php ├── secure-custom-fields-zh_TW.mo ├── secure-custom-fields-zh_TW.po └── secure-custom-fields.pot ├── license.txt ├── package-lock.json ├── package.json ├── phpstan.neon ├── phpunit.xml.dist ├── playwright.config.ts ├── pro ├── README.md ├── acf-pro.php ├── acf-ui-options-page-functions.php ├── admin │ ├── admin-options-page.php │ ├── post-types │ │ ├── admin-ui-options-page.php │ │ └── admin-ui-options-pages.php │ └── views │ │ ├── acf-ui-options-page │ │ ├── advanced-settings.php │ │ ├── basic-settings.php │ │ ├── create-options-page-modal.php │ │ └── list-empty.php │ │ └── html-options-page.php ├── blocks.php ├── fields │ ├── class-acf-field-clone.php │ ├── class-acf-field-flexible-content.php │ ├── class-acf-field-gallery.php │ ├── class-acf-field-repeater.php │ └── class-acf-repeater-table.php ├── locations │ ├── class-acf-location-block.php │ └── class-acf-location-options-page.php ├── options-page.php └── post-types │ └── acf-ui-options-page.php ├── readme.txt ├── secure-custom-fields.php ├── tests ├── e2e │ ├── create-post-type.spec.ts │ ├── field-type-repeater.spec.ts │ ├── field-type-text-comment.spec.ts │ ├── field-type-text-option.spec.ts │ ├── field-type-text-term.spec.ts │ ├── field-type-text-user.spec.ts │ ├── field-type-text-with-scf-block.spec.ts │ ├── field-type-text.spec.ts │ ├── plugin-activation.spec.ts │ └── plugins │ │ ├── blocks │ │ └── scf-movie-title-block │ │ │ ├── block.json │ │ │ └── template.php │ │ ├── scf-test-get-field-comment.php │ │ ├── scf-test-get-field-option.php │ │ ├── scf-test-get-field-scf-block.php │ │ ├── scf-test-get-field-term.php │ │ ├── scf-test-get-field-user.php │ │ ├── scf-test-get-field.php │ │ └── scf-test-get-repeater-field.php └── php │ ├── bootstrap.php │ ├── includes │ └── forms │ │ ├── test-form-customizer.php │ │ └── test-form-post.php │ ├── test-admin-beta-features.php │ └── test-secure-custom-fields.php └── webpack.config.js /.github/workflows/e2e.yml: -------------------------------------------------------------------------------- 1 | name: E2E Tests 2 | 3 | on: 4 | pull_request: 5 | branches: [trunk] 6 | 7 | jobs: 8 | test: 9 | name: Playwright e2e Tests 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | 14 | - name: Setup Node.js 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version-file: ".nvmrc" 18 | cache: "npm" 19 | 20 | - name: Install dependencies 21 | run: | 22 | npm ci 23 | composer install --prefer-dist --no-progress 24 | 25 | - name: Npm build 26 | run: npm run build 27 | 28 | - name: Install wp-env 29 | run: npm install -g @wordpress/env 30 | 31 | - name: Start wp-env 32 | run: wp-env start 33 | 34 | - name: Install Playwright browsers 35 | run: npx playwright install --with-deps 36 | 37 | - name: Run e2e tests 38 | run: npm run test:e2e 39 | 40 | - name: Stop wp-env 41 | if: always() 42 | run: wp-env stop 43 | -------------------------------------------------------------------------------- /.github/workflows/phpcs.yml: -------------------------------------------------------------------------------- 1 | name: Code Standards 2 | on: 3 | push: 4 | branches: 5 | - trunk 6 | - 'branch/*' 7 | pull_request: 8 | branches: 9 | - trunk 10 | - 'branch/*' 11 | 12 | jobs: 13 | phpcs: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v4 18 | with: 19 | fetch-depth: 0 # Required for phpcs-changed to compare with base branch 20 | 21 | - name: Setup PHP 22 | uses: shivammathur/setup-php@v2 23 | with: 24 | php-version: '8.4' 25 | tools: composer:v2 26 | 27 | - name: Install Dependencies 28 | run: composer install 29 | 30 | - name: Run PHPCS on changed files 31 | env: 32 | BASE_REF: ${{ github.base_ref }} 33 | run: | 34 | CHANGED_FILES=$(git diff --name-only --no-renames --diff-filter=d "origin/$BASE_REF" '*.php' || true) 35 | if [[ -n "$CHANGED_FILES" ]]; then 36 | vendor/bin/phpcs-changed \ 37 | --git-base="origin/$BASE_REF" \ 38 | --phpcs-path=vendor/bin/phpcs \ 39 | --standard=.phpcs.xml.dist \ 40 | $CHANGED_FILES 41 | else 42 | echo "No PHP files changed" 43 | fi -------------------------------------------------------------------------------- /.github/workflows/phpstan.yml: -------------------------------------------------------------------------------- 1 | name: Static Analysis 2 | 3 | on: 4 | push: 5 | branches: 6 | - trunk 7 | - 'branch/*' 8 | pull_request: 9 | branches: 10 | - trunk 11 | - 'branch/*' 12 | 13 | jobs: 14 | phpstan: 15 | name: PHPStan 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - name: Checkout code 20 | uses: actions/checkout@v4 21 | 22 | - name: Setup PHP 23 | uses: shivammathur/setup-php@v2 24 | with: 25 | php-version: '8.4' 26 | coverage: none 27 | tools: composer:v2 28 | 29 | - name: Install dependencies 30 | run: composer install --no-progress --prefer-dist --no-interaction 31 | 32 | - name: Run PHPStan 33 | run: composer test:phpstan -------------------------------------------------------------------------------- /.github/workflows/phpunit.yml: -------------------------------------------------------------------------------- 1 | name: PHPUnit Tests 2 | 3 | on: 4 | push: 5 | branches: 6 | - trunk 7 | - 'branch/*' 8 | pull_request: 9 | branches: 10 | - trunk 11 | - 'branch/*' 12 | 13 | jobs: 14 | test: 15 | name: PHP ${{ matrix.php }} 16 | runs-on: ubuntu-latest 17 | 18 | strategy: 19 | matrix: 20 | include: 21 | # Minimum supported PHP 22 | - php: '7.4' 23 | # Latest stable PHP 24 | - php: '8.4' 25 | fail-fast: false 26 | 27 | steps: 28 | - name: Checkout code 29 | uses: actions/checkout@v4 30 | 31 | - name: Setup PHP 32 | uses: shivammathur/setup-php@v2 33 | with: 34 | php-version: ${{ matrix.php }} 35 | coverage: none 36 | tools: composer:v2 37 | 38 | - name: Install dependencies 39 | run: | 40 | composer install --no-progress --prefer-dist --no-interaction 41 | 42 | - name: Run PHPUnit 43 | run: composer test:php -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Node.js 2 | npm-debug.log 3 | yarn-error.log 4 | 5 | # Logs 6 | logs/ 7 | *.log 8 | *.log.* 9 | 10 | # Dependency directories 11 | jspm_packages/ 12 | /vendor/ 13 | /node_modules/ 14 | 15 | # WorDBless 16 | /wordpress/ 17 | 18 | # Optional npm cache directory 19 | .npm 20 | 21 | # Optional eslint cache 22 | .eslintcache 23 | 24 | # Optional REPL history 25 | .node_repl_history 26 | 27 | # Environment variables 28 | .env 29 | .env.test 30 | .env.production 31 | .wp-env.override.json 32 | 33 | # MacOS 34 | .DS_Store 35 | 36 | # IDEs and editors 37 | .idea/ 38 | .vscode/ 39 | *.suo 40 | *.ntvs* 41 | *.njsproj 42 | *.sln 43 | .cursorrules 44 | .cursorignore 45 | 46 | # Assets build directory 47 | assets/build/**/*.css 48 | assets/build/**/*.map 49 | assets/build/**/*.js 50 | assets/build/**/*.php 51 | 52 | # PHPUnit result cache 53 | .phpunit.result.cache 54 | 55 | # Playwright 56 | /test-results/ 57 | /playwright-report/ 58 | /blob-report/ 59 | /playwright/.cache/ 60 | /artifacts/ 61 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . .husky/pre-commit-phpcbf.sh 3 | composer normalize 4 | npm run sort-package-json -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": true, 3 | "MD013": false, 4 | "MD024": false, 5 | "MD033": { 6 | "allowed_elements": [ 7 | "br", 8 | "img", 9 | "video", 10 | "details", 11 | "summary" 12 | ] 13 | }, 14 | "no-inline-html": { 15 | "allowed_elements": [ 16 | "br", 17 | "kbd", 18 | "sup" 19 | ] 20 | }, 21 | "first-line-h1": false, 22 | "commands-show-output": false, 23 | "code-block-style": false, 24 | "no-duplicate-heading": { 25 | "siblings_only": true 26 | }, 27 | "no-trailing-punctuation": { 28 | "punctuation": ".,;:!" 29 | }, 30 | "ol-prefix": { 31 | "style": "ordered" 32 | }, 33 | "fenced-code-language": true, 34 | "ignores": [ 35 | "vendor/**", 36 | "node_modules/**" 37 | ] 38 | } -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22 -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | // Import the default config file and expose it in the project root. 2 | // Useful for editor integrations. 3 | module.exports = { 4 | ...require( '@wordpress/prettier-config' ), 5 | }; 6 | -------------------------------------------------------------------------------- /.wordpress-org/banner-1544x500.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/banner-1544x500.jpg -------------------------------------------------------------------------------- /.wordpress-org/banner-772x250.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/banner-772x250.jpg -------------------------------------------------------------------------------- /.wordpress-org/blueprints/blueprint.json: -------------------------------------------------------------------------------- 1 | { 2 | "landingPage": "/wp-admin/edit.php?post_type=acf-field-group", 3 | "features": { 4 | "networking": true 5 | }, 6 | "steps": [ 7 | { 8 | "step": "login", 9 | "username": "admin", 10 | "password": "password" 11 | }, 12 | { 13 | "step": "installPlugin", 14 | "pluginZipFile": { 15 | "resource": "wordpress.org/plugins", 16 | "slug": "secure-custom-fields" 17 | }, 18 | "options": { 19 | "activate": true 20 | } 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /.wordpress-org/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/icon-128x128.png -------------------------------------------------------------------------------- /.wordpress-org/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/icon-256x256.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/screenshot-1.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/screenshot-2.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/screenshot-3.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WordPress/secure-custom-fields/0e65f484739b4f3283f0f4002ef12cc6cef0cf45/.wordpress-org/screenshot-4.png -------------------------------------------------------------------------------- /.wp-env.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./schemas/json/wp-env.json", 3 | "plugins": ["."], 4 | "env": { 5 | "tests": { 6 | "mappings": { 7 | "wp-content/plugins/secure-custom-fields": ".", 8 | "wp-content/plugins/scf-test-plugins": "./tests/e2e/plugins" 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Secure Custom Fields 2 | 3 | Welcome to the official Secure Custom Fields repository on GitHub. SCF is a WordPress plugin used to take full control of your edit screens & custom field data. 4 | 5 | ## Documentation 6 | 7 | Do you need help getting started with SCF, or do you have questions about one of the SCF features? Please use the [support forums](https://wordpress.org/support/plugin/secure-custom-fields/) on WordPress.org. 8 | 9 | ## Support 10 | 11 | This repository is not suitable for support. Please don't use our issue tracker for support requests, but for core issues only. 12 | Support can take place in forums. 13 | 14 | ## Contributing 15 | 16 | If you have a patch, or stumbled upon an issue with SCF core, you can contribute this back to the code. Please create a new GitHub issue with as much information as possible, and a PR if appropriate ([local environment setup](https://github.com/WordPress/secure-custom-fields/blob/trunk/docs/contributing/index.md#development-setup)). 17 | 18 | ## Translations 19 | 20 | If you're looking to translate SCF, please use [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/secure-custom-fields/stable/). 21 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | The WordPress community take security bugs seriously. We appreciate your efforts to disclose your findings responsibly and will make every effort to acknowledge your contributions. 4 | 5 | To report a security issue, please visit the [WordPress HackerOne](https://hackerone.com/wordpress) program. 6 | -------------------------------------------------------------------------------- /assets/build/css/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/field-states/checkbox-indeterminate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/field-states/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-button-group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-checkbox.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-clone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-color-picker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-date-picker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-date-time-picker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-flexible-content.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-gallery.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-google-map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-message.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-number.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-page-link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-post-object.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-radio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-range.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-relationship.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-taxonomy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-textarea.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-time-picker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-true-false.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-url.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/icon-field-wysiwyg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/field-type-icons/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-alert-triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/images/icons/icon-arrow-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-arrow-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-arrow-up-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/images/icons/icon-check-circle-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-left-double.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-right-double.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-close-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-draggable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/icons/icon-export.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/icons/icon-fields.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-globe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-help.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-hidden.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-import.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /assets/images/icons/icon-info-red.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-info-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-info-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/images/icons/icon-info.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-key-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/images/icons/icon-layout.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-regenerate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/icons/icon-search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-sliders.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/icons/icon-stars.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-time.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-tools.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-updates.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-warning-alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-warning.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/index.php: -------------------------------------------------------------------------------- 1 | label". 28 | * @date 20/5/19 29 | * @since ACF 5.8.1 30 | * @param array $roles A specific array of roles. 31 | * @return array 32 | 33 | ## `acf_allow_unfiltered_html()` 34 | 35 | acf_allow_unfiltered_html 36 | 37 | * Returns true if the current user is allowed to save unfiltered HTML. 38 | * @date 9/1/19 39 | * @since ACF 5.7.10 40 | * @return boolean 41 | 42 | --- 43 | -------------------------------------------------------------------------------- /docs/code-reference/admin/admin-notices-file.md: -------------------------------------------------------------------------------- 1 | # Admin Notices Global Functions 2 | 3 | ## `acf_new_admin_notice()` 4 | 5 | Instantiates and returns a new model. 6 | 7 | * @date 23/12/18 8 | * @since ACF 5.8.0 9 | * @param array $data Optional data to set. 10 | * @return ACF_Admin_Notice 11 | 12 | ## `acf_render_admin_notices()` 13 | 14 | Renders all admin notices HTML. 15 | 16 | * @date 10/1/19 17 | * @since ACF 5.7.10 18 | * @return void 19 | 20 | ## `acf_add_admin_notice()` 21 | 22 | Creates and returns a new notice. 23 | 24 | * @date 17/10/13 25 | * @since ACF 5.0.0 26 | * @param string $text The admin notice text. 27 | * @param string $type The type of notice (warning, error, success, info). 28 | * @param boolean $dismissible Is this notification dismissible (default true) (since ACF 5.11.0). 29 | * @param boolean $persisted Store once a notice has been dismissed per user and prevent showing it again. (since ACF 6.1.0). 30 | * @return ACF_Admin_Notice 31 | 32 | --- 33 | -------------------------------------------------------------------------------- /docs/code-reference/admin/admin-tools-file.md: -------------------------------------------------------------------------------- 1 | # Admin Tools Global Functions 2 | 3 | ## `acf_register_admin_tool()` 4 | 5 | Alias of acf()->admin_tools->register_tool() 6 | 7 | * @type function 8 | * @date 31/5/17 9 | * @since ACF 5.6.0 10 | * @param ACF_Admin_Tool $class The tool class. 11 | * @return void 12 | 13 | ## `acf_get_admin_tools_url()` 14 | 15 | * This function will return the admin URL to the tools page 16 | * @type function 17 | * @date 31/5/17 18 | * @since ACF 5.6.0 19 | * @return string The URL to the tools page. 20 | 21 | ## `acf_get_admin_tool_url()` 22 | 23 | This function will return the admin URL to the tools page 24 | 25 | * @type function 26 | * @date 31/5/17 27 | * @since ACF 5.6.0 28 | * @param string $tool The tool name. 29 | * @return string The URL to a particular tool's page. 30 | 31 | --- 32 | -------------------------------------------------------------------------------- /docs/code-reference/admin/index.md: -------------------------------------------------------------------------------- 1 | # Admin 2 | 3 | ## Files 4 | 5 | - [Admin Notices](admin-notices-file) 6 | - [Admin Tools](admin-tools-file) 7 | -------------------------------------------------------------------------------- /docs/code-reference/admin/views/global/index.md: -------------------------------------------------------------------------------- 1 | # Admin Views Global 2 | 3 | ## Files 4 | 5 | - [Navigation](navigation-file) 6 | -------------------------------------------------------------------------------- /docs/code-reference/admin/views/global/navigation-file.md: -------------------------------------------------------------------------------- 1 | # Navigation Global Functions 2 | 3 | ## `acf_print_menu_section()` 4 | 5 | Helper function for looping over the provided menu items 6 | and echoing out the necessary markup. 7 | 8 | * @since ACF 6.2 9 | * @param array $menu_items An array of menu items to print. 10 | * @param string $section The section being printed. 11 | * @return void 12 | 13 | --- 14 | -------------------------------------------------------------------------------- /docs/code-reference/api/index.md: -------------------------------------------------------------------------------- 1 | # Api 2 | 3 | ## Files 4 | 5 | - [Api Helpers](api-helpers-file) 6 | - [Api Template](api-template-file) 7 | - [Api Term](api-term-file) 8 | -------------------------------------------------------------------------------- /docs/code-reference/assets-file.md: -------------------------------------------------------------------------------- 1 | # Assets Global Functions 2 | 3 | ## `acf_localize_text()` 4 | 5 | Appends an array of i18n data for localization. 6 | 7 | * @date 13/4/18 8 | * @since ACF 5.6.9 9 | * @param array $text An array of text for i18n. 10 | * @return void 11 | 12 | ## `acf_localize_data()` 13 | 14 | Appends an array of l10n data for localization. 15 | 16 | * @date 13/4/18 17 | * @since ACF 5.6.9 18 | * @param array $data An array of data for l10n. 19 | * @return void 20 | 21 | ## `acf_enqueue_script()` 22 | 23 | Enqueues a script with support for supplemental inline scripts. 24 | 25 | * @date 27/4/20 26 | * @since ACF 5.9.0 27 | * @param string $name The script name. 28 | * @return void 29 | 30 | ## `acf_enqueue_scripts()` 31 | 32 | Enqueues the input scripts required for fields. 33 | 34 | * @date 13/4/18 35 | * @since ACF 5.6.9 36 | * @param array $args See ACF_Assets::enqueue_scripts() for a list of args. 37 | * @return void 38 | 39 | ## `acf_enqueue_uploader()` 40 | 41 | Enqueues the WP media uploader scripts and styles. 42 | 43 | * @date 27/10/2014 44 | * @since ACF 5.0.9 45 | * @return void 46 | 47 | --- 48 | -------------------------------------------------------------------------------- /docs/code-reference/compatibility-file.md: -------------------------------------------------------------------------------- 1 | # Compatibility Global Functions 2 | 3 | ## `acf_get_compatibility()` 4 | 5 | Returns true if compatibility is enabled for the given component. 6 | 7 | * @date 20/1/15 8 | * @since ACF 5.1.5 9 | * @param string $name The name of the component to check. 10 | * @return boolean 11 | 12 | --- 13 | -------------------------------------------------------------------------------- /docs/code-reference/fields/index.md: -------------------------------------------------------------------------------- 1 | # Fields 2 | 3 | ## Files 4 | 5 | - [Class Acf Repeater Table](class-acf-repeater-table-file) 6 | -------------------------------------------------------------------------------- /docs/code-reference/forms/form-front-file.md: -------------------------------------------------------------------------------- 1 | # Form Front Global Functions 2 | 3 | ## `acf_form_head()` 4 | 5 | Functions 6 | 7 | * alias of acf()->form->functions 8 | * @type function 9 | * @date 11/06/2014 10 | * @since ACF 5.0.0 11 | * @param n/a 12 | * @return n/a 13 | 14 | --- 15 | -------------------------------------------------------------------------------- /docs/code-reference/forms/index.md: -------------------------------------------------------------------------------- 1 | # Forms 2 | 3 | ## Files 4 | 5 | - [Form Front](form-front-file) 6 | -------------------------------------------------------------------------------- /docs/code-reference/hooks/index.md: -------------------------------------------------------------------------------- 1 | # Hooks 2 | 3 | ## Files 4 | 5 | - [Action](action) 6 | - [Filter](filter) 7 | -------------------------------------------------------------------------------- /docs/code-reference/l10n-file.md: -------------------------------------------------------------------------------- 1 | # L10n Global Functions 2 | 3 | ## `acf_get_locale()` 4 | 5 | Returns the current locale. 6 | 7 | * @date 16/12/16 8 | * @since ACF 5.5.0 9 | * @return string 10 | 11 | ## `acf_load_textdomain()` 12 | 13 | acf_load_textdomain 14 | 15 | * Loads the plugin's translated strings similar to load_plugin_textdomain(). 16 | * @date 8/1/19 17 | * @since ACF 5.7.10 18 | * @param string $locale The plugin's current locale. 19 | * @return void 20 | 21 | ## `_acf_apply_language_cache_key()` 22 | 23 | _acf_apply_language_cache_key 24 | 25 | * Applies the current language to the cache key. 26 | * @date 23/1/19 27 | * @since ACF 5.7.11 28 | * @param string $key The cache key. 29 | * @return string 30 | 31 | --- 32 | -------------------------------------------------------------------------------- /docs/code-reference/local-json-file.md: -------------------------------------------------------------------------------- 1 | # Local Json Global Functions 2 | 3 | ## `acf_get_local_json_files()` 4 | 5 | Returns an array of found JSON field group files. 6 | 7 | * @date 14/4/20 8 | * @since ACF 5.9.0 9 | * @param string $post_type The ACF post type to get files for. 10 | * @return array 11 | 12 | ## `acf_write_json_field_group()` 13 | 14 | Saves a field group JSON file. 15 | 16 | * @date 5/12/2014 17 | * @since ACF 5.1.5 18 | * @param array $field_group The field group. 19 | * @return boolean 20 | 21 | ## `acf_delete_json_field_group()` 22 | 23 | Deletes a field group JSON file. 24 | 25 | * @date 5/12/2014 26 | * @since ACF 5.1.5 27 | * @param string $key The field group key. 28 | * @return boolean True on success. 29 | 30 | --- 31 | -------------------------------------------------------------------------------- /docs/code-reference/local-meta-file.md: -------------------------------------------------------------------------------- 1 | # Local Meta Global Functions 2 | 3 | ## `acf_setup_meta()` 4 | 5 | acf_setup_meta 6 | 7 | * Adds postmeta to storage. 8 | * @date 8/10/18 9 | * @since ACF 5.8.0 10 | @see ACF_Local_Meta::add() for list of parameters. 11 | * @return array 12 | 13 | ## `acf_reset_meta()` 14 | 15 | acf_reset_meta 16 | 17 | * Removes postmeta to storage. 18 | * @date 8/10/18 19 | * @since ACF 5.8.0 20 | @see ACF_Local_Meta::remove() for list of parameters. 21 | * @return void 22 | 23 | --- 24 | -------------------------------------------------------------------------------- /docs/code-reference/loop-file.md: -------------------------------------------------------------------------------- 1 | # Loop Global Functions 2 | 3 | ## `acf_add_loop()` 4 | 5 | alias of acf()->loop->add_loop() 6 | 7 | * @type function 8 | * @date 6/10/13 9 | * @since ACF 5.0.0 10 | * @param n/a 11 | * @return n/a 12 | 13 | ## `acf_update_loop()` 14 | 15 | alias of acf()->loop->update_loop() 16 | 17 | * @type function 18 | * @date 6/10/13 19 | * @since ACF 5.0.0 20 | * @param n/a 21 | * @return n/a 22 | 23 | ## `acf_get_loop()` 24 | 25 | alias of acf()->loop->get_loop() 26 | 27 | * @type function 28 | * @date 6/10/13 29 | * @since ACF 5.0.0 30 | * @param n/a 31 | * @return n/a 32 | 33 | ## `acf_remove_loop()` 34 | 35 | alias of acf()->loop->remove_loop() 36 | 37 | * @type function 38 | * @date 6/10/13 39 | * @since ACF 5.0.0 40 | * @param n/a 41 | * @return n/a 42 | 43 | --- 44 | -------------------------------------------------------------------------------- /docs/code-reference/rest-api/acf-rest-api-functions-file.md: -------------------------------------------------------------------------------- 1 | # Acf Rest API Functions Global Functions 2 | 3 | ## `acf_get_field_rest_schema()` 4 | 5 | Get the REST API schema for a given field. 6 | 7 | * @param array $field 8 | * @return array 9 | 10 | ## `acf_get_field_rest_links()` 11 | 12 | Get the REST API field links for a given field. The links are appended to the REST response under the _links property 13 | and provide API resource links to related objects. If a link is marked as 'embeddable', WordPress can load the resource 14 | in the main request under the_embedded property when the request contains the _embed URL parameter. 15 | 16 | * @see \acf_field::get_rest_links() 17 | @see 18 | * @param string|integer $post_id 19 | * @param array $field 20 | * @return array 21 | 22 | ## `acf_format_value_for_rest()` 23 | 24 | Format a given field's value for output in the REST API. 25 | 26 | * @param $value 27 | * @param $post_id 28 | * @param $field 29 | * @param string $format 'light' for normal REST API formatting or 'standard' to apply ACF's normal field formatting. 30 | * @return mixed 31 | 32 | --- 33 | -------------------------------------------------------------------------------- /docs/code-reference/rest-api/class-acf-rest-embed-links-file.md: -------------------------------------------------------------------------------- 1 | # ACF_Rest_Embed_Links 2 | 3 | Class ACF_Rest_Embed_Links 4 | 5 | * Manage the addition of embed links on supported REST endpoints. 6 | 7 | ## Properties 8 | 9 | ### `$links` 10 | 11 | * @var array Links to add to the response. These can be flagged as embeddable and expanded when _embed is passed with the request. 12 | 13 | ## Methods 14 | 15 | ### `hook_link_handlers` 16 | 17 | Hook into all REST-enabled post type, taxonomy, and the user controllers in order to prepare links. 18 | 19 | ### `prepare_links` 20 | 21 | Add links to internal property for subsequent use in \ACF_Rest_Embed_Links::load_item_links(). 22 | 23 | * @param $post_id 24 | * @param array $field 25 | 26 | ### `load_item_links` 27 | 28 | Hook into the rest_prepare_{$type} filters and add links for the object being prepared. 29 | 30 | * @param WP_REST_Response $response 31 | * @param WP_Post|WP_User|WP_Term $item 32 | * @param WP_REST_Request $request 33 | * @return WP_REST_Response 34 | -------------------------------------------------------------------------------- /docs/code-reference/rest-api/index.md: -------------------------------------------------------------------------------- 1 | # REST API 2 | 3 | ## Files 4 | 5 | - [Acf REST API Functions](acf-rest-api-functions-file) 6 | - [Class Acf REST API](class-acf-rest-api-file) 7 | - [Class ACF REST Embed Links](class-acf-rest-embed-links-file) 8 | - [Class ACF REST Request](class-acf-rest-request-file) 9 | -------------------------------------------------------------------------------- /docs/code-reference/revisions-file.md: -------------------------------------------------------------------------------- 1 | # Revisions Global Functions 2 | 3 | ## `acf_save_post_revision()` 4 | 5 | This function will copy meta from a post to it's latest revision 6 | 7 | * @type function 8 | * @date 26/09/2016 9 | * @since ACF 5.4.0 10 | * @param $post_id (int) 11 | * @return n/a 12 | 13 | ## `acf_get_post_latest_revision()` 14 | 15 | This function will return the latest revision for a given post 16 | 17 | * @type function 18 | * @date 25/06/2016 19 | * @since ACF 5.3.8 20 | * @param $post_id (int) 21 | * @return $post_id (int) 22 | 23 | --- 24 | -------------------------------------------------------------------------------- /docs/concepts/index.md: -------------------------------------------------------------------------------- 1 | # Core Concepts 2 | 3 | This section covers the fundamental concepts and architecture of Secure Custom Fields. 4 | 5 | ## In This Section 6 | 7 | - [Architecture](architecture) - Understanding SCF's internal structure 8 | - [Security](security) - Security principles and best practices 9 | 10 | ## Overview 11 | 12 | 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. 13 | -------------------------------------------------------------------------------- /docs/concepts/security.md: -------------------------------------------------------------------------------- 1 | # Security in Secure Custom Fields 2 | 3 | Security is a core principle of Secure Custom Fields. This guide explains our security practices and how to implement them in your projects. 4 | 5 | ## Core Security Principles 6 | 7 | 1. **Input Validation** 8 | - All user input is validated 9 | - Type checking enforced 10 | - Sanitization applied appropriately 11 | 12 | 2. **Output Escaping** 13 | - Context-aware escaping 14 | - HTML, attributes, and URLs handled separately 15 | - Custom escaping functions for specific needs 16 | 17 | 3. **Capability Checking** 18 | - Granular permission system 19 | - Role-based access control 20 | - Custom capability support 21 | 22 | ## Best Practices 23 | 24 | When working with SCF: 25 | 26 | 1. Always use provided escaping functions 27 | 2. Check user capabilities before operations 28 | 3. Validate all data before saving 29 | 4. Use nonces for form submissions 30 | -------------------------------------------------------------------------------- /docs/contributing/documentation.md: -------------------------------------------------------------------------------- 1 | # Documentation Guidelines 2 | 3 | Guidelines for contributing to SCF documentation. 4 | 5 | ## Style Guide 6 | 7 | We follow the [WordPress Documentation Style Guide](https://make.wordpress.org/docs/style-guide/): 8 | 9 | 1. **Voice and Tone** 10 | - Clear and concise 11 | - Professional but friendly 12 | - Internationally accessible 13 | - Gender-neutral language 14 | 15 | 2. **Formatting** 16 | - Use Markdown 17 | - Follow heading hierarchy 18 | - Include code examples 19 | - Use proper spacing 20 | 21 | 3. **Content Structure** 22 | - Start with overview 23 | - Include examples 24 | - Provide context 25 | - Link related topics 26 | 27 | ## Documentation Types 28 | 29 | 1. **User Documentation** 30 | - Installation guides 31 | - Usage instructions 32 | - UI explanations 33 | - Troubleshooting 34 | 35 | 2. **Developer Documentation** 36 | - API reference 37 | - Hook documentation 38 | - Integration guides 39 | - Security practices 40 | -------------------------------------------------------------------------------- /docs/contributing/index.md: -------------------------------------------------------------------------------- 1 | # Contributing to SCF 2 | 3 | Guide for contributing to Secure Custom Fields development. 4 | 5 | ## Ways to Contribute 6 | 7 | 1. **Code Contributions** 8 | - Bug fixes 9 | - New features 10 | - Performance improvements 11 | - Security enhancements 12 | 13 | 2. **Documentation** 14 | - Writing tutorials 15 | - Improving reference docs 16 | - Fixing errors 17 | - Adding examples 18 | 19 | 3. **Testing** 20 | - Unit testing 21 | - Integration testing 22 | - Bug reporting 23 | - Feature validation 24 | 25 | ## Development Setup 26 | 27 | 1. Fork the repository 28 | 2. Set up local environment 29 | - The local environment runs with WP env, for setup, see: https://developer.wordpress.org/block-editor/reference-guides/packages/packages-env/ along with prerequisites. 30 | 3. Install dependencies 31 | - run `composer install` 32 | - build the plugin files (JS/CSS) via `npm run build` 33 | 4. Run test suite 34 | - `composer run test` 35 | 36 | ## Contribution Guidelines 37 | 38 | - Follow WordPress coding standards 39 | - Write unit tests for new features 40 | - Document all changes 41 | - Keep pull requests focused 42 | -------------------------------------------------------------------------------- /docs/features/field/META.md: -------------------------------------------------------------------------------- 1 | # Field Documentation Guide 2 | 3 | This directory contains documentation for all field types in Secure Custom Fields. 4 | 5 | ## Structure 6 | 7 | Each field type has its own directory containing: 8 | 9 | - `index.md` - Main documentation for the field 10 | - `tutorial.md` - Step-by-step tutorial for implementing the field 11 | 12 | ## Adding New Field Documentation 13 | 14 | 1. Create a new directory for the field type 15 | 2. Create both required files 16 | 3. Follow the standard format for each file type 17 | 4. Include code examples and use cases 18 | 19 | ## Documentation Standards 20 | 21 | (To be added). 22 | -------------------------------------------------------------------------------- /docs/features/field/accordion/index.md: -------------------------------------------------------------------------------- 1 | # Accordion Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Creates collapsible sections for field organization 8 | - Can be set to open/closed by default 9 | - Supports multiple open sections simultaneously 10 | - Can act as an endpoint for previous accordion sections 11 | 12 | ## Settings 13 | 14 | - Open - Display this accordion as open on page load 15 | - Multi-Expand - Allow this accordion to open without closing others 16 | - Endpoint - Define an endpoint for the previous accordion to stop 17 | -------------------------------------------------------------------------------- /docs/features/field/accordion/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Accordion Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add an Accordion field 7 | 3. Configure basic settings: 8 | - Set a clear section title 9 | - Choose if it should be open by default 10 | - Decide if multiple sections can be open 11 | 12 | ## Common Use Cases 13 | 14 | 1. Organizing Content Sections 15 | - Group related fields together 16 | - Use clear section names 17 | - Consider the editing workflow 18 | 19 | 2. Creating Form Sections 20 | - Basic Information 21 | - Detailed Content 22 | - Settings/Configuration 23 | 24 | ## Tips 25 | 26 | - Keep section names concise but descriptive 27 | - Don't nest accordions too deeply 28 | - Consider using endpoints to create clear breaks 29 | - Group related fields logically 30 | -------------------------------------------------------------------------------- /docs/features/field/button-group/index.md: -------------------------------------------------------------------------------- 1 | # Button Group Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Visual button-style interface 8 | - Single option selection 9 | - Customizable button labels 10 | - Clear visual indication of selected option 11 | 12 | ## Settings 13 | 14 | - Choices - Define the available options 15 | - Default Value - Set the pre-selected option 16 | - Return Format - Specify how the value should be returned 17 | - Allow Null - Option to have no selection 18 | -------------------------------------------------------------------------------- /docs/features/field/button-group/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Button Group Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Button Group field 7 | 3. Configure the choices: 8 | - Add value:label pairs 9 | - Set a default value 10 | - Choose return format 11 | 12 | ## Common Use Cases 13 | 14 | 1. Simple Toggle Options 15 | - Yes/No choices 16 | - Show/Hide settings 17 | - Layout selections 18 | 19 | 2. Status Selection 20 | - Draft/Review/Published 21 | - Active/Inactive 22 | - Priority levels 23 | 24 | ## Tips 25 | 26 | - Keep choices concise 27 | - Use clear labels 28 | - Consider mobile usability 29 | - Limit number of options 30 | -------------------------------------------------------------------------------- /docs/features/field/checkbox/index.md: -------------------------------------------------------------------------------- 1 | # Checkbox Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Multiple option selection 8 | - Toggle individual choices 9 | - Customizable checkbox layout 10 | - Flexible return format 11 | 12 | ## Settings 13 | 14 | - Choices - Define the available options 15 | - Default Value - Set pre-selected options 16 | - Layout - Choose between vertical or horizontal layout 17 | - Allow Custom - Enable user-added choices 18 | - Toggle All - Option to select/deselect all choices 19 | -------------------------------------------------------------------------------- /docs/features/field/checkbox/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Checkbox Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Checkbox field 7 | 3. Configure options: 8 | - Add checkbox choices 9 | - Set layout (vertical/horizontal) 10 | - Choose return format 11 | - Enable/disable "Select All" 12 | 13 | ## Common Use Cases 14 | 15 | 1. Multiple Selection Lists 16 | - Categories/Tags 17 | - Feature toggles 18 | - Permission settings 19 | 20 | 2. Option Configuration 21 | - Settings panels 22 | - Display preferences 23 | - Content filters 24 | 25 | ## Tips 26 | 27 | - Group related options together 28 | - Consider using columns for many options 29 | - Provide clear labels 30 | - Use "Select All" for long lists 31 | -------------------------------------------------------------------------------- /docs/features/field/clone/index.md: -------------------------------------------------------------------------------- 1 | # Clone Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Copy existing field configurations 8 | - Clone individual fields or entire field groups 9 | - Prefix labels to avoid naming conflicts 10 | - Maintain synchronized settings across cloned instances 11 | 12 | ## Settings 13 | 14 | - Select Fields - Choose which fields or groups to clone 15 | - Display - Control how the cloned fields appear 16 | - Prefix Label - Add a prefix to cloned field labels 17 | - Prefix Name - Add a prefix to cloned field names 18 | -------------------------------------------------------------------------------- /docs/features/field/clone/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Clone Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Clone field 7 | 3. Configure clone settings: 8 | - Select fields/groups to clone 9 | - Choose display format 10 | - Set prefix options 11 | - Configure labels 12 | 13 | ## Common Use Cases 14 | 15 | 1. Reusable Field Sets 16 | - Contact information 17 | - Social media links 18 | - Common metadata 19 | 20 | 2. Template Components 21 | - Shared content blocks 22 | - Repeated field patterns 23 | - Standard form elements 24 | 25 | ## Tips 26 | 27 | - Use meaningful prefixes 28 | - Consider data structure 29 | - Keep cloned groups focused 30 | - Document clone relationships 31 | -------------------------------------------------------------------------------- /docs/features/field/color-picker/index.md: -------------------------------------------------------------------------------- 1 | # Color Picker Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Visual color selection interface 8 | - RGB and RGBA color support 9 | - Opacity/transparency control 10 | - Default color presets 11 | - Hex color input 12 | 13 | ## Settings 14 | 15 | - Default Value - Set a default color 16 | - Return Format - Choose between string, array, or rgba format 17 | - Enable Opacity - Allow transparency selection 18 | -------------------------------------------------------------------------------- /docs/features/field/color-picker/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Color Picker Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Color Picker field 7 | 3. Configure options: 8 | - Set default color 9 | - Enable/disable opacity 10 | - Choose return format 11 | - Set display preferences 12 | 13 | ## Common Use Cases 14 | 15 | 1. Theme Customization 16 | - Brand colors 17 | - Background colors 18 | - Text colors 19 | 20 | 2. Design Elements 21 | - Button colors 22 | - Border colors 23 | - Overlay settings 24 | 25 | ## Tips 26 | 27 | - Consider color validation 28 | - Use default colors strategically 29 | - Document color usage 30 | - Consider accessibility 31 | -------------------------------------------------------------------------------- /docs/features/field/date-picker/index.md: -------------------------------------------------------------------------------- 1 | # Date Picker Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Interactive calendar interface 8 | - Customizable date formats 9 | - Week starts on any day 10 | - Restrict date ranges 11 | - Multiple display formats 12 | 13 | ## Settings 14 | 15 | - Display Format - How the date appears to editors 16 | - Return Format - How the date is stored/returned 17 | - Week Starts On - Set first day of week 18 | - First Day - Configure week start day 19 | -------------------------------------------------------------------------------- /docs/features/field/date-picker/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Date Picker Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Date Picker field 7 | 3. Configure options: 8 | - Set display format 9 | - Choose return format 10 | - Configure week start day 11 | - Set default value 12 | 13 | ## Common Use Cases 14 | 15 | 1. Event Management 16 | - Event dates 17 | - Scheduling 18 | - Deadlines 19 | 20 | 2. Content Planning 21 | - Publication dates 22 | - Campaign scheduling 23 | - Time-sensitive content 24 | 25 | ## Tips 26 | 27 | - Use consistent date formats 28 | - Consider timezone implications 29 | - Set appropriate restrictions 30 | - Use clear date formatting 31 | -------------------------------------------------------------------------------- /docs/features/field/date-time-picker/index.md: -------------------------------------------------------------------------------- 1 | # Date Time Picker Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Combined date and time selection 8 | - Customizable date/time formats 9 | - Time increment control 10 | - Multiple display formats 11 | - Timezone support 12 | 13 | ## Settings 14 | 15 | - Display Format - How the datetime appears to editors 16 | - Return Format - How the datetime is stored/returned 17 | - Week Starts On - Set first day of week 18 | - Time Increment - Control minute stepping 19 | -------------------------------------------------------------------------------- /docs/features/field/date-time-picker/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Date Time Picker Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Date Time Picker field 7 | 3. Configure options: 8 | - Set display format 9 | - Choose return format 10 | - Set time increment 11 | - Configure default value 12 | 13 | ## Common Use Cases 14 | 15 | 1. Event Scheduling 16 | - Event start/end times 17 | - Appointment booking 18 | - Session timing 19 | 20 | 2. Content Scheduling 21 | - Post scheduling 22 | - Time-based features 23 | - Automated tasks 24 | 25 | ## Tips 26 | 27 | - Consider time zone handling 28 | - Use appropriate time increments 29 | - Validate date ranges 30 | - Clear datetime formatting 31 | -------------------------------------------------------------------------------- /docs/features/field/email/index.md: -------------------------------------------------------------------------------- 1 | # Email Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Email format validation 8 | - Custom placeholder text 9 | - Prepend/append text options 10 | - Required field validation 11 | - Multiple email support 12 | 13 | ## Settings 14 | 15 | - Default Value - Set a default email address 16 | - Placeholder - Custom placeholder text 17 | - Prepend - Add text before the input 18 | - Append - Add text after the input 19 | -------------------------------------------------------------------------------- /docs/features/field/email/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Email Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add an Email field 7 | 3. Configure options: 8 | - Set placeholder text 9 | - Add prepend/append text 10 | - Configure validation 11 | - Set default value 12 | 13 | ## Common Use Cases 14 | 15 | 1. Contact Information 16 | - Contact forms 17 | - User profiles 18 | - Directory listings 19 | 20 | 2. Notification Settings 21 | - Alert recipients 22 | - Newsletter subscriptions 23 | - System notifications 24 | 25 | ## Tips 26 | 27 | - Use clear validation messages 28 | - Consider multiple email support 29 | - Add helpful placeholder text 30 | - Validate email format 31 | -------------------------------------------------------------------------------- /docs/features/field/file/index.md: -------------------------------------------------------------------------------- 1 | # File Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Media library integration 8 | - File type restrictions 9 | - Size limitations 10 | - Custom return formats 11 | - Preview capabilities 12 | 13 | ## Settings 14 | 15 | - Library - Restrict to uploaded or all files 16 | - Return Format - Array, URL, or ID 17 | - Preview Size - Thumbnail display size 18 | - Min/Max Size - File size restrictions 19 | - Allowed File Types - Restrict accepted formats 20 | -------------------------------------------------------------------------------- /docs/features/field/file/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the File Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a File field 7 | 3. Configure options: 8 | - Set allowed file types 9 | - Configure size limits 10 | - Choose library restriction 11 | - Set return format 12 | 13 | ## Common Use Cases 14 | 15 | 1. Document Management 16 | - PDF uploads 17 | - Document attachments 18 | - Resource libraries 19 | 20 | 2. Media Handling 21 | - Download files 22 | - Asset management 23 | - Resource linking 24 | 25 | ## Tips 26 | 27 | - Restrict file types appropriately 28 | - Set reasonable size limits 29 | - Consider storage implications 30 | - Use clear preview options 31 | -------------------------------------------------------------------------------- /docs/features/field/flexible-content/index.md: -------------------------------------------------------------------------------- 1 | # Flexible Content Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Dynamic layout builder 8 | - Multiple layout types 9 | - Drag and drop ordering 10 | - Nested content structures 11 | - Customizable templates 12 | 13 | ## Settings 14 | 15 | - Layouts - Define available content block types 16 | - Button Label - Customize the "Add Row" text 17 | - Min/Max Layouts - Limit number of blocks 18 | - Layout Settings - Configure each layout type 19 | -------------------------------------------------------------------------------- /docs/features/field/flexible-content/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Flexible Content Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Flexible Content field 7 | 3. Configure layouts: 8 | - Create layout types 9 | - Add fields to each layout 10 | - Set minimum/maximum 11 | - Configure button labels 12 | 13 | ## Common Use Cases 14 | 15 | 1. Page Building 16 | - Content sections 17 | - Landing pages 18 | - Dynamic layouts 19 | 20 | 2. Content Management 21 | - Article components 22 | - Product displays 23 | - Feature blocks 24 | 25 | ## Tips 26 | 27 | - Plan layouts carefully 28 | - Use clear layout labels 29 | - Consider nesting depth 30 | - Optimize for editors 31 | -------------------------------------------------------------------------------- /docs/features/field/gallery/index.md: -------------------------------------------------------------------------------- 1 | # Gallery Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Multiple image upload 8 | - Drag and drop ordering 9 | - Image previews 10 | - Bulk selection 11 | - Media library integration 12 | 13 | ## Settings 14 | 15 | - Library - Restrict to uploaded or all images 16 | - Min/Max Selection - Limit number of images 17 | - Preview Size - Thumbnail display size 18 | - Insert - Prepend or append new images 19 | - Return Format - Array, URL, or ID 20 | -------------------------------------------------------------------------------- /docs/features/field/gallery/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Gallery Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Gallery field 7 | 3. Configure options: 8 | - Set image restrictions 9 | - Choose preview size 10 | - Configure min/max images 11 | - Set insert position 12 | 13 | ## Common Use Cases 14 | 15 | 1. Image Collections 16 | - Photo galleries 17 | - Product images 18 | - Portfolio displays 19 | 20 | 2. Media Management 21 | - Slideshows 22 | - Image grids 23 | - Media libraries 24 | 25 | ## Tips 26 | 27 | - Set appropriate image limits 28 | - Consider thumbnail sizes 29 | - Enable easy reordering 30 | - Optimize image sizes 31 | -------------------------------------------------------------------------------- /docs/features/field/google-map/index.md: -------------------------------------------------------------------------------- 1 | # Google Map Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Interactive map interface 8 | - Address search functionality 9 | - Latitude/longitude selection 10 | - Custom map center point 11 | - Zoom level control 12 | 13 | ## Settings 14 | 15 | - Center Latitude - Default map center point 16 | - Center Longitude - Default map center point 17 | - Zoom Level - Default map zoom 18 | - Height - Map display height 19 | - Return Format - Location data format 20 | -------------------------------------------------------------------------------- /docs/features/field/google-map/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Google Map Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Google Map field 7 | 3. Configure options: 8 | - Set default center point 9 | - Configure zoom level 10 | - Set map height 11 | - Choose display format 12 | 13 | ## Common Use Cases 14 | 15 | 1. Location Information 16 | - Business locations 17 | - Event venues 18 | - Contact pages 19 | 20 | 2. Geographic Data 21 | - Service areas 22 | - Delivery zones 23 | - Store locators 24 | 25 | ## Tips 26 | 27 | - Configure API key properly 28 | - Set appropriate zoom levels 29 | - Consider mobile display 30 | - Use clear location markers 31 | -------------------------------------------------------------------------------- /docs/features/field/group/index.md: -------------------------------------------------------------------------------- 1 | # Group Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Group multiple fields together 8 | - Single data structure 9 | - Simplified data retrieval 10 | - Layout customization 11 | - Nested field support 12 | 13 | ## Settings 14 | 15 | - Sub Fields - Add fields within the group 16 | - Layout - Stack or table display format 17 | - Return Format - Group or individual field values 18 | -------------------------------------------------------------------------------- /docs/features/field/group/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Group Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Group field 7 | 3. Configure sub-fields: 8 | - Add desired fields 9 | - Arrange field layout 10 | - Set labels 11 | - Choose return format 12 | 13 | ## Common Use Cases 14 | 15 | 1. Related Data Sets 16 | - Address information 17 | - Social media profiles 18 | - Contact details 19 | 20 | 2. Structured Content 21 | - Product specifications 22 | - Team member details 23 | - Feature sets 24 | 25 | ## Tips 26 | 27 | - Keep groups focused 28 | - Use clear labeling 29 | - Consider data structure 30 | - Plan field organization 31 | -------------------------------------------------------------------------------- /docs/features/field/icon-picker/index.md: -------------------------------------------------------------------------------- 1 | # Icon Picker Field 2 | 3 | The Icon Picker field provides an interface for selecting icons from various sources including Dashicons, custom icon sets, or the media library. 4 | 5 | ## Key Features 6 | 7 | - Multiple icon source options 8 | - Dashicons integration 9 | - Media library support 10 | - URL input option 11 | - Visual icon preview 12 | 13 | ## Settings 14 | 15 | - Icon Library - Choose available icon sources 16 | - Return Format - Icon class, URL, or array 17 | - Preview Size - Icon display size 18 | - Allow Custom - Enable custom icon URLs 19 | -------------------------------------------------------------------------------- /docs/features/field/icon-picker/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Icon Picker Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add an Icon Picker field 7 | 3. Configure options: 8 | - Select icon libraries 9 | - Set preview size 10 | - Configure return format 11 | - Enable custom URLs 12 | 13 | ## Common Use Cases 14 | 15 | 1. UI Elements 16 | - Menu icons 17 | - Feature indicators 18 | - Button symbols 19 | 20 | 2. Visual Content 21 | - Social media icons 22 | - Category markers 23 | - Navigation elements 24 | 25 | ## Tips 26 | 27 | - Maintain icon consistency 28 | - Consider icon sizing 29 | - Use clear previews 30 | - Document icon usage 31 | -------------------------------------------------------------------------------- /docs/features/field/image/index.md: -------------------------------------------------------------------------------- 1 | # Image Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Media library integration 8 | - Image preview 9 | - Size restrictions 10 | - Format validation 11 | - Multiple return formats 12 | 13 | ## Settings 14 | 15 | - Preview Size - Thumbnail display size 16 | - Library - Restrict to uploaded or all images 17 | - Min/Max Width/Height - Image dimension limits 18 | - File Size Restrictions - Control upload sizes 19 | - Return Format - Array, URL, or ID 20 | -------------------------------------------------------------------------------- /docs/features/field/image/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Image Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add an Image field 7 | 3. Configure options: 8 | - Set preview size 9 | - Choose library type 10 | - Configure size limits 11 | - Set return format 12 | 13 | ## Common Use Cases 14 | 15 | 1. Content Images 16 | - Featured images 17 | - Article photos 18 | - Profile pictures 19 | 20 | 2. Design Elements 21 | - Background images 22 | - Logo uploads 23 | - Banner images 24 | 25 | ## Tips 26 | 27 | - Set appropriate size limits 28 | - Consider image dimensions 29 | - Use meaningful preview sizes 30 | - Plan for responsive display 31 | -------------------------------------------------------------------------------- /docs/features/field/link/index.md: -------------------------------------------------------------------------------- 1 | # Link Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Internal/external link support 8 | - Link text customization 9 | - Target attribute control 10 | - Internal content picker 11 | - WordPress link picker integration 12 | 13 | ## Settings 14 | 15 | - Return Format - Array or URL 16 | - Default Value - Preset link data 17 | - Display Format - How the link appears in admin 18 | -------------------------------------------------------------------------------- /docs/features/field/link/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Link Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Link field 7 | 3. Configure options: 8 | - Choose return format 9 | - Set default value 10 | - Configure display 11 | - Enable/disable features 12 | 13 | ## Common Use Cases 14 | 15 | 1. Navigation Elements 16 | - Menu links 17 | - Call-to-actions 18 | - Resource links 19 | 20 | 2. Content References 21 | - Related content 22 | - External resources 23 | - Document links 24 | 25 | ## Tips 26 | 27 | - Validate URLs properly 28 | - Consider link targets 29 | - Use clear link text 30 | - Check for broken links 31 | -------------------------------------------------------------------------------- /docs/features/field/message/index.md: -------------------------------------------------------------------------------- 1 | # Message Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Custom HTML support 8 | - No data storage 9 | - Formatting options 10 | - Visual organization 11 | - Editor instructions 12 | 13 | ## Settings 14 | 15 | - Message - The content to display 16 | - New Lines - Handle line breaks 17 | - Escape HTML - Display HTML as text 18 | - Format - Text formatting options 19 | -------------------------------------------------------------------------------- /docs/features/field/message/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Message Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Message field 7 | 3. Configure options: 8 | - Enter message content 9 | - Set formatting options 10 | - Configure HTML handling 11 | - Choose display style 12 | 13 | ## Common Use Cases 14 | 15 | 1. User Guidance 16 | - Field instructions 17 | - Section descriptions 18 | - Important notices 19 | 20 | 2. Content Organization 21 | - Section dividers 22 | - Group headers 23 | - Information blocks 24 | 25 | ## Tips 26 | 27 | - Keep messages concise 28 | - Use clear formatting 29 | - Consider visibility 30 | - Update content regularly 31 | -------------------------------------------------------------------------------- /docs/features/field/nav_menu/index.md: -------------------------------------------------------------------------------- 1 | # Nav Menu Field 2 | 3 | The Nav Menu Field field provides a way to select nav menus and output them. 4 | 5 | ## Key Features 6 | 7 | - Different Return Value (Object, HTML, ID) 8 | - Different Menu Container (nav, div) 9 | - Ability to select no value 10 | 11 | ## Settings 12 | 13 | - Return Value 14 | - Menu Container 15 | - Allow Null? 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/features/field/number/index.md: -------------------------------------------------------------------------------- 1 | # Number Field 2 | 3 | The Number field provides an input specifically for numeric values. It includes validation and formatting options to ensure proper number handling. 4 | 5 | ## Key Features 6 | 7 | - Numeric validation 8 | - Min/max restrictions 9 | - Step increment control 10 | - Custom formatting 11 | - Prefix/suffix support 12 | 13 | ## Settings 14 | 15 | - Default Value - Preset number 16 | - Placeholder - Input placeholder text 17 | - Prepend - Text before the input 18 | - Append - Text after the input 19 | - Min - Minimum allowed value 20 | - Max - Maximum allowed value 21 | - Step - Number increment size 22 | -------------------------------------------------------------------------------- /docs/features/field/number/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Number Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Number field 7 | 3. Configure options: 8 | - Set min/max values 9 | - Configure step size 10 | - Add placeholder text 11 | - Set default value 12 | 13 | ## Common Use Cases 14 | 15 | 1. Numeric Input 16 | - Quantities 17 | - Ratings 18 | - Measurements 19 | 20 | 2. Settings Control 21 | - Display options 22 | - Configuration values 23 | - Numeric parameters 24 | 25 | ## Tips 26 | 27 | - Set appropriate ranges 28 | - Use clear step intervals 29 | - Consider validation needs 30 | - Add helpful placeholders 31 | -------------------------------------------------------------------------------- /docs/features/field/oembed/index.md: -------------------------------------------------------------------------------- 1 | # oEmbed Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Support for multiple providers 8 | - Automatic embed handling 9 | - Preview capability 10 | - Width/height control 11 | - WordPress oEmbed integration 12 | 13 | ## Settings 14 | 15 | - Width - Maximum width of embedded content 16 | - Height - Maximum height of embedded content 17 | - Preview Size - Display size in admin 18 | -------------------------------------------------------------------------------- /docs/features/field/oembed/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the oEmbed Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add an oEmbed field 7 | 3. Configure options: 8 | - Set width/height 9 | - Configure preview 10 | - Set display options 11 | - Choose providers 12 | 13 | ## Common Use Cases 14 | 15 | 1. Media Integration 16 | - Video embeds 17 | - Social media posts 18 | - Audio content 19 | 20 | 2. External Content 21 | - YouTube videos 22 | - Twitter posts 23 | - Spotify tracks 24 | 25 | ## Tips 26 | 27 | - Check provider compatibility 28 | - Consider responsive sizing 29 | - Test embed previews 30 | - Validate URLs properly 31 | -------------------------------------------------------------------------------- /docs/features/field/page-link/index.md: -------------------------------------------------------------------------------- 1 | # Page Link Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Internal content linking 8 | - Multiple post type support 9 | - Search functionality 10 | - Archive URL support 11 | - Multiple selection option 12 | 13 | ## Settings 14 | 15 | - Post Type - Select available content types 16 | - Taxonomy - Filter by taxonomy terms 17 | - Allow Archives - Enable archive URL selection 18 | - Multiple Values - Allow multiple selections 19 | - Allow Null - Make selection optional 20 | -------------------------------------------------------------------------------- /docs/features/field/page-link/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Page Link Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Page Link field 7 | 3. Configure options: 8 | - Select post types 9 | - Configure taxonomy filters 10 | - Set multiple selection 11 | - Enable/disable archives 12 | 13 | ## Common Use Cases 14 | 15 | 1. Internal Navigation 16 | - Related content 17 | - Section links 18 | - Menu structures 19 | 20 | 2. Content Relationships 21 | - Related posts 22 | - Resource links 23 | - Content hierarchy 24 | 25 | ## Tips 26 | 27 | - Use clear selection filters 28 | - Consider multiple selection needs 29 | - Test search functionality 30 | - Validate link targets 31 | -------------------------------------------------------------------------------- /docs/features/field/password/index.md: -------------------------------------------------------------------------------- 1 | # Password Field 2 | 3 | The Password field provides a secure input for password data. It includes masking functionality and can be configured with various display options. 4 | 5 | ## Key Features 6 | 7 | - Masked input 8 | - Custom placeholder text 9 | - Prepend/append options 10 | - Basic password validation 11 | - Secure handling 12 | 13 | ## Settings 14 | 15 | - Placeholder - Input placeholder text 16 | - Prepend - Text before the input 17 | - Append - Text after the input 18 | -------------------------------------------------------------------------------- /docs/features/field/password/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Password Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Password field 7 | 3. Configure options: 8 | - Set placeholder text 9 | - Add prepend/append 10 | - Configure validation 11 | - Set character limits 12 | 13 | ## Common Use Cases 14 | 15 | 1. Security Settings 16 | - API keys 17 | - Access tokens 18 | - Private credentials 19 | 20 | 2. User Management 21 | - Password fields 22 | - Security questions 23 | - Access codes 24 | 25 | ## Tips 26 | 27 | - Use secure handling 28 | - Clear validation rules 29 | - Consider masking options 30 | - Implement proper sanitization 31 | -------------------------------------------------------------------------------- /docs/features/field/post-object/index.md: -------------------------------------------------------------------------------- 1 | # Post Object Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Content relationship management 8 | - Multiple post type support 9 | - Advanced search functionality 10 | - Single or multiple selection 11 | - Bidirectional relationships 12 | 13 | ## Settings 14 | 15 | - Post Type - Select available content types 16 | - Taxonomy - Filter by taxonomy terms 17 | - Allow Null - Make selection optional 18 | - Multiple Values - Allow multiple selections 19 | - Return Format - Object, ID, or custom 20 | -------------------------------------------------------------------------------- /docs/features/field/post-object/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Post Object Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Post Object field 7 | 3. Configure options: 8 | - Select post types 9 | - Set taxonomy filters 10 | - Configure multiple selection 11 | - Choose return format 12 | 13 | ## Common Use Cases 14 | 15 | 1. Content Relationships 16 | - Related posts 17 | - Parent/child content 18 | - Cross-references 19 | 20 | 2. Content Selection 21 | - Featured content 22 | - Resource lists 23 | - Content linking 24 | 25 | ## Tips 26 | 27 | - Use clear search filters 28 | - Consider relationship structure 29 | - Plan for scalability 30 | - Test search performance 31 | -------------------------------------------------------------------------------- /docs/features/field/radio/index.md: -------------------------------------------------------------------------------- 1 | # Radio Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Single option selection 8 | - Custom choice labels 9 | - Vertical or horizontal layout 10 | - Other/custom value option 11 | - Clear visual feedback 12 | 13 | ## Settings 14 | 15 | - Choices - Define available options 16 | - Default Value - Pre-selected option 17 | - Layout - Vertical or horizontal display 18 | - Allow Other - Enable custom value input 19 | - Return Format - Value or label 20 | -------------------------------------------------------------------------------- /docs/features/field/radio/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Radio Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Radio field 7 | 3. Configure options: 8 | - Add choice options 9 | - Set layout format 10 | - Configure default value 11 | - Enable/disable features 12 | 13 | ## Common Use Cases 14 | 15 | 1. Single Choice Selection 16 | - Status options 17 | - Display preferences 18 | - Content types 19 | 20 | 2. Configuration Options 21 | - Layout choices 22 | - Setting selections 23 | - Display modes 24 | 25 | ## Tips 26 | 27 | - Keep options clear 28 | - Use logical ordering 29 | - Consider mobile layout 30 | - Provide clear labels 31 | -------------------------------------------------------------------------------- /docs/features/field/range/index.md: -------------------------------------------------------------------------------- 1 | # Range Field 2 | 3 | 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. 4 | 5 | ## Key Features 6 | 7 | - Slider interface 8 | - Min/max value limits 9 | - Step increment control 10 | - Visual value display 11 | - Prepend/append text 12 | 13 | ## Settings 14 | 15 | - Default Value - Starting position 16 | - Min - Minimum allowed value 17 | - Max - Maximum allowed value 18 | - Step - Value increment size 19 | - Prepend/Append - Add text before/after 20 | -------------------------------------------------------------------------------- /docs/features/field/range/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Range Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Range field 7 | 3. Configure options: 8 | - Set min/max values 9 | - Configure step size 10 | - Add prepend/append text 11 | - Set default value 12 | 13 | ## Common Use Cases 14 | 15 | 1. Numeric Ranges 16 | - Volume controls 17 | - Percentage settings 18 | - Scale selections 19 | 20 | 2. Visual Settings 21 | - Opacity levels 22 | - Size adjustments 23 | - Intensity controls 24 | 25 | ## Tips 26 | 27 | - Set intuitive ranges 28 | - Use clear min/max values 29 | - Consider step granularity 30 | - Add helpful labels 31 | -------------------------------------------------------------------------------- /docs/features/field/repeater/index.md: -------------------------------------------------------------------------------- 1 | # Repeater Field 2 | 3 | The Repeater field allows you to create a set of sub fields which can be repeated again and again. 4 | 5 | ## Key Features 6 | 7 | - Flexible row management 8 | - Multiple field types support 9 | - Nested repeater capability 10 | - Row reordering 11 | - Min/max rows control 12 | 13 | ## Settings 14 | 15 | - Sub Fields - Add fields to repeat 16 | - Minimum Rows - Set required rows 17 | - Maximum Rows - Limit total rows 18 | - Layout - Table or block display 19 | - Button Label - Customize add row text 20 | -------------------------------------------------------------------------------- /docs/features/field/repeater/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Repeater Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Repeater field 7 | 3. Configure options: 8 | - Add sub fields 9 | - Set min/max rows 10 | - Choose layout style 11 | - Configure labels 12 | 13 | ## Common Use Cases 14 | 15 | 1. Dynamic Content 16 | - Social media links 17 | - Team members 18 | - Feature lists 19 | 20 | 2. Content Management 21 | - Gallery items 22 | - Related links 23 | - Service offerings 24 | 25 | ## Tips 26 | 27 | - Plan field structure carefully 28 | - Consider nesting depth 29 | - Use clear labels 30 | - Set appropriate limits 31 | -------------------------------------------------------------------------------- /docs/features/field/select/index.md: -------------------------------------------------------------------------------- 1 | # Select Field 2 | 3 | The Select field provides a dropdown interface for selecting single or multiple options from a predefined list. 4 | 5 | ## Key Features 6 | 7 | - Single/multiple selection 8 | - Custom choices 9 | - Ajax loading support 10 | - Placeholder text 11 | - Conditional logic 12 | 13 | ## Settings 14 | 15 | - Choices - Define available options 16 | - Default Value - Set initial selection 17 | - Allow Null - Make selection optional 18 | - Multiple - Enable multiple selections 19 | - UI - Enhanced select interface 20 | -------------------------------------------------------------------------------- /docs/features/field/select/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Select Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Select field 7 | 3. Configure options: 8 | - Add choice options 9 | - Set default value 10 | - Configure UI settings 11 | - Enable/disable features 12 | 13 | ## Common Use Cases 14 | 15 | 1. Option Selection 16 | - Status choices 17 | - Category selection 18 | - Preference settings 19 | 20 | 2. Data Filtering 21 | - View options 22 | - Content filtering 23 | - Display settings 24 | 25 | ## Tips 26 | 27 | - Use clear option labels 28 | - Consider grouping options 29 | - Enable search for long lists 30 | - Set meaningful defaults 31 | -------------------------------------------------------------------------------- /docs/features/field/separator/index.md: -------------------------------------------------------------------------------- 1 | # Separator Field 2 | 3 | The Separator field provides visual separation between fields in the editing interface. It helps organize and structure field layouts. 4 | 5 | ## Key Features 6 | 7 | - Visual organization 8 | - Custom styling 9 | - Layout control 10 | - Group separation 11 | - Visual hierarchy 12 | 13 | ## Settings 14 | 15 | - Label - Optional separator text 16 | - Instructions - Field description 17 | - Wrapper - CSS class options 18 | -------------------------------------------------------------------------------- /docs/features/field/separator/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Separator Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Separator field 7 | 3. Configure options: 8 | - Set label text 9 | - Add instructions 10 | - Style wrapper 11 | - Position field 12 | 13 | ## Common Use Cases 14 | 15 | 1. Content Organization 16 | - Section breaks 17 | - Field grouping 18 | - Visual hierarchy 19 | 20 | 2. Form Structure 21 | - Content sections 22 | - Logical breaks 23 | - Visual spacing 24 | 25 | ## Tips 26 | 27 | - Use clear labels 28 | - Keep consistent styling 29 | - Consider spacing 30 | - Group related fields 31 | -------------------------------------------------------------------------------- /docs/features/field/tab/index.md: -------------------------------------------------------------------------------- 1 | # Tab Field 2 | 3 | The Tab field creates navigation tabs to organize fields into sections. It improves the editing interface by grouping related fields together. 4 | 5 | ## Key Features 6 | 7 | - Field organization 8 | - Visual navigation 9 | - Grouped content 10 | - Layout control 11 | - Conditional display 12 | 13 | ## Settings 14 | 15 | - Placement - Top/Left alignment 16 | - Endpoint - Tab section end 17 | - Label - Tab name 18 | - Instructions - Optional help text 19 | -------------------------------------------------------------------------------- /docs/features/field/tab/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Tab Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Tab field 7 | 3. Configure options: 8 | - Set tab label 9 | - Choose placement 10 | - Set endpoint 11 | - Add instructions 12 | 13 | ## Common Use Cases 14 | 15 | 1. Content Organization 16 | - Content sections 17 | - Settings groups 18 | - Form organization 19 | 20 | 2. Interface Design 21 | - Complex forms 22 | - Settings panels 23 | - Data grouping 24 | 25 | ## Tips 26 | 27 | - Use clear tab labels 28 | - Group related fields 29 | - Consider tab order 30 | - Plan section breaks 31 | -------------------------------------------------------------------------------- /docs/features/field/taxonomy/index.md: -------------------------------------------------------------------------------- 1 | # Taxonomy Field 2 | 3 | The Taxonomy field creates an interface for selecting taxonomy terms. It supports multiple selection methods and term management. 4 | 5 | ## Key Features 6 | 7 | - Term selection 8 | - Multiple display types 9 | - Term creation 10 | - Hierarchical support 11 | - Load on demand 12 | 13 | ## Settings 14 | 15 | - Taxonomy - Choose taxonomy 16 | - Appearance - Select UI style 17 | - Allow Create - Enable term creation 18 | - Load Terms - Auto-load options 19 | - Save Terms - Term relationships 20 | -------------------------------------------------------------------------------- /docs/features/field/taxonomy/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Taxonomy Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Taxonomy field 7 | 3. Configure options: 8 | - Select taxonomy 9 | - Choose field type 10 | - Set load behavior 11 | - Configure saving 12 | 13 | ## Common Use Cases 14 | 15 | 1. Content Classification 16 | - Categories 17 | - Tags 18 | - Custom taxonomies 19 | 20 | 2. Term Management 21 | - Content organization 22 | - Filtering systems 23 | - Related content 24 | 25 | ## Tips 26 | 27 | - Choose appropriate UI 28 | - Consider term hierarchy 29 | - Enable term creation 30 | - Plan relationship structure 31 | -------------------------------------------------------------------------------- /docs/features/field/text/index.md: -------------------------------------------------------------------------------- 1 | # Text Field 2 | 3 | The Text field provides a standard single-line text input with various formatting and validation options. 4 | 5 | ## Key Features 6 | 7 | - Text input 8 | - Character limits 9 | - Placeholder text 10 | - Prepend/append 11 | - Custom formatting 12 | 13 | ## Settings 14 | 15 | - Default Value - Preset text 16 | - Placeholder - Input helper text 17 | - Character Limit - Set max length 18 | - Prepend - Text before input 19 | - Append - Text after input 20 | -------------------------------------------------------------------------------- /docs/features/field/text/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Text Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Text field 7 | 3. Configure options: 8 | - Set placeholder 9 | - Add character limits 10 | - Configure formatting 11 | - Set default value 12 | 13 | ## Common Use Cases 14 | 15 | 1. Basic Information 16 | - Titles 17 | - Names 18 | - Short descriptions 19 | - References 20 | 21 | 2. Form Elements 22 | - Input fields 23 | - Search boxes 24 | - Labels 25 | - Identifiers 26 | 27 | ## Tips 28 | 29 | - Use clear placeholders 30 | - Set appropriate limits 31 | - Consider validation 32 | - Use meaningful defaults 33 | -------------------------------------------------------------------------------- /docs/features/field/textarea/index.md: -------------------------------------------------------------------------------- 1 | # Textarea Field 2 | 3 | The Textarea field provides a multi-line text input for longer content with formatting options and character limits. 4 | 5 | ## Key Features 6 | 7 | - Multi-line text input 8 | - Character counting 9 | - Rows configuration 10 | - New line handling 11 | - Placeholder support 12 | 13 | ## Settings 14 | 15 | - Default Value - Preset content 16 | - Placeholder - Helper text 17 | - Character Limit - Max length 18 | - Rows - Input height 19 | - New Lines - Handling options 20 | -------------------------------------------------------------------------------- /docs/features/field/textarea/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Textarea Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Textarea field 7 | 3. Configure options: 8 | - Set rows 9 | - Add placeholder 10 | - Configure limits 11 | - Set line handling 12 | 13 | ## Common Use Cases 14 | 15 | 1. Long Text Content 16 | - Descriptions 17 | - Biographies 18 | - Instructions 19 | - Notes 20 | 21 | 2. Content Management 22 | - Excerpts 23 | - Summaries 24 | - Meta descriptions 25 | - Comments 26 | 27 | ## Tips 28 | 29 | - Set appropriate height 30 | - Consider word limits 31 | - Use clear placeholders 32 | - Plan for formatting 33 | -------------------------------------------------------------------------------- /docs/features/field/time-picker/index.md: -------------------------------------------------------------------------------- 1 | # Time Picker Field 2 | 3 | The Time Picker field provides an interface for selecting time values with customizable display and increment options. 4 | 5 | ## Key Features 6 | 7 | - Time selection 8 | - Format options 9 | - Step intervals 10 | - Range limits 11 | - Display customization 12 | 13 | ## Settings 14 | 15 | - Display Format - Time format 16 | - Return Format - Data format 17 | - Time Increment - Minute steps 18 | - Placeholder - Helper text 19 | - Default Value - Preset time 20 | -------------------------------------------------------------------------------- /docs/features/field/time-picker/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the Time Picker Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a Time Picker field 7 | 3. Configure options: 8 | - Set time format 9 | - Choose increment 10 | - Set default time 11 | - Configure display 12 | 13 | ## Common Use Cases 14 | 15 | 1. Schedule Management 16 | - Event times 17 | - Opening hours 18 | - Appointment slots 19 | 20 | 2. Time Settings 21 | - Scheduling 22 | - Time restrictions 23 | - Operating hours 24 | 25 | ## Tips 26 | 27 | - Use consistent formats 28 | - Set appropriate steps 29 | - Consider time zones 30 | - Plan for validation 31 | -------------------------------------------------------------------------------- /docs/features/field/true-false/index.md: -------------------------------------------------------------------------------- 1 | # True/False Field 2 | 3 | The True/False field provides a simple toggle switch for boolean values. It offers a clean interface for yes/no choices. 4 | 5 | ## Key Features 6 | 7 | - Toggle interface 8 | - Custom labels 9 | - Default state 10 | - Message display 11 | - UI customization 12 | 13 | ## Settings 14 | 15 | - Message - Field description 16 | - Default Value - Initial state 17 | - On Text - Custom label 18 | - Off Text - Custom label 19 | - UI - Style options 20 | -------------------------------------------------------------------------------- /docs/features/field/true-false/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the True/False Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a True/False field 7 | 3. Configure options: 8 | - Set message 9 | - Choose default 10 | - Configure labels 11 | - Style interface 12 | 13 | ## Common Use Cases 14 | 15 | 1. Simple Toggles 16 | - Feature flags 17 | - Display options 18 | - Status switches 19 | 20 | 2. Settings Control 21 | - Visibility settings 22 | - Enable/disable 23 | - Option toggles 24 | 25 | ## Tips 26 | 27 | - Use clear labels 28 | - Set logical defaults 29 | - Consider UI placement 30 | - Plan conditional logic 31 | -------------------------------------------------------------------------------- /docs/features/field/url/index.md: -------------------------------------------------------------------------------- 1 | # URL Field 2 | 3 | The URL field provides input for web addresses with validation and formatting options. It ensures proper URL format and structure. 4 | 5 | ## Key Features 6 | 7 | - URL validation 8 | - Protocol handling 9 | - Placeholder text 10 | - Custom formatting 11 | - Link preview 12 | 13 | ## Settings 14 | 15 | - Default Value - Preset URL 16 | - Placeholder - Helper text 17 | - Protocol - Required/optional 18 | - Return Format - URL structure 19 | -------------------------------------------------------------------------------- /docs/features/field/url/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the URL Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a URL field 7 | 3. Configure options: 8 | - Set placeholder 9 | - Configure protocol 10 | - Set validation 11 | - Choose format 12 | 13 | ## Common Use Cases 14 | 15 | 1. Web Links 16 | - Website URLs 17 | - Social profiles 18 | - Resource links 19 | 20 | 2. Reference Links 21 | - Documentation 22 | - External content 23 | - Media sources 24 | 25 | ## Tips 26 | 27 | - Validate URLs properly 28 | - Consider protocols 29 | - Use clear placeholders 30 | - Check link validity 31 | -------------------------------------------------------------------------------- /docs/features/field/user/index.md: -------------------------------------------------------------------------------- 1 | # User Field 2 | 3 | The User field creates an interface for selecting WordPress users. It supports multiple selection methods and user filtering. 4 | 5 | ## Key Features 6 | 7 | - User selection 8 | - Role filtering 9 | - Multiple formats 10 | - Search capability 11 | - Multiple selection 12 | 13 | ## Settings 14 | 15 | - Roles - Filter by role 16 | - Allow Null - Optional selection 17 | - Multiple - Enable multiple 18 | - Return Format - Object/ID/Array 19 | - Filter - User query args 20 | -------------------------------------------------------------------------------- /docs/features/field/user/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the User Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a User field 7 | 3. Configure options: 8 | - Select roles 9 | - Set return format 10 | - Configure multiple 11 | - Set filters 12 | 13 | ## Common Use Cases 14 | 15 | 1. User Assignment 16 | - Author selection 17 | - Team members 18 | - User permissions 19 | 20 | 2. User Relations 21 | - Content ownership 22 | - User groups 23 | - Access control 24 | 25 | ## Tips 26 | 27 | - Filter appropriate roles 28 | - Consider permissions 29 | - Use clear search 30 | - Plan user structure 31 | -------------------------------------------------------------------------------- /docs/features/field/wysiwyg/index.md: -------------------------------------------------------------------------------- 1 | # WYSIWYG Field 2 | 3 | The WYSIWYG (What You See Is What You Get) field provides a rich text editor with formatting tools and media integration. 4 | 5 | ## Key Features 6 | 7 | - Rich text editing 8 | - Media integration 9 | - Toolbar customization 10 | - HTML handling 11 | - Editor styles 12 | 13 | ## Settings 14 | 15 | - Toolbar - Editor tools 16 | - Media Upload - Enable/disable 17 | - Tabs - Visual/Text tabs 18 | - Height - Editor height 19 | - Default Value - Initial content 20 | -------------------------------------------------------------------------------- /docs/features/field/wysiwyg/tutorial.md: -------------------------------------------------------------------------------- 1 | # Using the WYSIWYG Field 2 | 3 | ## Basic Setup 4 | 5 | 1. Create a new Field Group 6 | 2. Add a WYSIWYG field 7 | 3. Configure options: 8 | - Choose toolbar 9 | - Set media options 10 | - Configure height 11 | - Set defaults 12 | 13 | ## Common Use Cases 14 | 15 | 1. Rich Content 16 | - Post content 17 | - Product descriptions 18 | - Page sections 19 | 20 | 2. Formatted Text 21 | - Documentation 22 | - Guidelines 23 | - Formatted messages 24 | 25 | ## Tips 26 | 27 | - Configure appropriate tools 28 | - Consider media handling 29 | - Plan content structure 30 | - Set consistent styling 31 | -------------------------------------------------------------------------------- /docs/features/post-types.md: -------------------------------------------------------------------------------- 1 | # Custom Post Types 2 | 3 | Learn how to create and manage custom post types with SCF. 4 | 5 | ## Creating Post Types 6 | 7 | ### Basic Usage 8 | 9 | Create a custom post type through the admin interface: 10 | 11 | 1. Navigate to Custom Fields → Post Types 12 | 2. Click "Add New" 13 | 3. Configure basic settings 14 | 4. Save and publish 15 | 16 | ### Advanced Configuration 17 | 18 | - **Capabilities**: Set custom capabilities for managing posts 19 | - **REST API**: Enable and configure REST API support 20 | - **Archive Pages**: Configure archive behavior and permalinks 21 | - **Custom Permalinks**: Set up SEO-friendly URL structures 22 | 23 | ## Best Practices 24 | 25 | 1. Choose descriptive post type names 26 | 2. Configure proper labels for better UX 27 | 3. Plan taxonomy relationships 28 | 4. Consider permalink structure 29 | 5. Set appropriate capabilities 30 | 31 | ## Examples 32 | 33 | Common use cases for custom post types: 34 | 35 | - Products 36 | - Team Members 37 | - Portfolio Items 38 | - Testimonials 39 | - Events 40 | -------------------------------------------------------------------------------- /docs/features/scf-api.md: -------------------------------------------------------------------------------- 1 | # API Reference 2 | 3 | The Secure Custom Fields API provides programmatic access to field data and plugin functionality. 4 | 5 | ## Core Functions 6 | 7 | ### Field Operations 8 | 9 | - Get field values 10 | - Update field data 11 | - Delete field content 12 | - Check field existence 13 | 14 | ### Post Type Management 15 | 16 | - Register post types 17 | - Modify post type settings 18 | - Handle custom capabilities 19 | - Manage taxonomies 20 | 21 | ## Integration Points 22 | 23 | 1. **WordPress Core** 24 | - Post type registration 25 | - Taxonomy integration 26 | - Capability handling 27 | 28 | 2. **Theme Integration** 29 | - Template functions 30 | - Conditional tags 31 | - Layout helpers 32 | 33 | 3. **Plugin Compatibility** 34 | - REST API support 35 | - Cache integration 36 | - Query modifications 37 | 38 | ## Best Practices 39 | 40 | 1. Always sanitize input 41 | 2. Validate data types 42 | 3. Use proper escaping 43 | 4. Check capabilities 44 | 5. Follow WordPress coding standards 45 | -------------------------------------------------------------------------------- /docs/tutorials/first-post-type.md: -------------------------------------------------------------------------------- 1 | # Creating Your First Post Type 2 | 3 | A step-by-step guide to creating a custom post type using Secure Custom Fields. 4 | 5 | ## Prerequisites 6 | 7 | - SCF installed and activated 8 | - Administrator access to WordPress 9 | - Basic understanding of WordPress concepts 10 | 11 | ## Steps 12 | 13 | 1. **Access the Admin Panel** 14 | - Navigate to Custom Fields → Post Types 15 | - Click "Add New" 16 | 17 | 2. **Basic Configuration** 18 | - Enter a descriptive name 19 | - Configure labels 20 | - Set visibility options 21 | 22 | 3. **Advanced Settings** 23 | - Configure permalinks 24 | - Set up taxonomies 25 | - Define capabilities 26 | 27 | 4. **Testing** 28 | - Save your post type 29 | - Create a test post 30 | - View on front end 31 | 32 | ## Next Steps 33 | 34 | - Add custom fields to your post type 35 | - Configure archive displays 36 | - Set up custom taxonomies 37 | -------------------------------------------------------------------------------- /docs/tutorials/index.md: -------------------------------------------------------------------------------- 1 | # Tutorials 2 | 3 | Step-by-step guides for working with Secure Custom Fields. 4 | 5 | ## Getting Started 6 | 7 | - [Creating Your First Post Type](first-post-type) - Basic post type setup 8 | - [Field Group Basics](field-group-basics) - Creating and configuring field groups 9 | - [Working with Fields](working-with-fields) - Using different field types 10 | 11 | ## Advanced Topics 12 | 13 | - Custom Field Validation 14 | - Complex Layouts with Flexible Content 15 | - Advanced Post Type Configuration 16 | - REST API Integration 17 | 18 | ## Best Practices 19 | 20 | Each tutorial follows these principles: 21 | 22 | - Clear step-by-step instructions 23 | - Practical examples 24 | - Security considerations 25 | - Performance optimization tips 26 | -------------------------------------------------------------------------------- /docs/welcome/quick-start.md: -------------------------------------------------------------------------------- 1 | # Quick Start Guide 2 | 3 | This guide will help you create your first custom field group with Secure Custom Fields. 4 | 5 | ## Creating a Field Group 6 | 7 | 1. Navigate to Custom Fields → Add New 8 | 2. Enter a title for your field group 9 | 3. Click "Add Field" 10 | 4. Choose a field type 11 | 5. Configure the field settings 12 | 6. Set the location rules 13 | 7. Save the field group 14 | 15 | ## Example: Author Bio 16 | 17 | Let's create a simple author bio field group: 18 | 19 | 1. Create a new field group called "Author Profile" 20 | 2. Add these fields: 21 | - Profile Image (Image field) 22 | - Bio (Textarea field) 23 | - Social Links (Repeater field) 24 | 3. Set location to "User Form" 25 | 4. Save and test 26 | 27 | ## Next Steps 28 | 29 | - Learn about [field types](../features/fields) 30 | - Explore [advanced features](../features/README) 31 | - Read the [security guidelines](../concepts/security) 32 | -------------------------------------------------------------------------------- /includes/Meta/Comment.php: -------------------------------------------------------------------------------- 1 | get_page_templates( null, $post_type ); 28 | if ( $templates ) { 29 | $post_templates[ $post_type ] = $templates; 30 | } 31 | } 32 | } 33 | 34 | // Update store. 35 | acf_set_data( 'post_templates', $post_templates ); 36 | 37 | // Return templates. 38 | return $post_templates; 39 | } 40 | -------------------------------------------------------------------------------- /includes/admin/beta-features/class-scf-beta-feature-editor-sidebar.php: -------------------------------------------------------------------------------- 1 | name = 'editor_sidebar'; 34 | $this->title = __( 'Move Elements to Editor Sidebar', 'secure-custom-fields' ); 35 | $this->description = __( 'Moves field group elements to the editor sidebar for a cleaner interface.', 'secure-custom-fields' ); 36 | } 37 | } 38 | endif; 39 | -------------------------------------------------------------------------------- /includes/admin/beta-features/index.php: -------------------------------------------------------------------------------- 1 | 9 |
10 |
11 | 12 |

13 |

14 | 17 |

18 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /includes/admin/views/acf-field-group/location-group.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |

4 | 5 | 6 | 7 | $rule ) : 9 | 10 | // validate rule 11 | $rule = acf_validate_location_rule( $rule ); 12 | 13 | // append id and group 14 | $rule['id'] = "rule_{$i}"; 15 | $rule['group'] = $group_id; 16 | 17 | // view 18 | acf_get_view( 19 | 'acf-field-group/location-rule', 20 | array( 21 | 'rule' => $rule, 22 | ) 23 | ); 24 | endforeach; 25 | ?> 26 | 27 |
28 | 29 |
30 | -------------------------------------------------------------------------------- /includes/admin/views/acf-post-type/index.php: -------------------------------------------------------------------------------- 1 | 9 |
10 |
11 | 12 |

13 |

14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /includes/admin/views/acf-taxonomy/index.php: -------------------------------------------------------------------------------- 1 | 9 | 10 |
11 |
12 | 13 |

14 |

15 | 16 |
17 |
18 | -------------------------------------------------------------------------------- /includes/admin/views/acf-ui-options-page/list-empty.php: -------------------------------------------------------------------------------- 1 | 9 | 10 |
11 |
12 | 13 | 14 | 17 | 18 |

19 |

20 | 21 | 22 |
23 |
24 | -------------------------------------------------------------------------------- /includes/admin/views/global/header.php: -------------------------------------------------------------------------------- 1 | labels->name; 15 | } 16 | if ( $page_title ) { 17 | ?> 18 |
19 | 20 |

21 | 24 |

25 | cap->create_posts ) ) { 27 | $class = 'acf-btn acf-btn-sm'; 28 | 29 | printf( 30 | '%3$s', 31 | esc_url( admin_url( $post_new_file ) ), 32 | esc_attr( $class ), 33 | esc_html( $post_type_object->labels->add_new ) 34 | ); 35 | } 36 | ?> 37 | 38 |
39 | 40 | -------------------------------------------------------------------------------- /includes/admin/views/global/index.php: -------------------------------------------------------------------------------- 1 | 11 |
12 | 13 |

16 |

17 | 18 |
19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /includes/admin/views/upgrade/index.php: -------------------------------------------------------------------------------- 1 | name = 'output'; 20 | $this->label = 'output'; 21 | $this->public = false; 22 | $this->defaults = array( 23 | 'html' => false, 24 | ); 25 | } 26 | 27 | 28 | /** 29 | * The render field call. Deprecated since ACF 6.3.2. 30 | * 31 | * @param array $field The $field being edited 32 | * @return false 33 | */ 34 | public function render_field( $field ) { 35 | 36 | // Deprecated since ACF 6.3.2 and will be removed in a future release. 37 | _deprecated_function( __FUNCTION__, '6.3.2' ); 38 | return false; 39 | } 40 | } 41 | 42 | 43 | // initialize 44 | acf_register_field_type( 'acf_field_output' ); 45 | endif; // class_exists check 46 | -------------------------------------------------------------------------------- /includes/fields/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | . 6 | 7 | 8 | ./tests 9 | ./vendor 10 | ./node_modules 11 | ./wordpress 12 | 13 | 14 | 15 | 16 | ./tests/php/ 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@playwright/test'; 2 | 3 | const baseConfig = require( '@wordpress/scripts/config/playwright.config.js' ); 4 | const config = defineConfig( { 5 | ...baseConfig, 6 | testDir: './tests/e2e', 7 | } ); 8 | export default config; -------------------------------------------------------------------------------- /pro/README.md: -------------------------------------------------------------------------------- 1 | This directory remains to ensure compatability with plugins that extend ACF Pro and may check for or include any of these files directly. -------------------------------------------------------------------------------- /pro/acf-pro.php: -------------------------------------------------------------------------------- 1 | 15 |

Movie title:

-------------------------------------------------------------------------------- /tests/e2e/plugins/scf-test-get-field-comment.php: -------------------------------------------------------------------------------- 1 | Comment title: ' . $field . '

'; 29 | } 30 | 31 | return ''; 32 | } 33 | 34 | add_filter( 'comment_text', 'scf_add_get_field_at_the_end_comment', 10, 2 ); 35 | -------------------------------------------------------------------------------- /tests/e2e/plugins/scf-test-get-field-option.php: -------------------------------------------------------------------------------- 1 | Option title: ' . $field . '

'; 26 | } 27 | 28 | return ''; 29 | } 30 | 31 | add_filter( 'the_content', 'scf_add_get_field_at_the_end_option' ); 32 | -------------------------------------------------------------------------------- /tests/e2e/plugins/scf-test-get-field-scf-block.php: -------------------------------------------------------------------------------- 1 | Term title: ' . $field . '

'; 28 | } 29 | 30 | return ''; 31 | } 32 | 33 | add_filter( 'the_content', 'scf_add_get_field_at_the_end_option' ); 34 | -------------------------------------------------------------------------------- /tests/e2e/plugins/scf-test-get-field-user.php: -------------------------------------------------------------------------------- 1 | User title: ' . $field . '

'; 27 | } 28 | 29 | return ''; 30 | } 31 | 32 | add_filter( 'the_content', 'scf_add_get_field_at_the_end_option' ); 33 | -------------------------------------------------------------------------------- /tests/e2e/plugins/scf-test-get-field.php: -------------------------------------------------------------------------------- 1 | Movie title: ' . $field . '

'; 25 | } 26 | 27 | return ''; 28 | } 29 | 30 | add_filter( 'the_content', 'scf_add_get_field_at_the_end' ); 31 | -------------------------------------------------------------------------------- /tests/php/bootstrap.php: -------------------------------------------------------------------------------- 1 | assertTrue( class_exists( 'ACF' ), 'ACF class should exist' ); 20 | } 21 | 22 | /** 23 | * Test if ACF instance is available 24 | */ 25 | public function test_acf_instance_available() { 26 | $acf = acf(); 27 | $this->assertInstanceOf( 'ACF', $acf, 'ACF instance should be available via acf() function' ); 28 | } 29 | 30 | /** 31 | * Test if ACF version is defined 32 | */ 33 | public function test_acf_version_defined() { 34 | $acf = acf(); 35 | $this->assertNotEmpty( $acf->version, 'ACF version should be defined' ); 36 | } 37 | } 38 | --------------------------------------------------------------------------------