WooCommerce

获取WooCommerce页面地址的方法

在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

  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插件的结算模板是默认模板,已经在页面设置了那个页面,但是怎么会跳转到首页呢?

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

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

  5. 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。估计你的站点有重定向错误吧,我是本地测试的。

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

  7. 請問要如何帶入呢?
    我要修改結帳面的 欄位 將幾個欄位去除 無法崇 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/

评论已关闭。