2013-08-09 16:11:15 +00:00
< ? php
/**
* WooCommerce Page Functions
*
* Functions related to pages and menus .
*
* @ author WooThemes
* @ category Core
* @ package WooCommerce / Functions
* @ version 2.1 . 0
*/
/**
* Retrieve page ids - used for myaccount , edit_address , shop , cart , checkout , pay , view_order , terms . returns - 1 if no page is found
*
* @ param string $page
* @ return int
*/
2013-11-25 14:07:22 +00:00
function wc_get_page_id ( $page ) {
2013-08-09 16:11:15 +00:00
if ( $page == 'pay' || $page == 'thanks' ) {
2013-11-01 22:00:09 +00:00
_deprecated_argument ( __FUNCTION__ , '2.1' , 'The "pay" and "thanks" pages are no-longer used - an endpoint is added to the checkout instead. To get a valid link use the WC_Order::get_checkout_payment_url() or WC_Order::get_checkout_order_received_url() methods instead.' );
2013-08-09 16:11:15 +00:00
$page = 'checkout' ;
}
if ( $page == 'change_password' || $page == 'edit_address' || $page == 'lost_password' ) {
2013-11-25 14:07:22 +00:00
_deprecated_argument ( __FUNCTION__ , '2.1' , 'The "change_password", "edit_address" and "lost_password" pages are no-longer used - an endpoint is added to the my-account instead. To get a valid link use the wc_customer_edit_account_url() function instead.' );
2013-08-09 16:11:15 +00:00
$page = 'myaccount' ;
}
$page = apply_filters ( 'woocommerce_get_' . $page . '_page_id' , get_option ( 'woocommerce_' . $page . '_page_id' ) );
2014-07-03 14:14:00 +00:00
return $page ? absint ( $page ) : - 1 ;
2013-08-09 16:11:15 +00:00
}
/**
* Get endpoint URL
*
* Gets the URL for an endpoint , which varies depending on permalink settings .
*
* @ return string
*/
2013-11-25 14:07:22 +00:00
function wc_get_endpoint_url ( $endpoint , $value = '' , $permalink = '' ) {
2013-08-09 16:11:15 +00:00
if ( ! $permalink )
$permalink = get_permalink ();
2013-09-03 15:14:56 +00:00
// Map endpoint to options
$endpoint = isset ( WC () -> query -> query_vars [ $endpoint ] ) ? WC () -> query -> query_vars [ $endpoint ] : $endpoint ;
2014-04-24 21:18:41 +00:00
$value = ( 'edit-address' == $endpoint ) ? wc_edit_address_i18n ( $value ) : $value ;
2013-09-03 15:14:56 +00:00
2014-03-03 11:54:49 +00:00
if ( get_option ( 'permalink_structure' ) ) {
if ( strstr ( $permalink , '?' ) ) {
$query_string = '?' . parse_url ( $permalink , PHP_URL_QUERY );
$permalink = current ( explode ( '?' , $permalink ) );
} else {
$query_string = '' ;
}
$url = trailingslashit ( $permalink ) . $endpoint . '/' . $value . $query_string ;
} else {
2013-08-09 16:11:15 +00:00
$url = add_query_arg ( $endpoint , $value , $permalink );
2014-03-03 11:54:49 +00:00
}
2013-08-09 16:11:15 +00:00
return apply_filters ( 'woocommerce_get_endpoint_url' , $url );
}
2014-04-24 21:18:41 +00:00
/**
* Get the edit address slug translation .
*
* @ param string $id Address ID .
* @ param bool $flip Flip the array to make it possible to retrieve the values from both sides .
*
* @ return string Address slug i18n .
*/
function wc_edit_address_i18n ( $id , $flip = false ) {
$slugs = apply_filters ( 'woocommerce_edit_address_slugs' , array (
'billing' => _x ( 'billing' , 'edit-address-slug' , 'woocommerce' ),
'shipping' => _x ( 'shipping' , 'edit-address-slug' , 'woocommerce' )
) );
if ( $flip ) {
$slugs = array_flip ( $slugs );
}
if ( ! isset ( $slugs [ $id ] ) ) {
return $id ;
}
return $slugs [ $id ];
}
2013-08-09 16:11:15 +00:00
/**
2013-11-25 14:07:22 +00:00
* Returns the url to the lost password endpoint url
2013-08-09 16:11:15 +00:00
*
* @ access public
2013-11-29 18:50:31 +00:00
* @ return string
2013-08-09 16:11:15 +00:00
*/
2013-12-02 11:34:27 +00:00
function wc_lostpassword_url () {
2013-11-25 14:07:22 +00:00
return wc_get_endpoint_url ( 'lost-password' , '' , get_permalink ( wc_get_page_id ( 'myaccount' ) ) );
2013-08-09 16:11:15 +00:00
}
2013-12-02 11:34:27 +00:00
add_filter ( 'lostpassword_url' , 'wc_lostpassword_url' , 10 , 0 );
2013-08-09 16:11:15 +00:00
/**
* Get the link to the edit account details page
*
* @ return string
*/
2013-11-25 14:07:22 +00:00
function wc_customer_edit_account_url () {
$edit_account_url = wc_get_endpoint_url ( 'edit-account' , '' , get_permalink ( wc_get_page_id ( 'myaccount' ) ) );
2013-08-09 16:11:15 +00:00
return apply_filters ( 'woocommerce_customer_edit_account_url' , $edit_account_url );
}
/**
2013-08-23 15:41:02 +00:00
* Hide menu items conditionally
2013-08-09 16:11:15 +00:00
*
* @ param array $items
* @ param mixed $args
* @ return array
*/
2013-11-25 14:07:22 +00:00
function wc_nav_menu_items ( $items , $args ) {
2013-08-09 16:11:15 +00:00
if ( ! is_user_logged_in () ) {
$hide_pages = array ();
2013-11-25 14:07:22 +00:00
$hide_pages [] = ( int ) wc_get_page_id ( 'logout' );
2013-08-09 16:11:15 +00:00
$hide_pages = apply_filters ( 'woocommerce_logged_out_hidden_page_ids' , $hide_pages );
foreach ( $items as $key => $item ) {
2013-08-23 15:41:02 +00:00
if ( strstr ( $item -> url , 'customer-logout' ) )
2013-08-09 16:11:15 +00:00
unset ( $items [ $key ] );
}
}
return $items ;
}
2013-11-25 14:07:22 +00:00
add_filter ( 'wp_nav_menu_objects' , 'wc_nav_menu_items' , 10 , 2 );
2013-08-09 16:11:15 +00:00
/**
* Fix active class in nav for shop page .
*
* @ param array $menu_items
* @ param array $args
* @ return array
*/
2013-11-25 14:07:22 +00:00
function wc_nav_menu_item_classes ( $menu_items , $args ) {
2013-08-09 16:11:15 +00:00
if ( ! is_woocommerce () ) return $menu_items ;
2013-11-25 14:07:22 +00:00
$shop_page = ( int ) wc_get_page_id ( 'shop' );
2013-08-09 16:11:15 +00:00
$page_for_posts = ( int ) get_option ( 'page_for_posts' );
foreach ( ( array ) $menu_items as $key => $menu_item ) {
$classes = ( array ) $menu_item -> classes ;
// Unset active class for blog page
if ( $page_for_posts == $menu_item -> object_id ) {
$menu_items [ $key ] -> current = false ;
2014-04-24 21:18:41 +00:00
2013-10-07 13:47:39 +00:00
if ( in_array ( 'current_page_parent' , $classes ) )
unset ( $classes [ array_search ( 'current_page_parent' , $classes ) ] );
2014-04-24 21:18:41 +00:00
2013-10-07 13:47:39 +00:00
if ( in_array ( 'current-menu-item' , $classes ) )
unset ( $classes [ array_search ( 'current-menu-item' , $classes ) ] );
2013-08-09 16:11:15 +00:00
// Set active state if this is the shop page link
} elseif ( is_shop () && $shop_page == $menu_item -> object_id ) {
$menu_items [ $key ] -> current = true ;
$classes [] = 'current-menu-item' ;
$classes [] = 'current_page_item' ;
// Set parent state if this is a product page
} elseif ( is_singular ( 'product' ) && $shop_page == $menu_item -> object_id ) {
$classes [] = 'current_page_parent' ;
}
$menu_items [ $key ] -> classes = array_unique ( $classes );
}
return $menu_items ;
}
2013-11-25 14:07:22 +00:00
add_filter ( 'wp_nav_menu_objects' , 'wc_nav_menu_item_classes' , 2 , 20 );
2013-08-09 16:11:15 +00:00
/**
* Fix active class in wp_list_pages for shop page .
*
* https :// github . com / woothemes / woocommerce / issues / 177
*
* @ author Jessor , Peter Sterling
* @ param string $pages
* @ return string
*/
2013-11-25 14:07:22 +00:00
function wc_list_pages ( $pages ) {
2013-08-09 16:11:15 +00:00
if ( is_woocommerce ()) {
$pages = str_replace ( 'current_page_parent' , '' , $pages ); // remove current_page_parent class from any item
2013-11-25 14:07:22 +00:00
$shop_page = 'page-item-' . wc_get_page_id ( 'shop' ); // find shop_page_id through woocommerce options
2013-08-09 16:11:15 +00:00
if ( is_shop ()) :
$pages = str_replace ( $shop_page , $shop_page . ' current_page_item' , $pages ); // add current_page_item class to shop page
else :
$pages = str_replace ( $shop_page , $shop_page . ' current_page_parent' , $pages ); // add current_page_parent class to shop page
endif ;
}
return $pages ;
}
2013-11-25 14:07:22 +00:00
add_filter ( 'wp_list_pages' , 'wc_list_pages' );