Kann ich WooCommerce-Funktionen in der Datei „wc-template-functions.php“ ändern oder sollte ich mich für solche Änderungen an die Datei „functions.php“ halten?

Lesezeit: 5 Minuten

Warum ist es die bevorzugte Wahl, WooCommerce-Funktionsänderungen in der Datei „function.php“ des Themas zu platzieren? Im Laufe der Zeit würde dies die Datei ziemlich groß machen. Ich bin der Meinung, dass es im Allgemeinen besser ist, viele gut organisierte kleinere Dateien zu haben, anstatt weniger, viel größere Dateien.

Was ist vor diesem Hintergrund falsch daran, die Dateien „wc-template-functions.php“ und „wc-templates-hooks.php“ in Ihr Design zu kopieren (unter Beibehaltung der Dateihierarchie) und diese Dateien entsprechend zu ändern?

Als Nebenanfrage von einem relativen Neuling auf der WooCommerce-Plattform würde ich mich freuen, wenn ich auf mein untenstehendes Verständnis, wie WooCommerce; Dateien, Hooks, Aktionen und Vorlagen arbeiten alle miteinander zusammen

Mein Verständnis:

  1. Die WooCommerce-Funktionen werden in der Datei ‚wc-template-functions.php‘ registriert. Für diese Erklärung verweise ich auf die woocommerce_breadcrumb Eintrag.
  2. WooCommerce verwendet dann die Datei ‚wc-templates-hooks.php‘, um die registrierte Funktion mit einem typischen Eintrag wie z add_action('woocommerce_before_main_content','woocommerce_breadcrumb', 20, 0 ); Das lenkt einfach woocommerce_breadcrumb innerhalb der angerufen werden woocommerce_before_main_content Haken.
  3. WooCommerce ist dann in der Lage, das obige durch Platzierung auszugeben do_action( 'woocommerce_before_main_content' ); wo nötig. In diesem Fall in allen Vorlagendateien.

Benutzeravatar von helgatheviking
Helgathewikinger

Ihr Verständnis von 1,2,3 ist richtig.

Allerdings die Dateien wc-template-functions.php und wc-templates-hooks.php werden nicht durch das Platzieren ähnlicher Dateien in Ihrem Design überschrieben, sodass es nichts bewirken würde, sie in Ihrem Design zu haben.

Es ist auch eine schlechte Idee (meiner Meinung nach), Dateien zu kopieren/überschreiben, wenn Sie etwas Bestimmtes ändern möchten. Ich musste einen ganzen Ordner mit WooCommerce-Vorlagen durchsuchen, als die Website eines Kunden abstürzte, um die tatsächlichen Änderungen zu finden, die beibehalten werden mussten.

Es ist nichts Falsches daran, dich zu trennen functions.php Datei in kleinere, überschaubarere Dateien. Und also du könnte haben eine woocommerce-functions.php Datei mit dem Namen, in dem Sie Ihren WooCommerce-spezifischen Code speichern möchten.

Bearbeiten Sie, um einige Gedanken zu erweitern

Jedes Mal, wenn WooCommerce (oder wirklich jede WordPress-Funktion) Ihnen dieses Muster zeigt:

if ( ! function_exists( 'some_function_name' ) ) {

    function some_function_name() {
        echo 'taco';
    }
}

Sie haben eine austauschbare Funktion und können sie einfach in Ihrem Thema definieren function.php und WooCommerce verwendet Ihre Version von some_function_name().

Pluggable-Funktionen sind jedoch dort eingehakt, wo sie eingehakt sind, und Sie können sie nicht verschieben, indem Sie sie in Ihrem Design/Plugin neu definieren. Ein leistungsfähigerer Ansatz besteht also darin, die Funktion von ihrem Hook zu entfernen und entweder zu einem anderen Hook hinzuzufügen oder Ihre eigene benutzerdefinierte Funktion hinzuzufügen oder beides. Hier ist ein Beispiel, das einen benutzerdefinierten Titel nach dem Preis verschiebt:

