suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Deaktivieren Sie den WooCommerce-Endpunkt vollständig

<p>Ich habe viel online gesucht, aber noch keine Antwort gefunden. Deshalb vertraue ich hier auf die Experten. </p> <p>Ich möchte einige WooCommerce-Endpunkte deaktivieren. Im Internet wurde mir mitgeteilt, dass WooCommerce-Menüelemente über den Hook <code>woocommerce_account_menu_items</code> deaktiviert werden können: </p> <pre class="brush:php;toolbar:false;">add_filter ( 'woocommerce_account_menu_items', 'my_remove_my_account_links' ); Funktion my_remove_my_account_links( $menu_links ){ /*** Kommentieren Sie die entsprechenden Zeilen aus, um bestimmte Zeilen zu entfernen * Endpunkte im WooCommerce-Bildschirm „Mein Konto“.*/ //unset( $menu_links['dashboard'] ); // Dashboard entfernen //unset( $menu_links['edit-address'] ); // Adressen //unset( $menu_links['zahlungsmethoden'] ); // Zahlungsmethoden entfernen //unset( $menu_links['orders'] ); // Bestellungen entfernen //unset( $menu_links['downloads'] ); // Downloads deaktivieren //unset( $menu_links['edit-account'] ); // Registerkarte „Kontodetails“ entfernen //unset( $menu_links['customer-logout'] ); // Abmeldelink entfernen return $menu_links; }</pre> <p>Aber das große Problem hierbei ist, dass dadurch lediglich die Menü-Links im Frontend entfernt werden. Über die direkte URL kann ich weiterhin auf den nicht eingestellten Endpunkt zugreifen. Wenn ich also <code>https://example.de/myaccount/[unset-endpoint]</code> eingebe, kann ich weiterhin auf den Inhalt zugreifen. </p> <p>Ich habe eine Möglichkeit gefunden, über eine direkte URL auf die Weiterleitung zuzugreifen. Ich habe den Hook <code>woocommerce_before_account_ payment_methods</code> verwendet, der sich in der Zahlungsmethodenvorlage (/woocommerce/templates/myaccount/ payment-methods.php) befindet, um zurück zum Dashboard umzuleiten: </p> <pre class="brush:php;toolbar:false;">function restart_forbidden_access_account_endpoints(){ wp_redirect(wc_get_account_endpoint_url('dashboard')); } add_action('woocommerce_before_account_paid_methods', 'redirect_forbidden_access_account_endpoints');</pre> <p>Diese Methode ist sehr nützlich, funktioniert aber nur mit dem <code> payment-methods</code> Ich habe dasselbe mit dem nativen <code>downloads</code>-Endpunkt und einem benutzerdefinierten Endpunkt versucht, ohne Erfolg. </p> <p>Meine Frage lautet also: Gibt es eine zuverlässige Lösung, um den URL-Zugriff von einem bestimmten deaktivierten WooCommerce-Endpunkt auf das Dashboard umzuleiten? </p>
P粉596191963P粉596191963457 Tage vor604

Antworte allen(2)Ich werde antworten

  • P粉725827686

    P粉7258276862023-08-28 21:32:12

    您可以通过以下两种方式来实现:

    1. 在后台设置中放置空值
      转到WooCommerce > 设置 > 高级,然后在帐户端点输入框中,您可以删除特定端点的值并保存空值。

      通过这种方式,您将不会在帐户页面上看到端点页面或菜单项,如果您访问该URL,您将在访问的URL上看到主页。

    2. 取消设置查询变量
      您可以使用过滤器钩子取消设置查询变量。 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页面。

    Antwort
    0
  • P粉217629009

    P粉2176290092023-08-28 15:42:08

    答案是:是的,有!我的钩子写错了。我现在使用了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');

    这就是解决方法。

    Antwort
    0
  • StornierenAntwort