wordpress 完全禁用WooCommerce端点

rdlzhqv9  于 10个月前  发布在  WordPress
关注(0)|答案(3)|浏览(199)

我已经在网上搜索了很多,但我还没有找到答案。所以我依靠这里的Maven。
我想禁用一些woocommerce端点。网络告诉我通过woocommerce_account_menu_items钩子取消设置woocommerce菜单项,如下所示:

add_filter ( 'woocommerce_account_menu_items', 'my_remove_my_account_links' );
function my_remove_my_account_links( $menu_links ){
    
    /**
     * Uncomment the appropriate lines to remove specific
     * endpoints in the WooCommerce My Account screen.
     */
    
    //unset( $menu_links['dashboard'] );        // Remove Dashboard
    //unset( $menu_links['edit-address'] );     // Addresses
    //unset( $menu_links['payment-methods'] );  // Remove Payment Methods
    //unset( $menu_links['orders'] );           // Remove Orders
    //unset( $menu_links['downloads'] );        // Disable Downloads
    //unset( $menu_links['edit-account'] );     // Remove Account details tab
    //unset( $menu_links['customer-logout'] );  // Remove Logout link
    
    return $menu_links;
}

字符串
但这里的大问题是,这只是删除了前端的菜单链接。我仍然可以通过直接URL输入未设置的端点。所以当我输入https://example.de/myaccount/[unset-endpoint]时,我仍然能够访问内容。
我发现了一种通过直接URL输入重定向访问的方法。我使用了位于支付方式模板(/woombase/templates/myaccount/payment-methods.php)中的钩子woocommerce_before_account_payment_methods重定向回 Jmeter 板:

function redirect_forbidden_access_account_endpoints(){
   wp_redirect(wc_get_account_endpoint_url('dashboard'));
}
add_action('woocommerce_before_account_payment_methods', 'redirect_forbidden_access_account_endpoints');


这就像一个魅力,但只适用于payment-methods端点。我尝试了本机downloads端点和自定义端点,以及没有成功。
所以我的问题是:我有一个坚实的解决方案来重定向URL访问从特定的禁用woocommerce端点到 Jmeter 板?

cu6pst1q

cu6pst1q1#

你可以用这两种方法来做:
1.将Empty值放入后台设置
转到WooCommerce >设置>高级,然后在帐户端点输入中,您可以删除特定端点的值并保存空值。
这样,您将不会在帐户页面上看到端点页面或菜单项,如果您访问URL,您将在访问的URL上看到主页。
1.取消设置查询变量
您可以使用过滤器钩子取消设置查询变量。https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/class-wc-query.php#L85
85行中,你可以找到包含所有查询变量的函数。
https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/class-wc-query.php#L232
在第232行,你可以找到获取查询变量的函数,它也有过滤器。你可以使用过滤器并取消所需的端点。
如果你使用这种方法,你将不得不从导航菜单项中取消设置该项,你还需要再次保存固定链接设置。
然后,如果你通过url访问端点,你会在访问的url上看到主页。
在这两种情况下,您都不会看到404页面。

6ljaweal

6ljaweal2#

答案是:是的,有!我的钩子错了。我现在用的是wp钩子。那法律的吗?

function redirect_forbidden_access(){
    $current_endpoint = WC()->query->get_current_endpoint();
    if($current_endpoint == "payment-methods" 
      || $current_endpoint == "add-payment-method"
      || $current_endpoint == "edit-payment-method" 
      || $current_endpoint == "[custom-endpoint]")
    {
        wp_redirect(wc_get_account_endpoint_url('dashboard'));
    }
}
add_action('wp', 'redirect_forbidden_access');

字符串
这就行了。

ghhaqwfi

ghhaqwfi3#

重定向和从查询变量中删除端点的组合对我很有效。
如果没有重定向,端点仍然会显示来自wp-content/plugins/woocommerce/templates/myaccount/dashboard.php欢迎页面的内容。

<?php
    const DISABLED_WC_ENDPOINTS = [
        'bookings',
        'edit-address',
        'downloads',
        'orders',
    ];
    
    add_action(
        'init',
        static function () {
            add_filter(
                'woocommerce_get_query_vars',
                static function(array $vars) {
                    foreach (DISABLED_WC_ENDPOINTS as $rem) {
                        unset($vars[$rem]);
                    }
                    return $vars;
                },
                0
            );
        }
    );

    add_action(
        'template_redirect',
        static function() {
            $baseEndpoint = 'my-account';
            foreach (DISABLED_WC_ENDPOINTS as $endpoint) {
                if ('/' . $baseEndpoint . '/' . $endpoint . '/' === $_SERVER['REQUEST_URI']) {
                    wp_redirect('/' . $baseEndpoint, 301);
                    exit();
                }
            }
        }
    );

字符串

相关问题