function kia_switch_loop_title(){
    remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );
    add_action( 'woocommerce_after_shop_loop_item_title', 'kia_template_loop_product_title', 15 );
}
add_action( 'woocommerce_before_shop_loop_item', 'kia_switch_loop_title' );

function kia_template_loop_product_title() {
    echo '<h4 class="we-do-what-we-want">' . get_the_title() . '</h4>';
}

  • Vielen Dank für die Anleitung und die Hilfe, mich in Bezug auf mein WooCommerce-Verständnis zu beruhigen. Ihren Vorschlag bezüglich der „Aufteilung“ der Datei functions.php werde ich in den kommenden Wochen berücksichtigen.

    – Craig

    20. Februar 2017 um 1:17 Uhr

  • Denken Sie auch daran, dass Dinge, die das Erscheinungsbild der Website verändern, in Ihr Thema gehören (und daher functions.php). Aber Code, der die Funktionalität der Website ändert, ist am besten für ein eigenes Plugin geeignet … oder ein seitenspezifisches Plugin, das eine Sammlung all Ihrer “Snippets” sein kann.

    – Helgathewikinger

    20. Februar 2017 um 3:40 Uhr

  • Ich bin noch nicht dazu gekommen zu lernen, wie man Plugins erstellt. Mir ist zwar bewusst, dass es als Best Practice gilt, solche Codes in einem Plugin zu platzieren, aber was ist der Hauptgrund dafür? Bezieht es sich auf die Kompatibilität? Sollte also ein Update über WooCommerce etc. mit der Funktionalität eines Themes in Konflikt geraten, können Sie es einfach deaktivieren, während Sie die entsprechenden Änderungen vornehmen?

    – Craig

    20. Februar 2017 um 5:02 Uhr

  • Ein Plugin ist im Grunde etwas Code in der wp-content/plugins Ordner mit einer bestimmten Reihe von Kommentaren als “Kopfzeile”. Damit kannst du ganz einfach einen erstellen Generator. Der Hauptgrund besteht darin, den Präsentationscode vom Funktionscode getrennt zu halten, damit Sie nicht an ein bestimmtes Thema gebunden sind. Und wie Sie betonen, ist es einfach, das Plugin zu deaktivieren, wenn Konflikte auftreten.

    – Helgathewikinger

    20. Februar 2017 um 16:10 Uhr

  • Macht Sinn! Danke für deine Hilfe und Einsicht. 🙂

    – Craig

    20. Februar 2017 um 16:20 Uhr

Gudoks Benutzeravatar
Gudok

hatte Probleme damit, verwandte Produkte auf Desc-Weise zu sortieren, habe gerade eine Lösung gefunden. Falls es jemand braucht

function custom_remove_hook(){
    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
    add_action( 'woocommerce_after_single_product_summary', 'custom_function_to_sort_related', 22 );
}
add_action( 'woocommerce_after_single_product_summary', 'custom_remove_hook' );

function custom_function_to_sort_related( $args = array() ) {
        global $product;

        if ( ! $product ) {
            return;
        }

        $defaults = array(
            'posts_per_page' => 4,
            'columns'        => 4,
            'orderby'        => 'price', // @codingStandardsIgnoreLine.
            'order'          => 'desc'
        );

        $args = wp_parse_args( $args, $defaults );

        // Get visible related products then sort them at random.
        $args['related_products'] = array_filter( array_map( 'wc_get_product', wc_get_related_products( $product->get_id(), $args['posts_per_page'], $product->get_upsell_ids() ) ), 'wc_products_array_filter_visible' );

        // Handle orderby.
        $args['related_products'] = wc_products_array_orderby( $args['related_products'], $args['orderby'], $args['order'] );

        // Set global loop values.
        wc_set_loop_prop( 'name', 'related' );
        wc_set_loop_prop( 'columns', apply_filters( 'woocommerce_related_products_columns', $args['columns'] ) );

        wc_get_template( 'single-product/related.php', $args );
    }

1394530cookie-checkKann ich WooCommerce-Funktionen in der Datei „wc-template-functions.php“ ändern oder sollte ich mich für solche Änderungen an die Datei „functions.php“ halten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy