Last active
January 7, 2025 14:22
-
-
Save symplTech/d29502e10bd61dba58a251c327283d57 to your computer and use it in GitHub Desktop.
Elementor pro fix suggestion issue #9121 elementor-pro/modules/dynamic-tags/acf/module.php
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace ElementorPro\Modules\DynamicTags\ACF; | |
use Elementor\Controls_Manager; | |
use Elementor\Core\DynamicTags\Base_Tag; | |
use Elementor\Modules\DynamicTags; | |
if ( ! defined( 'ABSPATH' ) ) { | |
exit; // Exit if accessed directly | |
} | |
class Module extends DynamicTags\Module { | |
const ACF_GROUP = 'acf'; | |
/** | |
* @param array $types | |
* | |
* @return array | |
*/ | |
public static function get_control_options( $types ) { | |
// ACF >= 5.0.0 | |
if ( function_exists( 'acf_get_field_groups' ) ) { | |
$acf_groups = acf_get_field_groups(); | |
} else { | |
$acf_groups = apply_filters( 'acf/get_field_groups', [] ); | |
} | |
$groups = []; | |
$options_page_groups_ids = []; | |
if ( function_exists( 'acf_options_page' ) ) { | |
$pages = acf_options_page()->get_pages(); | |
foreach ( $pages as $slug => $page ) { | |
$options_page_groups = acf_get_field_groups( [ | |
'options_page' => $slug, | |
] ); | |
foreach ( $options_page_groups as $options_page_group ) { | |
$options_page_groups_ids[] = $options_page_group['ID']; | |
} | |
} | |
} | |
foreach ( $acf_groups as $acf_group ) { | |
// ACF >= 5.0.0 | |
if ( function_exists( 'acf_get_fields' ) ) { | |
if ( isset( $acf_group['ID'] ) && ! empty( $acf_group['ID'] ) ) { | |
$fields = acf_get_fields( $acf_group['ID'] ); | |
} else { | |
$fields = acf_get_fields( $acf_group ); | |
} | |
} else { | |
$fields = apply_filters( 'acf/field_group/get_fields', [], $acf_group['id'] ); | |
} | |
$options = []; | |
if ( ! is_array( $fields ) ) { | |
continue; | |
} | |
$has_option_page_location = in_array( $acf_group['ID'], $options_page_groups_ids, true ); | |
$is_only_options_page = $has_option_page_location && 1 === count( $acf_group['location'] ); | |
foreach ( $fields as $field ) { | |
if ( ! in_array( $field['type'], $types, true ) ) { | |
continue; | |
} | |
// Use group ID for unique keys | |
if ( $has_option_page_location ) { | |
$key = 'options:' . $field['name']; | |
$options[ $key ] = __( 'Options', 'elementor-pro' ) . ':' . $field['label']; | |
if ( $is_only_options_page ) { | |
continue; | |
} | |
} | |
$key = $field['key'] . ':' . $field['name']; | |
$options[ $key ] = $field['label']; | |
} | |
if ( empty( $options ) ) { | |
continue; | |
} | |
if ( 1 === count( $options ) ) { | |
$options = [ -1 => ' -- ' ] + $options; | |
} | |
$groups[] = [ | |
'label' => $acf_group['title'], | |
'options' => $options, | |
]; | |
} // End foreach(). | |
return $groups; | |
} | |
public static function add_key_control( Base_Tag $tag ) { | |
$tag->add_control( | |
'key', | |
[ | |
'label' => __( 'Key', 'elementor-pro' ), | |
'type' => Controls_Manager::SELECT, | |
'groups' => self::get_control_options( $tag->get_supported_fields() ), | |
] | |
); | |
} | |
public function get_tag_classes_names() { | |
return [ | |
'ACF_Text', | |
'ACF_Image', | |
'ACF_URL', | |
'ACF_Gallery', | |
'ACF_File', | |
'ACF_Number', | |
'ACF_Color', | |
]; | |
} | |
// For use by ACF tags | |
public static function get_tag_value_field( Base_Tag $tag ) { | |
$key = $tag->get_settings( 'key' ); | |
if ( ! empty( $key ) ) { | |
list( $field_key, $meta_key ) = explode( ':', $key ); | |
if ( 'options' === $field_key ) { | |
$field = get_field_object( $meta_key, $field_key ); | |
} else { | |
$field = get_field_object( $field_key, get_queried_object() ); | |
} | |
if ($field['value'] == null) { | |
$field = get_field_object($meta_key); | |
} | |
return [ $field, $meta_key ]; | |
} | |
return []; | |
} | |
public function get_groups() { | |
return [ | |
self::ACF_GROUP => [ | |
'title' => __( 'ACF', 'elementor-pro' ), | |
], | |
]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment