|
<?php |
|
|
|
/* |
|
Plugin Name: WooCustom My Account |
|
Plugin URI: http://wpbeaches.com/ |
|
Description: WooCustom - add a custom area in my-account |
|
Author: Neil Gee |
|
Version: 1.0.0 |
|
Author URI: http://wpbeaches.com |
|
License: GPL-2.0+ |
|
License URI: http://www.gnu.org/licenses/gpl-2.0.txt |
|
Text Domain: woocustom |
|
Domain Path: /languages/ |
|
*/ |
|
|
|
|
|
/* |
|
* Add custom endpoint that appears in My Account Page - WooCommerce 2.6 |
|
* New URL below as Claudio changed his github username |
|
* Ref - https://gist.github.com/claudiosanches/a79f4e3992ae96cb821d3b357834a005#file-custom-my-account-endpoint-php |
|
*/ |
|
|
|
|
|
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' ), 0 ); |
|
|
|
// 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 Stuff', '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 Stuff', 'woocommerce' ); |
|
|
|
// Insert back the logout item. |
|
$items['customer-logout'] = $logout; |
|
|
|
return $items; |
|
} |
|
|
|
/** |
|
* Endpoint HTML content. |
|
*/ |
|
public function endpoint_content() { |
|
?> |
|
|
|
<div class="woocommerce-MyAccount-content"> |
|
|
|
<p>Hello World! - custom field can go here</p> |
|
|
|
</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(); |
|
|
|
// Flush rewrite rules on plugin activation. |
|
register_activation_hook( __FILE__, array( 'My_Custom_My_Account_Endpoint', 'install' ) ); |
This comment has been minimized.
Hi there thanks for this great work, i am pretty new to WordPress dev . I have used these files added them to plugins/woocommerce/includes directory. But they are taking no effect , sorry now if i sound like a total noob. But where am I going wrong . Thanks