افزودن endpoint جدید توی پنل کابری ووکامرس - وب سایت رضا احمدی

صفحه جدید توی اکانت ووکامرس

افزودن endpoint جدید توی پنل کابری ووکامرس

داشتم روی یه پروژه وردپرسی کار که میگردم از ووکامرس توی پروژه استفاه شده . دنبال یه متدی بودم که به صفحه my-account یه سری endpoint جدید ضافه کنم .توی گیت هاب این کلاس رو دیدم. :

https://gist.github.com/claudiosanches/a79f4e3992ae96cb821d3b357834a005#file-custom-my-account-endpoint-php

ولی یه ایرادی که داشت کل کلاس رو برای یه اندپوینت نوشته بود با تغییرات جزیی اینطوری شد:

  1. <?php
  2. class CMyAccountEP {
  3. 	/**
  4. 	 * Custom endpoint name.
  5. 	 *
  6. 	 * @var string
  7. 	 */
  8. 	public $endpoint = '';
  9. 	public $endpoinTitle='';
  10. 	/**
  11. 	 * Plugin actions.
  12. 	 */
  13. 	public function __construct($epname,$eptitle='') {
  14. 		// Actions used to insert a new endpoint in the WordPress.
  15. 		$this->endpoint=$epname;
  16. 		$this->endpoinTitle=$eptitle;
  17. 		add_action( 'init', array( $this, 'add_endpoints' ) );
  18. 		add_filter( 'woocommerce_get_query_vars', array( $this, 'get_query_vars' ), 0 );
  19. 		// Change the My Accout page title.
  20. 		add_filter( 'the_title', array( $this, 'endpoint_title' ) );
  21. 		// Insering your new tab/page into the My Account page.
  22. 		add_filter( 'woocommerce_account_menu_items', array( $this, 'new_menu_items' ) );
  23. 		add_action( 'woocommerce_account_' . $this->endpoint .  '_endpoint', array( $this, 'endpoint_content' ) );
  24. 	}
  25. 	/**
  26. 	 * Register new endpoint to use inside My Account page.
  27. 	 *
  28. 	 * @see https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/
  29. 	 */
  30. 	public function add_endpoints() {
  31. 		add_rewrite_endpoint( $this->endpoint, EP_ROOT | EP_PAGES );
  32. 	}
  33. 	/**
  34. 	 * Add new query var.
  35. 	 *
  36. 	 * @param array $vars
  37. 	 * @return array
  38. 	 */
  39. 	public function get_query_vars( $vars ) {
  40. 		$vars[ $this->endpoint ] = $this->endpoint;
  41. 		return $vars;
  42. 	}
  43. 	/**
  44. 	 * Set endpoint title.
  45. 	 *
  46. 	 * @param string $title
  47. 	 * @return string
  48. 	 */
  49. 	public function endpoint_title( $title ) {
  50. 		global $wp_query;
  51. 		$is_endpoint = isset( $wp_query->query_vars[ $this->endpoint ] );
  52. 		if ( $is_endpoint && ! is_admin() && is_main_query() && in_the_loop() && is_account_page() ) {
  53. 			// New page title.
  54. 			$title = __( $this->endpoinTitle, 'woocommerce' );
  55. 			remove_filter( 'the_title', array( $this, 'endpoint_title' ) );
  56. 		}
  57. 		return $title;
  58. 	}
  59. 	/**
  60. 	 * Insert the new endpoint into the My Account menu.
  61. 	 *
  62. 	 * @param array $items
  63. 	 * @return array
  64. 	 */
  65. 	public function new_menu_items( $items ) {
  66. 		// Remove the logout menu item.
  67. 		$logout = $items['customer-logout'];
  68. 		unset( $items['customer-logout'] );
  69. 		// Insert your custom endpoint.
  70. 		$items[ $this->endpoint ] = __( $this->endpoinTitle, 'woocommerce' );
  71. 		// Insert back the logout item.
  72. 		$items['customer-logout'] = $logout;
  73. 		return $items;
  74. 	}
  75. 	/**
  76. 	 * Endpoint HTML content.
  77. 	 */
  78. 	public function endpoint_content() {
  79. 		wc_get_template( 'myaccount/'.$this->endpoint.'.php' );
  80. 	}
  81. 	/**
  82. 	 * Plugin install action.
  83. 	 * Flush rewrite rules to make our custom endpoint available.
  84. 	 */
  85. 	public static function install() {
  86. 		flush_rewrite_rules();
  87. 	}
  88. }
  89. new CMyAccountEP('my-ex-ep','my Example Ep');
  90. new CMyAccountEP('another-ep','Another Ep');
  91. // Flush rewrite rules on plugin activation.
  92. //register_activation_hook( __FILE__, array( 'CMyAccountEP', 'install' ) );
  93. // Run Flush in theme function
  94. add_action( 'after_switch_theme', array( 'CMyAccountEP', 'install' ) );

الان با اضافه کردن این فایل توی فانکشن یا توی پلاگینتون میتونین دوتا اند پوینت جدید به ادرسای زیر داشته باشید:

yoururl.com/my-acount/my-ex-ep

yoururl.com/my-acount/another-ep

توجه کنید که برای نشان دادن محتوای این صفحات نیازه دوتا فایل php توی پوشه my-account تمپلیت ووکامرس به همین نام ها( my-ex-ep.php, another-ep.php )داشته باشد…

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دیدگاه های ثبت شده

تا کنون دیدگاهی ثبت نشده است.