Forked from gabrielmerovingi/mycred-history-woo-my-account
Created
February 19, 2019 12:04
-
-
Save tharlab/64e96be06e5d57a4071e20a26f705a20 to your computer and use it in GitHub Desktop.
myCRED history in WooCommerce "My Account" with pagination.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class My_Custom_My_Account_Endpoint { | |
/** | |
* Custom endpoint name. | |
* | |
* @var string | |
*/ | |
public static $endpoint = 'my-custom-endpoint'; | |
/** | |
* Plugin actions. | |
*/ | |
public function __construct() { | |
// Actions used to insert a new endpoint in the WordPress. | |
add_action( 'init', array( $this, 'add_endpoints' ) ); | |
add_filter( 'query_vars', array( $this, 'add_query_vars' ) ); | |
// Change the My Accout page title. | |
add_filter( 'the_title', array( $this, 'endpoint_title' ) ); | |
// Insering your new tab/page into the My Account page. | |
add_filter( 'woocommerce_account_menu_items', array( $this, 'new_menu_items' ) ); | |
add_action( 'woocommerce_account_' . self::$endpoint . '_endpoint', array( $this, 'endpoint_content' ) ); | |
} | |
/** | |
* Register new endpoint to use inside My Account page. | |
* | |
* @see https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/ | |
*/ | |
public function add_endpoints() { | |
add_rewrite_endpoint( self::$endpoint, EP_ROOT | EP_PAGES ); | |
} | |
/** | |
* Add new query var. | |
* | |
* @param array $vars | |
* @return array | |
*/ | |
public function add_query_vars( $vars ) { | |
$vars[] = self::$endpoint; | |
return $vars; | |
} | |
/** | |
* Set endpoint title. | |
* | |
* @param string $title | |
* @return string | |
*/ | |
public function endpoint_title( $title ) { | |
global $wp_query; | |
$is_endpoint = isset( $wp_query->query_vars[ self::$endpoint ] ); | |
if ( $is_endpoint && ! is_admin() && is_main_query() && in_the_loop() && is_account_page() ) { | |
// New page title. | |
$title = __( 'My Custom Endpoint', 'woocommerce' ); | |
remove_filter( 'the_title', array( $this, 'endpoint_title' ) ); | |
} | |
return $title; | |
} | |
/** | |
* Insert the new endpoint into the My Account menu. | |
* | |
* @param array $items | |
* @return array | |
*/ | |
public function new_menu_items( $items ) { | |
// Remove the logout menu item. | |
$logout = $items['customer-logout']; | |
unset( $items['customer-logout'] ); | |
// Insert your custom endpoint. | |
$items[ self::$endpoint ] = __( 'My Custom Endpoint', 'woocommerce' ); | |
// Insert back the logout item. | |
$items['customer-logout'] = $logout; | |
return $items; | |
} | |
/** | |
* Endpoint HTML content. | |
*/ | |
public function endpoint_content() { | |
global $wp; | |
$current_page = ( isset( $wp->query_vars[ self::$endpoint ] ) && ! empty( $wp->query_vars[ self::$endpoint ] ) ) ? absint( $wp->query_vars[ self::$endpoint ] ) : 1; | |
$url = wc_get_endpoint_url( self::$endpoint ); | |
$args = array( | |
'user_id' => get_current_user_id(), | |
'number' => 5, | |
'paged' => $current_page | |
); | |
$wp->query_vars['page'] = $current_page; | |
$log = new myCRED_Query_Log( $args ); | |
?> | |
<div class="mycred-history-wrapper"> | |
<form class="form-inline" role="form" method="get" action=""> | |
<?php $log->display(); ?> | |
<?php | |
if ( $current_page > 2 ) | |
echo '<div class="pull-left"><a href="' . trailingslashit( $url . ( $current_page - 1 ) ) . '">Newer entries</a></div>'; | |
elseif ( $current_page == 2 ) | |
echo '<div class="pull-left"><a href="' . $url . '">Newer entries</a></div>'; | |
if ( $log->max_num_pages > $current_page ) | |
echo '<div class="pull-right"><a href="' . trailingslashit( $url . ( $current_page + 1 ) ) . '">Older entries</a></div>'; | |
?> | |
</form> | |
</div> | |
<?php | |
} | |
/** | |
* Plugin install action. | |
* Flush rewrite rules to make our custom endpoint available. | |
*/ | |
public static function install() { | |
flush_rewrite_rules(); | |
} | |
} | |
new My_Custom_My_Account_Endpoint(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment