那个add_rewrite_endpoint("scheduled-order-create/([0-9]+)/?", ...);
不起作用,因为add_rewrite_endpoint()
不适用于自定义正则表达式模式。
记住,除了默认的公共查询变量之外cat
, tag
, year
和author
, WordPress还提供所有公共帖子类型和分类(非空query_var
注册时的值—看见register_post_type()
和register_taxonomy()
) 可以从URL读取并与主查询一起使用,因此请确保您的查询字符串名称与这些查询变量不冲突。否则,你最终会404
错误,因为WordPress尝试查询本应查询的内容以外的内容。
因此,尽管如此add_rewrite_endpoint(\'scheduled-order-create\', EP_PAGES);
确实有效,导航到/my-account/scheduled-order-create?product=1
中的结果404
错误,因为WordPress(或WP_Query
) 找不到(公共/已发布)product
用slug发布1
—product
是WooCommerce注册的帖子类型,查询变量默认为帖子类型slug。
因此,您需要为URL查询字符串使用其他名称,例如使用prod_id
代替product
如中所示https://example.com/my-account/scheduled-order-create?prod_id=1
.
在WooCommerce中,实际上有一个过滤器挂钩,可以用来轻松添加自定义my-account
端点,我会使用该挂钩,除非我想为所有页面启用端点:
add_filter( \'woocommerce_get_query_vars\', function ( $query_vars ) {
$query_vars[\'scheduled-order-create\'] = \'scheduled-order-create\';
return $query_vars;
} );
但是,您仍然需要刷新/重新生成永久链接(只需访问永久链接设置页面)。
附加代码,或作为使用prod_id
URL中的查询字符串。
您可以使用基于路径的重写端点,例如scheduled-order-create/product
:
// Manually using add_rewrite_endpoint():
add_action( \'init\', function () {
add_rewrite_endpoint( \'scheduled-order-create/product\', EP_PAGES,
\'scheduled-order-create\' );
} );
// Or using the WooCommerce\'s filter hook:
add_filter( \'woocommerce_get_query_vars\', function ( $query_vars ) {
$query_vars[\'scheduled-order-create\'] = \'scheduled-order-create/product\';
return $query_vars;
} );
// To get the product ID (e.g. 123 as in example.com/my-account/scheduled-order-create/product/123):
$product_id = get_query_var( \'scheduled-order-create\' );