Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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