WooCommerce

获取WooCommerce页面地址的方法

WooCommerce的顶级页面有商店页、购物车页、结账页、我的账户页和用户协议页,结账页和账户页有次级页面,分别由结账端点和账户端点来指定,也就是endpoints。顶级页面是WordPress里真正的页面,次级页面没有实体页面,只是靠重定向规则动态创造出来的。本文介绍WooCommerce中获取这些页面地址的专用函数。

如何设置WooCommerce顶级页面

一般首次安装时就会提示你设置,如果之后想更改,可以到WooCommerce的高级选项卡下更新设置。这些设置会保存在wp_options表中。

WooCommerce的商店页在产品选项卡下设置。

如何获取顶级页面地址

$shop_url      = wc_get_page_permalink( 'shop' );
$cart_url      = wc_get_page_permalink( 'cart' );
$checkout_url  = wc_get_page_permalink( 'checkout' );
$myaccount_url = wc_get_page_permalink( 'myaccount' );
$privacy_url   = wc_get_page_permalink( 'terms' );

对cart和checkout两个使用频率高的地址,WooCommerce提供了特殊函数。

$cart_url      = wc_get_cart_url();
$checkout_url  = wc_get_checkout_url();

要获取page ID,可以使用wc_get_page_id()函数。

$shop_id      = wc_get_page_id( 'shop' );
$cart_id      = wc_get_page_id( 'cart' );
$checkout_id  = wc_get_page_id( 'checkout' );
$myaccount_id = wc_get_page_id( 'myaccount' );
$privacy_id   = wc_get_page_id( 'terms' );

如何获取账户下的次级页面地址

$orders_url          = wc_get_account_endpoint_url( 'orders' );
$view_order_url      = wc_get_account_endpoint_url( 'view-order' );
$download_url        = wc_get_account_endpoint_url( 'downloads' );
$edit_account_url    = wc_get_account_endpoint_url( 'edit-account' );
$edit_address_url    = wc_get_account_endpoint_url( 'edit-address' );
$payment_methods_url = wc_get_account_endpoint_url( 'payment-methods' );
$lost_password_url   = wc_get_account_endpoint_url( 'lost-password' );
$logout_url          = wc_get_account_endpoint_url( 'customer-logout' );

同样,某些地址定义了快捷函数。

$edit_account_url  = wc_customer_edit_account_url();
$lost_password_url = wc_lostpassword_url();
$logout_url        = wc_logout_url();

获取结账端点页面地址

这些地址都是结账的时候使用的,付款和已收到订单的地址,在订单ID确定的情况下可以稳定获取。添加付款方法、删除付款方法和设置默认付款方式是结算页面用到的,会和网关有关,不能稳定获取。

假设Order ID为1,来获取图中前两项地址。

$order              = wc_get_order( 1 );
$payment_url        = $order->get_checkout_payment_url();
$order_received_url = $order->get_checkout_order_received_url();

如果要获取添加付款方法地址,可以用wc_get_endpoint_url()函数,$value是附加在url后面的参数,用法如下:

// 用法:wc_get_endpoint_url( $endpoint, $value = '', $permalink = '' )
$add_payment_url = wc_get_endpoint_url( 'add-payment-method', '', wc_get_checkout_url() );

在设置中更改endpoint地址后会怎么样

更改后依然用上面的方法来获取地址,默认设置里显示的endpoints就是默认的endpoints。例如你把查看订单地址从“view-order”改成“view-your-order”,则

$view_order_url = wc_get_account_endpoint_url( 'view-order' );
//返回值
// https://www.solagirl.net/my-account/view-your-order

