如何在模板中复制简码
How to replicate a shortcode inside template
在 wordpress functions.php 文件中,我有一个简码,可以让我在查看-order.php 页面时显示订单 ID。短代码工作正常。
我想做的是找到一个更舒适的替代方案。所以我想利用 Twig 模板,所以我正在做一些测试。我实际上正在查看订单 ID,但它对于我决定查看的每个订单都保持不变。
示例:
- 如果我查看订单 001,显示 ID 001(正确)
- 如果我查看订单 002,显示 ID 001(不正确)
有了短代码就不会发生这种情况,我可以正确显示每个订单的 ID。谁能告诉我哪里做错了?
我已经对我的订单页面和我的下载页面做了同样的事情,它工作正常,但由于某种原因它不适用于视图-order.php页面。
感谢任何回复,谢谢。
add_shortcode( 'view_order_id' , 'view_order_00' );
function view_order_00(){
$order_id = absint( get_query_var('view-order') );
$order = new WC_Order( $order_id );
return $order->get_id();
}
{% set post = system.get.order_id|php('get_post') %}
{% set order = post.ID|php('wc_get_order') %}
{% for item in order.get_items %}
{% for download in order.get_downloadable_items %}
<div>{{post.ID}}</div>
{%endfor%}
{% endfor %}
我正在使用名为 e-addons 的第三方插件,它为 elementor 提供了许多小部件,包括 Twig 模板。
我联系了插件支持,他们告诉我必须在 $ _GET 中传递订单 ID 才能解决问题。此外,所有这些都必须在专用的元素或页面中完成,而不是像我最初所做的那样在 view-order.php 模板中完成。
所以这里是我一步步解决问题的简要说明。希望对和我有同样困难的人有用
1。我创建了一个带有 elementor 标题为测试页的新页面。
2。我复制了新创建页面的永久链接 (test-page) 并将其放入 functions.php 文件的过滤器中,如下所示。
// When you click on view order, this filter allows you to redirect from view-order (original woocommerce endpoint) to a custom page created with elementor.
function filter_woocommerce_get_endpoint_url( $url, $endpoint, $value, $permalink ) {
// Specific endpoint: If in the advanced settings of woocommerce you have changed the endpoint view order, then below you have to replace view-order with the one you have chosen in the advanced settings wi WC
if ( $endpoint === 'view-order' ) {
// New URL: change test-page with permalink of the page you created earlier. The /?order_id= part should not be removed.
$url = $permalink . 'test-page/?order_id=' . $value;
}
return $url;
}
add_filter( 'woocommerce_get_endpoint_url', 'filter_woocommerce_get_endpoint_url', 10, 4 );
3。使用永久链接设置过滤器后,我们需要使用 elementor 修改新页面。进入编辑器后,我 select 编辑了 e-Addons Posts 查询小部件并将其拖到页面区域。
第3步在这里打开,按照以下步骤正确配置小部件,只更改下面提到的内容:
转到查询 posts 小部件的“查询”选项卡
查询
- 在查询类型selectPost类型
- 在选项> post中输入select顺序
- 在 post 状态 select 任何
查询过滤器
- 在“作者”中 select 元密钥
在Mtakey Filters中新增并修改如下
- in Post 字段自定义元键 select _customer_user
- 值类型 select 数值
- in 比较运算符 select "="
- in Post 字段值 select 用户字段
如果您在第 3 步中做对了所有事情,用户将能够查看订单,否则如果您做错了,您将一无所获。
步骤 3 到此结束。
4。然后转到标题为内容的小部件的第一个选项卡。在这里,您必须转到标题为 Post Items 的菜单项,这就是我使用 Twig 模板的地方。所以我最初 post 在我的问题中输入的代码现在可以工作了。
{% set post = system.get.order_id|php('get_post') %}
{% set order = post.ID|php('wc_get_order') %}
{% for item in order.get_items %}
{% for download in order.get_downloadable_items %}
<div>{{post.ID}}</div>
{%endfor%}
{% endfor %}
现在,当我在订单历史页面上点击查看订单时,我被正确地重定向到特定的订单页面,例如我的网站。com/account/test-page?order_id=xxxxxx
在 wordpress functions.php 文件中,我有一个简码,可以让我在查看-order.php 页面时显示订单 ID。短代码工作正常。
我想做的是找到一个更舒适的替代方案。所以我想利用 Twig 模板,所以我正在做一些测试。我实际上正在查看订单 ID,但它对于我决定查看的每个订单都保持不变。
示例:
- 如果我查看订单 001,显示 ID 001(正确)
- 如果我查看订单 002,显示 ID 001(不正确)
有了短代码就不会发生这种情况,我可以正确显示每个订单的 ID。谁能告诉我哪里做错了?
我已经对我的订单页面和我的下载页面做了同样的事情,它工作正常,但由于某种原因它不适用于视图-order.php页面。
感谢任何回复,谢谢。
add_shortcode( 'view_order_id' , 'view_order_00' );
function view_order_00(){
$order_id = absint( get_query_var('view-order') );
$order = new WC_Order( $order_id );
return $order->get_id();
}
{% set post = system.get.order_id|php('get_post') %}
{% set order = post.ID|php('wc_get_order') %}
{% for item in order.get_items %}
{% for download in order.get_downloadable_items %}
<div>{{post.ID}}</div>
{%endfor%}
{% endfor %}
我正在使用名为 e-addons 的第三方插件,它为 elementor 提供了许多小部件,包括 Twig 模板。
我联系了插件支持,他们告诉我必须在 $ _GET 中传递订单 ID 才能解决问题。此外,所有这些都必须在专用的元素或页面中完成,而不是像我最初所做的那样在 view-order.php 模板中完成。
所以这里是我一步步解决问题的简要说明。希望对和我有同样困难的人有用
1。我创建了一个带有 elementor 标题为测试页的新页面。
2。我复制了新创建页面的永久链接 (test-page) 并将其放入 functions.php 文件的过滤器中,如下所示。
// When you click on view order, this filter allows you to redirect from view-order (original woocommerce endpoint) to a custom page created with elementor.
function filter_woocommerce_get_endpoint_url( $url, $endpoint, $value, $permalink ) {
// Specific endpoint: If in the advanced settings of woocommerce you have changed the endpoint view order, then below you have to replace view-order with the one you have chosen in the advanced settings wi WC
if ( $endpoint === 'view-order' ) {
// New URL: change test-page with permalink of the page you created earlier. The /?order_id= part should not be removed.
$url = $permalink . 'test-page/?order_id=' . $value;
}
return $url;
}
add_filter( 'woocommerce_get_endpoint_url', 'filter_woocommerce_get_endpoint_url', 10, 4 );
3。使用永久链接设置过滤器后,我们需要使用 elementor 修改新页面。进入编辑器后,我 select 编辑了 e-Addons Posts 查询小部件并将其拖到页面区域。
第3步在这里打开,按照以下步骤正确配置小部件,只更改下面提到的内容:
转到查询 posts 小部件的“查询”选项卡
查询
- 在查询类型selectPost类型
- 在选项> post中输入select顺序
- 在 post 状态 select 任何
查询过滤器
- 在“作者”中 select 元密钥
在Mtakey Filters中新增并修改如下
- in Post 字段自定义元键 select _customer_user
- 值类型 select 数值
- in 比较运算符 select "="
- in Post 字段值 select 用户字段
如果您在第 3 步中做对了所有事情,用户将能够查看订单,否则如果您做错了,您将一无所获。 步骤 3 到此结束。
4。然后转到标题为内容的小部件的第一个选项卡。在这里,您必须转到标题为 Post Items 的菜单项,这就是我使用 Twig 模板的地方。所以我最初 post 在我的问题中输入的代码现在可以工作了。
{% set post = system.get.order_id|php('get_post') %}
{% set order = post.ID|php('wc_get_order') %}
{% for item in order.get_items %}
{% for download in order.get_downloadable_items %}
<div>{{post.ID}}</div>
{%endfor%}
{% endfor %}
现在,当我在订单历史页面上点击查看订单时,我被正确地重定向到特定的订单页面,例如我的网站。com/account/test-page?order_id=xxxxxx