513 lines
13 KiB
PHP
513 lines
13 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* acf_get_field_group
|
||
|
*
|
||
|
* Retrieves a field group for the given identifier.
|
||
|
*
|
||
|
* @date 30/09/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param (int|string) $id The field group ID, key or name.
|
||
|
* @return (array|false) The field group array.
|
||
|
*/
|
||
|
function acf_get_field_group( $id = 0 ) {
|
||
|
return acf_get_internal_post_type( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_raw_field_group
|
||
|
*
|
||
|
* Retrieves raw field group data for the given identifier.
|
||
|
*
|
||
|
* @date 18/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param (int|string) $id The field ID, key or name.
|
||
|
* @return (array|false) The field group array.
|
||
|
*/
|
||
|
function acf_get_raw_field_group( $id = 0 ) {
|
||
|
return acf_get_raw_internal_post_type( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_field_group_post
|
||
|
*
|
||
|
* Retrieves the field group's WP_Post object.
|
||
|
*
|
||
|
* @date 18/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param (int|string) $id The field group's ID, key or name.
|
||
|
* @return (array|false) The field group's array.
|
||
|
*/
|
||
|
function acf_get_field_group_post( $id = 0 ) {
|
||
|
return acf_get_internal_post_type_post( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_is_field_group_key
|
||
|
*
|
||
|
* Returns true if the given identifier is a field group key.
|
||
|
*
|
||
|
* @date 6/12/2013
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param string $id The identifier.
|
||
|
* @return bool
|
||
|
*/
|
||
|
function acf_is_field_group_key( $id = '' ) {
|
||
|
return acf_is_internal_post_type_key( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Ensures the given field group is valid.
|
||
|
*
|
||
|
* @date 18/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_validate_field_group( $field_group = array() ) {
|
||
|
return acf_validate_internal_post_type( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_valid_field_group
|
||
|
*
|
||
|
* Ensures the given field group is valid.
|
||
|
*
|
||
|
* @date 28/09/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_get_valid_field_group( $field_group = false ) {
|
||
|
return acf_validate_field_group( $field_group );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_translate_field_group
|
||
|
*
|
||
|
* Translates a field group's settings.
|
||
|
*
|
||
|
* @date 8/03/2016
|
||
|
* @since 5.3.2
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_translate_field_group( $field_group = array() ) {
|
||
|
return acf_translate_internal_post_type( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_field_groups
|
||
|
*
|
||
|
* Returns and array of field_groups for the given $filter.
|
||
|
*
|
||
|
* @date 30/09/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $filter An array of args to filter results by.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_get_field_groups( $filter = array() ) {
|
||
|
return acf_get_internal_post_type_posts( 'acf-field-group', $filter );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_raw_field_groups
|
||
|
*
|
||
|
* Returns and array of raw field_group data.
|
||
|
*
|
||
|
* @date 18/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param void
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_get_raw_field_groups() {
|
||
|
return acf_get_raw_internal_post_type_posts( 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_filter_field_groups
|
||
|
*
|
||
|
* Returns a filtered aray of field groups based on the given $args.
|
||
|
*
|
||
|
* @date 29/11/2013
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $field_groups An array of field groups.
|
||
|
* @param array $args An array of location args.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_filter_field_groups( $field_groups, $args = array() ) {
|
||
|
return acf_filter_internal_post_type_posts( $field_groups, $args, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_field_group_visibility
|
||
|
*
|
||
|
* Returns true if the given field group's location rules match the given $args.
|
||
|
*
|
||
|
* @date 7/10/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $field_groups An array of field groups.
|
||
|
* @param array $args An array of location args.
|
||
|
* @return bool
|
||
|
*/
|
||
|
function acf_get_field_group_visibility( $field_group, $args = array() ) {
|
||
|
|
||
|
// Check if active.
|
||
|
if ( ! $field_group['active'] ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Check if location rules exist
|
||
|
if ( $field_group['location'] ) {
|
||
|
|
||
|
// Get the current screen.
|
||
|
$screen = acf_get_location_screen( $args );
|
||
|
|
||
|
// Loop through location groups.
|
||
|
foreach ( $field_group['location'] as $group ) {
|
||
|
|
||
|
// ignore group if no rules.
|
||
|
if ( empty( $group ) ) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// Loop over rules and determine if all rules match.
|
||
|
$match_group = true;
|
||
|
foreach ( $group as $rule ) {
|
||
|
if ( ! acf_match_location_rule( $rule, $screen, $field_group ) ) {
|
||
|
$match_group = false;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// If this group matches, show the field group.
|
||
|
if ( $match_group ) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Return default.
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_update_field_group
|
||
|
*
|
||
|
* Updates a field group in the database.
|
||
|
*
|
||
|
* @date 21/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_update_field_group( $field_group ) {
|
||
|
return acf_update_internal_post_type( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* _acf_apply_unique_field_group_slug
|
||
|
*
|
||
|
* Allows full control over 'acf-field-group' slugs.
|
||
|
*
|
||
|
* @date 21/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param string $slug The post slug.
|
||
|
* @param int $post_ID Post ID.
|
||
|
* @param string $post_status The post status.
|
||
|
* @param string $post_type Post type.
|
||
|
* @param int $post_parent Post parent ID
|
||
|
* @param string $original_slug The original post slug.
|
||
|
*/
|
||
|
function _acf_apply_unique_field_group_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
|
||
|
|
||
|
// Check post type and reset to original value.
|
||
|
if ( $post_type === 'acf-field-group' ) {
|
||
|
return $original_slug;
|
||
|
}
|
||
|
|
||
|
// Return slug.
|
||
|
return $slug;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_flush_field_group_cache
|
||
|
*
|
||
|
* Deletes all caches for this field group.
|
||
|
*
|
||
|
* @date 22/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return void
|
||
|
*/
|
||
|
function acf_flush_field_group_cache( $field_group ) {
|
||
|
acf_flush_internal_post_type_cache( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_delete_field_group
|
||
|
*
|
||
|
* Deletes a field group from the database.
|
||
|
*
|
||
|
* @date 21/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param (int|string) $id The field group ID, key or name.
|
||
|
* @return bool True if field group was deleted.
|
||
|
*/
|
||
|
function acf_delete_field_group( $id = 0 ) {
|
||
|
return acf_delete_internal_post_type( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_trash_field_group
|
||
|
*
|
||
|
* Trashes a field group from the database.
|
||
|
*
|
||
|
* @date 2/10/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param (int|string) $id The field group ID, key or name.
|
||
|
* @return bool True if field group was trashed.
|
||
|
*/
|
||
|
function acf_trash_field_group( $id = 0 ) {
|
||
|
return acf_trash_internal_post_type( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_untrash_field_group
|
||
|
*
|
||
|
* Restores a field_group from the trash.
|
||
|
*
|
||
|
* @date 2/10/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param (int|string) $id The field_group ID, key or name.
|
||
|
* @return bool True if field_group was trashed.
|
||
|
*/
|
||
|
function acf_untrash_field_group( $id = 0 ) {
|
||
|
return acf_untrash_internal_post_type( $id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Filter callback which returns the previous post_status instead of "draft" for the "acf-field-group" post type.
|
||
|
*
|
||
|
* Prior to WordPress 5.6.0, this filter was not needed as restored posts were always assigned their original status.
|
||
|
*
|
||
|
* @since 5.9.5
|
||
|
*
|
||
|
* @param string $new_status The new status of the post being restored.
|
||
|
* @param int $post_id The ID of the post being restored.
|
||
|
* @param string $previous_status The status of the post at the point where it was trashed.
|
||
|
* @return string.
|
||
|
*/
|
||
|
function _acf_untrash_field_group_post_status( $new_status, $post_id, $previous_status ) {
|
||
|
return ( get_post_type( $post_id ) === 'acf-field-group' ) ? $previous_status : $new_status;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_is_field_group
|
||
|
*
|
||
|
* Returns true if the given params match a field group.
|
||
|
*
|
||
|
* @date 21/1/19
|
||
|
* @since 5.7.10
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @param mixed $id An optional identifier to search for.
|
||
|
* @return bool
|
||
|
*/
|
||
|
function acf_is_field_group( $field_group = false ) {
|
||
|
return acf_is_internal_post_type( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_duplicate_field_group
|
||
|
*
|
||
|
* Duplicates a field group.
|
||
|
*
|
||
|
* @date 16/06/2014
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param (int|string) $id The field_group ID, key or name.
|
||
|
* @param int $new_post_id Optional post ID to override.
|
||
|
* @return array The new field group.
|
||
|
*/
|
||
|
function acf_duplicate_field_group( $id = 0, $new_post_id = 0 ) {
|
||
|
return acf_duplicate_internal_post_type( $id, $new_post_id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Activates or deactivates a field group.
|
||
|
*
|
||
|
* @param int|string $id The field_group ID, key or name.
|
||
|
* @param bool $activate True if the post should be activated.
|
||
|
* @return bool
|
||
|
*/
|
||
|
function acf_update_field_group_active_status( $id, $activate = true ) {
|
||
|
return acf_update_internal_post_type_active_status( $id, $activate, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_field_group_style
|
||
|
*
|
||
|
* Returns the CSS styles generated from field group settings.
|
||
|
*
|
||
|
* @date 20/10/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return string.
|
||
|
*/
|
||
|
function acf_get_field_group_style( $field_group ) {
|
||
|
|
||
|
// Vars.
|
||
|
$style = '';
|
||
|
$elements = array(
|
||
|
'permalink' => '#edit-slug-box',
|
||
|
'the_content' => '#postdivrich',
|
||
|
'excerpt' => '#postexcerpt',
|
||
|
'custom_fields' => '#postcustom',
|
||
|
'discussion' => '#commentstatusdiv',
|
||
|
'comments' => '#commentsdiv',
|
||
|
'slug' => '#slugdiv',
|
||
|
'author' => '#authordiv',
|
||
|
'format' => '#formatdiv',
|
||
|
'page_attributes' => '#pageparentdiv',
|
||
|
'featured_image' => '#postimagediv',
|
||
|
'revisions' => '#revisionsdiv',
|
||
|
'categories' => '#categorydiv',
|
||
|
'tags' => '#tagsdiv-post_tag',
|
||
|
'send-trackbacks' => '#trackbacksdiv',
|
||
|
);
|
||
|
|
||
|
// Loop over field group settings and generate list of selectors to hide.
|
||
|
if ( is_array( $field_group['hide_on_screen'] ) ) {
|
||
|
$hide = array();
|
||
|
foreach ( $field_group['hide_on_screen'] as $k ) {
|
||
|
if ( isset( $elements[ $k ] ) ) {
|
||
|
$id = $elements[ $k ];
|
||
|
$hide[] = $id;
|
||
|
$hide[] = '#screen-meta label[for=' . substr( $id, 1 ) . '-hide]';
|
||
|
}
|
||
|
}
|
||
|
$style = implode( ', ', $hide ) . ' {display: none;}';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Filters the generated CSS styles.
|
||
|
*
|
||
|
* @date 12/02/2014
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param string $style The CSS styles.
|
||
|
* @param array $field_group The field group array.
|
||
|
*/
|
||
|
return apply_filters( 'acf/get_field_group_style', $style, $field_group );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_get_field_group_edit_link
|
||
|
*
|
||
|
* Checks if the current user can edit the field group and returns the edit url.
|
||
|
*
|
||
|
* @date 23/9/18
|
||
|
* @since 5.7.7
|
||
|
*
|
||
|
* @param int $post_id The field group ID.
|
||
|
* @return string
|
||
|
*/
|
||
|
function acf_get_field_group_edit_link( $post_id ) {
|
||
|
return acf_get_internal_post_type_edit_link( $post_id, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_prepare_field_group_for_export
|
||
|
*
|
||
|
* Returns a modified field group ready for export.
|
||
|
*
|
||
|
* @date 11/03/2014
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_prepare_field_group_for_export( $field_group = array() ) {
|
||
|
return acf_prepare_internal_post_type_for_export( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_prepare_field_group_for_import
|
||
|
*
|
||
|
* Prepares a field group for the import process.
|
||
|
*
|
||
|
* @date 21/11/19
|
||
|
* @since 5.8.8
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array
|
||
|
*/
|
||
|
function acf_prepare_field_group_for_import( $field_group ) {
|
||
|
return acf_prepare_internal_post_type_for_import( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* acf_import_field_group
|
||
|
*
|
||
|
* Imports a field group into the databse.
|
||
|
*
|
||
|
* @date 11/03/2014
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param array $field_group The field group array.
|
||
|
* @return array The new field group.
|
||
|
*/
|
||
|
function acf_import_field_group( $field_group ) {
|
||
|
return acf_import_internal_post_type( $field_group, 'acf-field-group' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns an array of tabs for the field group settings.
|
||
|
* We combine a list of default tabs with filtered tabs.
|
||
|
* I.E. Default tabs should be static and should not be changed by the
|
||
|
* filtered tabs.
|
||
|
*
|
||
|
* @since 6.1
|
||
|
*
|
||
|
* @return array Key/value array of the default settings tabs for field group settings.
|
||
|
*/
|
||
|
function acf_get_combined_field_group_settings_tabs() {
|
||
|
$default_field_group_settings_tabs = array(
|
||
|
'location_rules' => __( 'Location Rules', 'acf' ),
|
||
|
'presentation' => __( 'Presentation', 'acf' ),
|
||
|
'group_settings' => __( 'Group Settings', 'acf' ),
|
||
|
);
|
||
|
|
||
|
$field_group_settings_tabs = (array) apply_filters( 'acf/field_group/additional_group_settings_tabs', array() );
|
||
|
|
||
|
// remove any default tab values from the filter tabs.
|
||
|
foreach ( $field_group_settings_tabs as $key => $tab ) {
|
||
|
if ( isset( $default_field_group_settings_tabs[ $key ] ) ) {
|
||
|
unset( $field_group_settings_tabs[ $key ] );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$combined_field_group_settings_tabs = array_merge( $default_field_group_settings_tabs, $field_group_settings_tabs );
|
||
|
|
||
|
return $combined_field_group_settings_tabs;
|
||
|
}
|