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() );
 | |
| }
 |