如何在WooCommerce中添加新端点

时间:2015-09-01 作者:user3344329

我使用woocommerce作为一个网站,客户在那里销售软件。我必须添加的选项之一是在我的帐户页面上请求许可证按钮。

我已经在文件请求许可证中具有了执行此操作的功能。php在我的主题中的woocommerce文件夹中,但我在添加新点时遇到了问题。

enter image description here

单击查看时,端点调用查看顺序。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()函数,但不知道如何实现它。希望我能在这里得到一些帮助

1 个回复
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/, 将显示您的自定义代码

相关推荐