145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Cache helper
 | |
|  *
 | |
|  * @package     EDD
 | |
|  * @subpackage  Core
 | |
|  * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | |
|  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since       1.7
 | |
| */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * EDD_Cache_Helper class.
 | |
|  *
 | |
|  * @since 1.7
 | |
|  */
 | |
| class EDD_Cache_Helper {
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor.
 | |
| 	 *
 | |
| 	 * @since 1.7
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		add_action( 'init', array( $this, 'init' ), 0 );
 | |
| 		add_action( 'admin_notices', array( $this, 'notices' ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Prevent caching on dynamic pages.
 | |
| 	 *
 | |
| 	 * @since 1.7
 | |
| 	 */
 | |
| 	public function init() {
 | |
| 		$page_uris = get_transient( 'edd_cache_excluded_uris' );
 | |
| 
 | |
| 		if ( false === $page_uris ) {
 | |
| 			$purchase_page = edd_get_option( 'purchase_page', '' );
 | |
| 			$success_page  = edd_get_option( 'success_page', '' );
 | |
| 
 | |
| 			// Bail if purchase or success page has not been set.
 | |
| 			if ( empty( $purchase_page ) || empty( $success_page ) ) {
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			$page_uris = array();
 | |
| 
 | |
| 			// Exclude query string when using page ID.
 | |
| 			$page_uris[] = 'p=' . $purchase_page;
 | |
| 			$page_uris[] = 'p=' . $success_page;
 | |
| 
 | |
| 			// Exclude permalinks.
 | |
| 			$checkout_page = get_post( $purchase_page );
 | |
| 			$success_page  = get_post( $success_page );
 | |
| 
 | |
| 			if ( ! is_null( $checkout_page ) ) {
 | |
| 				$page_uris[] = '/' . $checkout_page->post_name;
 | |
| 			}
 | |
| 
 | |
| 			if ( ! is_null( $success_page ) ) {
 | |
| 				$page_uris[] = '/' . $success_page->post_name;
 | |
| 			}
 | |
| 
 | |
| 			set_transient( 'edd_cache_excluded_uris', $page_uris );
 | |
| 		}
 | |
| 
 | |
| 		if ( is_array( $page_uris ) ) {
 | |
| 			foreach ( $page_uris as $uri ) {
 | |
| 				if ( strstr( $_SERVER['REQUEST_URI'], $uri ) ) {
 | |
| 					$this->nocache();
 | |
| 					break;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set nocache constants and headers.
 | |
| 	 *
 | |
| 	 * @since 1.7
 | |
| 	 * @access private
 | |
| 	 */
 | |
| 	private function nocache() {
 | |
| 		if ( ! defined( 'DONOTCACHEPAGE' ) ) {
 | |
| 			define( 'DONOTCACHEPAGE', 'true' );
 | |
| 		}
 | |
| 
 | |
| 		nocache_headers();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Admin notices.
 | |
| 	 *
 | |
| 	 * @since 1.7
 | |
| 	 */
 | |
| 	public function notices() {
 | |
| 
 | |
| 		// W3 Total Cache.
 | |
| 		if ( function_exists( 'w3tc_pgcache_flush' ) && function_exists( 'w3_instance' ) ) {
 | |
| 			$config   = w3_instance( 'W3_Config' );
 | |
| 			$enabled  = $config->get_integer( 'dbcache.enabled' );
 | |
| 			$settings = $config->get_array( 'dbcache.reject.sql' );
 | |
| 
 | |
| 			if ( $enabled && ! in_array( '_wp_session_', $settings, true ) ) {
 | |
| 				?>
 | |
| 				<div class="error">
 | |
| 					<p>
 | |
| 						<?php
 | |
| 						printf(
 | |
| 							__( 'In order for <strong>database caching</strong> to work with Easy Digital Downloads you must add <code>_wp_session_</code> to the "Ignored query stems" option in W3 Total Cache settings <a href="%s">here</a>.', 'easy-digital-downloads' ),
 | |
| 							esc_url( admin_url( 'admin.php?page=w3tc_dbcache' ) )
 | |
| 						);
 | |
| 						?>
 | |
| 					</p>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Prevents W3TC from adding to the cache prior to modifying data.
 | |
| 	 *
 | |
| 	 * @since 1.7
 | |
| 	 * @since 3.0.4 Removed the cache suspend call.
 | |
| 	 */
 | |
| 	public function w3tc_suspend_cache_addition_pre() {
 | |
| 		// This function does nothing as of EDD 3.0.4, it is only left here to prevent fatal errors in case it was used.
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Prevents W3TC from adding to the cache after modifying data.
 | |
| 	 *
 | |
| 	 * @since 1.7
 | |
| 	 * @since 3.0.4 Removed the cache suspend call.
 | |
| 	 */
 | |
| 	public function w3tc_suspend_cache_addition_post() {
 | |
| 		// This function does nothing as of EDD 3.0.4, it is only left here to prevent fatal errors in case it was used.
 | |
| 	}
 | |
| }
 |