如何在模板中复制简码

How to replicate a shortcode inside template

在 wordpress functions.php 文件中,我有一个简码,可以让我在查看-order.php 页面时显示订单 ID。短代码工作正常。

我想做的是找到一个更舒适的替代方案。所以我想利用 Twig 模板,所以我正在做一些测试。我实际上正在查看订单 ID,但它对于我决定查看的每个订单都保持不变。

示例:

有了短代码就不会发生这种情况,我可以正确显示每个订单的 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