224 lines
5.3 KiB
PHP
224 lines
5.3 KiB
PHP
|
<?php
|
||
|
|
||
|
// Register store.
|
||
|
acf_register_store( 'hook-variations' );
|
||
|
|
||
|
/**
|
||
|
* acf_add_filter_variations
|
||
|
*
|
||
|
* Registers variations for the given filter.
|
||
|
*
|
||
|
* @date 26/1/19
|
||
|
* @since 5.7.11
|
||
|
*
|
||
|
* @param string $filter The filter name.
|
||
|
* @param array $variations An array variation keys.
|
||
|
* @param int $index The param index to find variation values.
|
||
|
* @return void
|
||
|
*/
|
||
|
function acf_add_filter_variations( $filter = '', $variations = array(), $index = 0 ) {
|
||
|
|
||
|
// Store replacement data.
|
||
|
acf_get_store( 'hook-variations' )->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];
|
||
|
}
|
||
|
|