35条评论

  1. 请问 我用这个插件 在首页上点那些菜单 都直接404 怎么办
    Not Found

    The requested URL /cart/ was not found on this server.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

    Apache/2 Server at adapter-ac.com Port 80

  2. 作者你好!我安装并启用woocommerce后,发现只要我的固定链接不是默认选项,woocommerce的“我的帐户“”结算”“购物车”“商店”等页面就打不开了,404。把固定链接设为默认选项,woocommerce一切正常。

    WP3.9.2版本,woocommerce2.1.12版本,本地和在虚拟主机情况一样。我详细看了你和pear的对话,我这边依然出现问题,作者知道大概是哪个部分出现问题吗?我再去详细排查。谢谢你了!

      1. windows主机,在跟目录添加了httpd.ini文件,换了个主题还是那样,实在没办法了。。。

        1. windows主机貌似比linux麻烦点,网上关于windows主机设置permalink的方法你都试过吗

        2. 没有,只试过一种,我去看看别的方法,再不行的话换主机了。。。
          谢谢你!!!

    1. 获取WooCommerce页面地址的方法,请问有没有详细的教程,新手还是不知道怎么设置页面,怎么生成!在线等,谢谢!

        1. 比如说获取购物车页,是把这排代码Cart Page URL: ‘ . $cart_page_url;加到主题functions.php里吗,我每次加都是显示错误

        2. 什么错误?你懂php语法的话应该能解决的,这两句是非常直白的代码,只要没拼写错误就行。

  3. WooCommerce插件的结算模板是默认模板,已经在页面设置了那个页面,但是怎么会跳转到首页呢?

    1. 如果是shop页标题的话,把这段代码放到functions.php里,标题就会是页面的标题
      // Change the browser title of shop base page
      add_filter(‘post_type_archive_title’, ‘theme_wc_shop_browser_title’ );
      function theme_wc_shop_browser_title( $title ){
      if( $title == __(‘Products’, ‘woocommerce’)){
      $shop_page_id = woocommerce_get_page_id( ‘shop’ );
      $page_title = get_the_title( $shop_page_id );
      return $page_title;
      }
      return $title;
      }

  4. Sola 您好,我看了您这文章后,发现您是一个热于帮助他们的高手。所以我带着崇拜像您请教一个问题。 我的网站使用了伪静态,就是固定链接使用/%post_id%.html/。 之前网站的页面都是可以访问的。。但是我今天安装了woocommerce插件,这个插件自动安装了商店等页面。。但是这个页面我访问不了,一访问就自己回到网站首页,请问下我该怎么做呢??麻烦给与帮助,非常感谢!!!

    1. 你可以先限定一下问题范围,在本地装一个新的WordPress,只开启WooCommerce插件,把固定链接设置成/%post_id%.html/,看问题是否存在,有的话你再来找我。
      我不解的是/%post_id%.html/,最后为什么要有个反斜杠?

      1. 首先,感谢您的回复!您说的/%post_id%.html/这个后面加个反斜杠纯属个人喜爱,没有别的意义。也有人说对优化有好处。我按照您这个方法试过了,如果我不是用固定连接,使用wordpress默认的连接,woocommerce是可以使用的!!

        1. 好吧,我按照你的方法试了一下,WordPress的固定链接格式/%postname%.html/(这个只对post有效,不影响page的格式)。WooCommerce的固定链接格式product/sample-product/这种,没任何问题。
          我无法重现你的问题,你是安装全新WordPress测试的?其它WordPress页面可以正常访问?恐怕这不是wp的问题,是不是你自己服务器配置的问题呢。

        2. 您试的时候 用固定连接 可以访问是吗??我用的是3.6.0版本! 我在虚拟主机上也是一样的!!

        3. wp 3.6.1,没用默认的固定链接,且这个固定链接不影响page的格式,所以理论上不会影响woocommerce。估计你的站点有重定向错误吧,我是本地测试的。

  5. Sola,请教一下,我把shop设为了首页,然后我想在这个shop页面的产品列表下面再加上最新文章的列表,我该怎么做

    1. add_action( 'woocommerce_after_shop_loop', 'my_func', 5);
      function my_func(){
      	if( is_shop() ){
      		// 这里放产生最新文章列表的代码
      	}
      }
      
      1. Sola,非常感谢你的解答,但是我技术比较菜,还想问一下,这个产生最新文章列表的代码应该是什么,今天抽空折腾了一天也没弄出来,没办法,厚着脸再来问你,谢谢啊,我用的是twentywelve的模板

        1. 嗯,是很多,只是上面那段自定义函数代码不是放到function.php文件中的吗,我不知道在这个文件中该如何使用调用文章的代码,刚才我把the_widget(‘WP_Widget_Recent_Posts’); 放进去,显示是错误

        2. 又试了下,调用最新文章的小工具是可以的,会有最新文章的标题列表。但是我想调用文章列表页那样的效果,始终调不出来,把官网那些代码放进去好像都不行,我又把文章列表页的循环代码放进去,也不行

  6. 請問要如何帶入呢?
    我要修改結帳面的 欄位 將幾個欄位去除 無法崇 woocommerce-admin-users.php

    該如何修改??

    1. 带入就是把函数woocommerce_get_page_id( ‘shop’ )中的shop换成其他页面的id,比如结账页面的id是checkout。
      你想问的是如何去除结账页面表单的一些字段吗,比如国家城市之类的?woocommerce-admin-users.php是控制后台用户列表字段的,你要同时修改前台和后台?

      总之要修改结账页面字段,看这个文档
      http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/

        1. 你懂php语法吗?我不太明白你的问题,这个单独加在某个地方貌似没什么用处。

留言

您的电子邮箱地址不会被公开。