136 lines
3.3 KiB
PHP
136 lines
3.3 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Front-end Actions
|
||
|
*
|
||
|
* @package EDD
|
||
|
* @subpackage Functions
|
||
|
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||
|
* @since 1.0.8.1
|
||
|
*/
|
||
|
|
||
|
// Exit if accessed directly
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
/**
|
||
|
* Hooks EDD actions, when present in the $_GET superglobal. Every edd_action
|
||
|
* present in $_GET is called using WordPress's do_action function. These
|
||
|
* functions are called on init.
|
||
|
*
|
||
|
* @since 1.0
|
||
|
* @return void
|
||
|
*/
|
||
|
function edd_get_actions() {
|
||
|
$key = ! empty( $_GET['edd_action'] ) ? sanitize_key( $_GET['edd_action'] ) : false;
|
||
|
|
||
|
$is_delayed_action = edd_is_delayed_action( $key );
|
||
|
|
||
|
if ( $is_delayed_action ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $key ) ) {
|
||
|
do_action( "edd_{$key}" , $_GET );
|
||
|
}
|
||
|
}
|
||
|
add_action( 'init', 'edd_get_actions' );
|
||
|
|
||
|
/**
|
||
|
* Hooks EDD actions, when present in the $_POST superglobal. Every edd_action
|
||
|
* present in $_POST is called using WordPress's do_action function. These
|
||
|
* functions are called on init.
|
||
|
*
|
||
|
* @since 1.0
|
||
|
* @return void
|
||
|
*/
|
||
|
function edd_post_actions() {
|
||
|
$key = ! empty( $_POST['edd_action'] ) ? sanitize_key( $_POST['edd_action'] ) : false;
|
||
|
|
||
|
$is_delayed_action = edd_is_delayed_action( $key );
|
||
|
|
||
|
if ( $is_delayed_action ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $key ) ) {
|
||
|
do_action( "edd_{$key}", $_POST );
|
||
|
}
|
||
|
}
|
||
|
add_action( 'init', 'edd_post_actions' );
|
||
|
|
||
|
/**
|
||
|
* Call any actions that should have been delayed, in order to be sure that all necessary information
|
||
|
* has been loaded by WP Core.
|
||
|
*
|
||
|
* Hooks EDD actions, when present in the $_GET superglobal. Every edd_action
|
||
|
* present in $_POST is called using WordPress's do_action function. These
|
||
|
* functions are called on template_redirect.
|
||
|
*
|
||
|
* @since 2.9.4
|
||
|
* @return void
|
||
|
*/
|
||
|
function edd_delayed_get_actions() {
|
||
|
$key = ! empty( $_GET['edd_action'] ) ? sanitize_key( $_GET['edd_action'] ) : false;
|
||
|
$is_delayed_action = edd_is_delayed_action( $key );
|
||
|
|
||
|
if ( ! $is_delayed_action ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $key ) ) {
|
||
|
do_action( "edd_{$key}", $_GET );
|
||
|
}
|
||
|
}
|
||
|
add_action( 'template_redirect', 'edd_delayed_get_actions' );
|
||
|
|
||
|
/**
|
||
|
* Call any actions that should have been delayed, in order to be sure that all necessary information
|
||
|
* has been loaded by WP Core.
|
||
|
*
|
||
|
* Hooks EDD actions, when present in the $_POST superglobal. Every edd_action
|
||
|
* present in $_POST is called using WordPress's do_action function. These
|
||
|
* functions are called on template_redirect.
|
||
|
*
|
||
|
* @since 2.9.4
|
||
|
* @return void
|
||
|
*/
|
||
|
function edd_delayed_post_actions() {
|
||
|
$key = ! empty( $_POST['edd_action'] ) ? sanitize_key( $_POST['edd_action'] ) : false;
|
||
|
$is_delayed_action = edd_is_delayed_action( $key );
|
||
|
|
||
|
if ( ! $is_delayed_action ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $key ) ) {
|
||
|
do_action( "edd_{$key}", $_POST );
|
||
|
}
|
||
|
}
|
||
|
add_action( 'template_redirect', 'edd_delayed_post_actions' );
|
||
|
|
||
|
/**
|
||
|
* Get the list of actions that EDD has determined need to be delayed past init.
|
||
|
*
|
||
|
* @since 2.9.4
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function edd_delayed_actions_list() {
|
||
|
return (array) apply_filters( 'edd_delayed_actions', array(
|
||
|
'add_to_cart'
|
||
|
) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Determine if the requested action needs to be delayed or not.
|
||
|
*
|
||
|
* @since 2.9.4
|
||
|
*
|
||
|
* @param string $action
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
function edd_is_delayed_action( $action = '' ) {
|
||
|
return in_array( $action, edd_delayed_actions_list() );
|
||
|
}
|