myCRED history in WooCommerce "My Account" with pagination.
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