set( $filter, array( 'type' => 'filter', 'variations' => $variations, 'index' => $index, ) ); // Add generic handler. // Use a priotiry of 10, and accepted args of 10 (ignored by WP). add_filter( $filter, '_acf_apply_hook_variations', 10, 10 ); } /** * acf_add_action_variations * * Registers variations for the given action. * * @date 26/1/19 * @since 5.7.11 * * @param string $action The action name. * @param array $variations An array variation keys. * @param int $index The param index to find variation values. * @return void */ function acf_add_action_variations( $action = '', $variations = array(), $index = 0 ) { // Store replacement data. acf_get_store( 'hook-variations' )->set( $action, array( 'type' => 'action', 'variations' => $variations, 'index' => $index, ) ); // Add generic handler. // Use a priotiry of 10, and accepted args of 10 (ignored by WP). add_action( $action, '_acf_apply_hook_variations', 10, 10 ); } /** * _acf_apply_hook_variations * * Applies hook variations during apply_filters() or do_action(). * * @date 25/1/19 * @since 5.7.11 * * @param mixed * @return mixed */ function _acf_apply_hook_variations() { // Get current filter. $filter = current_filter(); // Get args provided. $args = func_get_args(); // Get variation information. $variations = acf_get_store( 'hook-variations' )->get( $filter ); $index = $variations['index']; $type = $variations['type']; $variations = $variations['variations']; // Find field in args using index. $field = $args[ $index ]; // Loop over variations and apply filters. foreach ( $variations as $variation ) { // Get value from field. // First look for "backup" value ("_name", "_key"). if ( isset( $field[ "_$variation" ] ) ) { $value = $field[ "_$variation" ]; } elseif ( isset( $field[ $variation ] ) ) { $value = $field[ $variation ]; } else { continue; } // Apply filters. if ( $type === 'filter' ) { $args[0] = apply_filters_ref_array( "$filter/$variation=$value", $args ); // Or do action. } else { do_action_ref_array( "$filter/$variation=$value", $args ); } } // Return first arg. return $args[0]; } // Register store. acf_register_store( 'deprecated-hooks' ); /** * acf_add_deprecated_filter * * Registers a deprecated filter to run during the replacement. * * @date 25/1/19 * @since 5.7.11 * * @param string $deprecated The deprecated hook. * @param string $version The version this hook was deprecated. * @param string $replacement The replacement hook. * @return void */ function acf_add_deprecated_filter( $deprecated, $version, $replacement ) { // Store replacement data. acf_get_store( 'deprecated-hooks' )->append( array( 'type' => 'filter', 'deprecated' => $deprecated, 'replacement' => $replacement, 'version' => $version, ) ); // Add generic handler. // Use a priority of 10, and accepted args of 10 (ignored by WP). add_filter( $replacement, '_acf_apply_deprecated_hook', 10, 10 ); } /** * acf_add_deprecated_action * * Registers a deprecated action to run during the replacement. * * @date 25/1/19 * @since 5.7.11 * * @param string $deprecated The deprecated hook. * @param string $version The version this hook was deprecated. * @param string $replacement The replacement hook. * @return void */ function acf_add_deprecated_action( $deprecated, $version, $replacement ) { // Store replacement data. acf_get_store( 'deprecated-hooks' )->append( array( 'type' => 'action', 'deprecated' => $deprecated, 'replacement' => $replacement, 'version' => $version, ) ); // Add generic handler. // Use a priority of 10, and accepted args of 10 (ignored by WP). add_filter( $replacement, '_acf_apply_deprecated_hook', 10, 10 ); } /** * Applies a deprecated filter during apply_filters() or do_action(). * * @date 25/1/19 * @since 5.7.11 * * @param mixed * @return mixed */ function _acf_apply_deprecated_hook() { // Get current hook. $current_hook = current_filter(); // Get args provided. $args = func_get_args(); // Get deprecated items for this hook. $deprecated_hooks = acf_get_store( 'deprecated-hooks' )->query( array( 'replacement' => $current_hook ) ); // Loop over results. foreach ( $deprecated_hooks as $hook ) { // Check if anyone is hooked into this deprecated hook. if ( isset( $hook['deprecated'] ) && has_filter( $hook['deprecated'] ) ) { // Log warning. // _deprecated_hook( $deprecated, $version, $hook ); // Apply the item/do the action. if ( $hook['type'] === 'filter' ) { $args[0] = apply_filters_ref_array( $hook['deprecated'], $args ); } else { do_action_ref_array( $hook['deprecated'], $args ); } } } // Return first arg. return $args[0]; }