在WooCommerce设置中有Pages(页面)这一项,里面列出所有WooCommerce正常工作所需要的页面,用户可以自行创建WordPress普通页面并将其设置为WooCommerce的功能页面。所以,这些页面地址要动态获取,不可硬编码。本文列出获取Pages选项卡下所有页面的方法。

woocommerce-pages

原理

使用WordPress的get_permalink()函数,这个函数唯一的参数是页面ID。

WooCommerce页面是以option name => option value形式存储在wp_options表中的,option value存储了页面的ID,使用woocommerce_get_page_id函数获取

实例

获取商店(Shop)页面URL

$shop_page_url = get_permalink( woocommerce_get_page_id( 'shop' ) );
echo 'Shop Page URL: ' . $shop_page_url;

获取购物车(Cart)页面地址

$cart_page_url = get_permalink( woocommerce_get_page_id( 'cart' ) );
echo '<br />Cart Page URL: ' . $cart_page_url;

从例子中可以看出,获取不同页面方式唯一的区别是woocommerce_get_page_id的参数不同,因此,只要知道获取每个页面对应的参数,带入这个function就可以得到地址了。

参数对应列表

页面名称对应参数
Shop Base Pageshop
Terms Pageterms
Cart Pagecart
Checkout Pagecheckout
Pay Pagepay
Thanks Pagethanks
My Account Pagemyaccount
Edit Address Pageedit_address
View Order Pageview_order
Change Password Pagechange_password
Logout Pagelogout
Lost Password Pagelost_password

文章How to Get Various WooCommerce Page URLs进一步阐释了其它方式,感兴趣的朋友不妨一看。

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

    1. 你用了什么插件?WooCommerce吗?

  2. 请问商品分类 和 搜索 页面的ID函数是什么??

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

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

    1. 用的是linux服务器吗,mod_rewrite是否开启?

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

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

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

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

      1. 原理就是数据库获取page id,不知道你哪里不明白

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

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

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

    1. 你说的意思我不太明白,能说的更具体点吗

  5. 请问下怎么弄那个页面的标题,这个链接我学会了,可是不知道怎么弄标题呢

    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;
      }

  6. 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的问题,是不是你自己服务器配置的问题呢。

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

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

          1. 哦 我知道了,我自己在看看!!非常感谢您的帮助!!!好人啊!!

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

  8. 還有一個問題 中文字 能否掛上 文檔內?

    1. 你是说woocommerce简体中文语言包吗?繁体中文官方已经自带了。

  9. 請問要如何帶入呢?
    我要修改結帳面的 欄位 將幾個欄位去除 無法崇 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. woocommerce_get_page_id( ‘shop’ )这个函数要放到哪里去?

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

评论功能已关闭