我使用woocommerce作为一个网站,客户在那里销售软件。我必须添加的选项之一是在我的帐户页面上请求许可证按钮。
我已经在文件请求许可证中具有了执行此操作的功能。php在我的主题中的woocommerce文件夹中,但我在添加新点时遇到了问题。
单击查看时,端点调用查看顺序。php文件,所以我想在单击请求许可证按钮时调用请求许可证。
这就是所谓的
<?php
$actions = array();
if ( in_array( $order->get_status(), apply_filters( \'woocommerce_valid_order_statuses_for_payment\', array( \'pending\', \'failed\' ), $order ) ) ) {
$actions[\'pay\'] = array(
\'url\' => $order->get_checkout_payment_url(),
\'name\' => __( \'Pay\', \'woocommerce\' )
);
}
if ( in_array( $order->get_status(), apply_filters( \'woocommerce_valid_order_statuses_for_cancel\', array( \'pending\', \'failed\' ), $order ) ) ) {
$actions[\'cancel\'] = array(
\'url\' => $order->get_cancel_order_url( wc_get_page_permalink( \'myaccount\' ) ),
\'name\' => __( \'Cancel\', \'woocommerce\' )
);
}
$actions[\'license\'] = array(
\'url\' => $order->get_request_license_url(),
\'name\' => __( \'Request License\', \'woocommerce\' )
);
$actions[\'view\'] = array(
\'url\' => $order->get_view_order_url(),
\'name\' => __( \'View\', \'woocommerce\' )
);
$actions = apply_filters( \'woocommerce_my_account_my_orders_actions\', $actions, $order );
if ( $actions ) {
foreach ( $actions as $key => $action ) {
echo \'<a href="\' . esc_url( $action[\'url\'] ) . \'" class="button \' . sanitize_html_class( $key ) . \'">\' . esc_html( $action[\'name\'] ) . \'</a>\';
}
}
?>
我知道我必须创建get\\u request\\u license\\u url()函数,但不知道如何实现它。希望我能在这里得到一些帮助
SO网友:Lafif Astahdziq
woocommerce在注册端点时似乎没有任何过滤器,https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-query.php#L84
因此,您需要在init hooks上添加新端点,如下所示
add_action( \'init\', \'add_endpoint\' );
function add_endpoint(){
add_rewrite_endpoint( \'license\', EP_ROOT | EP_PAGES );
}
然后你必须对
wc_get_template
在请求与端点匹配时调用文件
add_filter( \'wc_get_template\', \'custom_endpoint\', 10, 5 );
function custom_endpoint($located, $template_name, $args, $template_path, $default_path){
if( $template_name == \'myaccount/my-account.php\' ){
global $wp_query;
if(isset($wp_query->query[\'license\'])){
$located = get_template_directory() . \'/your-path-to-file.php\';
}
}
return $located;
}
因此,当您使用endpoint访问我的帐户页面时
license
, 比如说
http://yourdomain.com/my-account/license/
, 将显示您的自定义代码