Support » WooCommerce » Position der Produkteinheiten ändern

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 18)
  • Die Ausgabe wird über dein Theme gesteuert.

    Wenn das Theme keine Einstellungsmöglichkeiten für eine andere Darstellung anbietet, kannst du ein Child-Theme erstellen und dort die Reihenfolge der Funktionen nach Belieben umstellen. Das erfordert allerdings gute Grundkenntnisse in PHP.

    Konkreter lässt sich das nicht beschreiben, da wir keine Informationen zu deiner Website haben.

    Thread-Starter undusted1364

    (@ghost108)

    Welche Angaben werden denn benötigt ? 🙂
    Habe das Storefront Theme mit einem Child Theme im Einsatz.

    Hallo,
    wenn Du die URL oben einträgst, dann kann man sich das auch ansehen und Dir sicher besser helfen.
    Viele Grüße
    Hans-Gerd

    Thread-Starter undusted1364

    (@ghost108)

    das würde ich sehr gerne machen, nur kann ich das Projekt aktuell nicht öffentlich bekannt geben, da noch im Aufbau :/ kann ich irgendwie anders unterstützen ?

    Du kannst hier nachlesen, wie du die WooCommerce-Templates anpassen kannst:

    https://docs.woocommerce.com/document/template-structure/

    Für die Einzelansicht eines Produkts wird dieses Template verwendet:
    wp-content/plugins/woocommerce/templates/single-product.php

    Thread-Starter undusted1364

    (@ghost108)

    blöde Frage: wie bekomme ich das template in mein child theme, so dass ich nicht das original überschreibe ?

    hatte irgendwie früher im Kopf, das es im Adminbereich ein Copy original template to child theme“ (Eigenname) Funktion gab, oder irre ich mich da?

    Du musst doch sowieso das Child-Theme anlegen. Da dürfte es doch kein Problem sein, das Template an die richtige Stelle zu kopieren. Dein Child-Theme wird von keinen Updates überschrieben – das ist ja der Sinn von Child Themes.

    Sorry, aber das ist auch alles bestens dokumentiert. Vielleicht schaust du dir die Dokumentation erst einmal an?

    Thread-Starter undusted1364

    (@ghost108)

    okay, denke du hast mich da etwas missverstanden, aber in Ordnung.

    Tut mir leid, wenn ich dich falsch verstanden habe.
    Vielleicht magst du nochmal anders beschreiben, worum es dir geht?

    Thread-Starter undusted1364

    (@ghost108)

    ich habe bereits ein Child theme.
    In diesem habe ich in der functions.php jetzt lt Woocommerce doku folgende Funkion ergänzt:

    function mytheme_add_woocommerce_support() {
    	add_theme_support( 'woocommerce' );
    }
    add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' );

    Wie bekomme ich jetzt die single-product.php in mein child theme, um diese dort bearbeiten zu können?

    Thread-Starter undusted1364

    (@ghost108)

    UPDATE:
    Ich habe das template single-product nun in meinem child theme und könnte es bearbeiten. allerdings verstehe ich noch nicht so ganz die Struktur von WordPress / Woocommerce :/

    <?php
    /**
     * The Template for displaying all single products
     *
     * This template can be overridden by copying it to yourtheme/woocommerce/single-product.php.
     *
     * HOWEVER, on occasion WooCommerce will need to update template files and you
     * (the theme developer) will need to copy the new files to your theme to
     * maintain compatibility. We try to do this as little as possible, but it does
     * happen. When this occurs the version of the template file will be bumped and
     * the readme will list any important changes.
     *
     * @see 	    https://docs.woocommerce.com/document/template-structure/
     * @package 	WooCommerce/Templates
     * @version     1.6.4
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly
    }
    
    get_header( 'shop' ); ?>
    
    	<?php
    		/**
    		 * woocommerce_before_main_content hook.
    		 *
    		 * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
    		 * @hooked woocommerce_breadcrumb - 20
    		 */
    		do_action( 'woocommerce_before_main_content' );
    	?>
    
    		<?php while ( have_posts() ) : the_post(); ?>
    
    			<?php wc_get_template_part( 'content', 'single-product' ); ?>
    
    		<?php endwhile; // end of the loop. ?>
    
    	<?php
    		/**
    		 * woocommerce_after_main_content hook.
    		 *
    		 * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
    		 */
    		do_action( 'woocommerce_after_main_content' );
    	?>
    
    	<?php
    		/**
    		 * woocommerce_sidebar hook.
    		 *
    		 * @hooked woocommerce_get_sidebar - 10
    		 */
    		do_action( 'woocommerce_sidebar' );
    	?>
    
    <?php get_footer( 'shop' );
    
    /* Omit closing PHP tag at the end of PHP files to avoid "headers already sent" issues. */
    

    Wie stehen denn dort jetzt die Proudkteinheiten?

    Copy the template into a directory within your theme named /woocommerce keeping the same file structure but removing the /templates/ subdirectory.

    cp /var/www/wp-content/plugins/woocommerce/templates/single-product.php /var/www/wp-content/themes/storefront-child/woocommerce/single-product.php

    Thread-Starter undusted1364

    (@ghost108)

    das habe ich soweit gemacht 🙂

    Thread-Starter undusted1364

    (@ghost108)

    habe jetzt das entsprechende template gefunden, welches für die Produkteinheuiten zuständig ist (meta.php)

    <?php
    /**
     * Single Product Meta
     *
     * This template can be overridden by copying it to yourtheme/woocommerce/single-product/meta.php.
     *
     * HOWEVER, on occasion WooCommerce will need to update template files and you
     * (the theme developer) will need to copy the new files to your theme to
     * maintain compatibility. We try to do this as little as possible, but it does
     * happen. When this occurs the version of the template file will be bumped and
     * the readme will list any important changes.
     *
     * @see 	    https://docs.woocommerce.com/document/template-structure/
     * @package 	WooCommerce/Templates
     * @version     3.0.0
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit;
    }
    
    global $product;
    ?>
    <div class="product_meta">
    	
    	<?php do_action( 'woocommerce_product_meta_start' ); ?>
    
    	<?php if ( wc_product_sku_enabled() && ( $product->get_sku() || $product->is_type( 'variable' ) ) ) : ?>
    
    		<span class="sku_wrapper"><?php esc_html_e( 'SKU:', 'woocommerce' ); ?> <span class="sku"><?php echo ( $sku = $product->get_sku() ) ? $sku : esc_html__( 'N/A', 'woocommerce' ); ?></span></span>
    
    	<?php endif; ?>
    
    	<?php echo wc_get_product_category_list( $product->get_id(), ', ', '<span class="posted_in">' . _n( 'Category:', 'Categories:', count( $product->get_category_ids() ), 'woocommerce' ) . ' ', '</span>' ); ?>
    
    	<?php echo wc_get_product_tag_list( $product->get_id(), ', ', '<span class="tagged_as">' . _n( 'Tag:', 'Tags:', count( $product->get_tag_ids() ), 'woocommerce' ) . ' ', '</span>' ); ?>
    
    	<?php do_action( 'woocommerce_product_meta_end' ); ?>
    
    </div>

    Die Frage ist nur – in welchem Template binde ich die meta php an richtiger Stelle ein ?

    Schön. Jetzt schaust du dir das Template mal an:

    /**
     * The Template for displaying all single products
     *
     * This template can be overridden by copying 
     * it to yourtheme/woocommerce/single-product.php.
     *

    Das beschreibt schon mal, was wir bisher festgehalten haben: Das Template zeigt ein einzelnes Produkt an und kann überschrieben werden, in dem du es in dein Child-Theme im Unterverzeichnis /woocommerce platzierst.

    do_action( 'woocommerce_before_main_content' );

    heißt soviel wie „führe Funktionen aus, bevor der Hauptinhalt angezeigt wird“. An der Stelle willst du vermutlich noch nichts ausgeben.

    <?php while ( have_posts() ) : the_post(); ?>
      <?php wc_get_template_part( 'content', 'single-product' ); ?>
    <?php endwhile; // end of the loop. ?>

    bedeutet „Schau in das Post-Objekt und wenn ein Beitrag vorhanden ist, rufe das nächste Template content-single-product.php auf. Hier könntest du bereits einen eigenen Inhalt einbauen. Probier’s einfach mal aus:

    <?php while ( have_posts() ) : the_post(); ?>
      <h1>Hallo Welt!</h1>
      <?php wc_get_template_part( 'content', 'single-product' ); ?>
    <?php endwhile; // end of the loop. ?>

    Vermutlich ist das immer noch die falsche Stelle und es reicht, wenn du in dein Child-Theme das Template content-single-product.php kopierst (und das Template single-product.php wieder löschst).

    Hier hangelst du dich wieder durch und fügst nochmal HTML ein, um zu prüfen, wo das ausgegeben wird …

    Wenn ich Storefront verwende und Produkteinheiten als Produkteigenschaften eingebe (ich will jetzt nicht noch auf Varianten eingehen, was den Rahmen endgültig sprengen würde), werden sie mit dem Template single-product/tabs/additional-information.php in den Tabs unterhalb des Produktbildes ausgegeben.
    Das Template enthält einen Hook do_action( 'woocommerce_product_additional_information', $product );. Suche ich im Code von WooCommerce nach add_action( 'woocommerce_product_additional_information' (also der Zuweisung einer Funktionen zu diesem Hook), finde ich in woocommerce/includes/wc-template-hooks.php die folgende Zeile:

    add_action( 'woocommerce_product_additional_information', 'wc_display_product_attributes', 10 );

    Der Funktionsname wc_display_product_attributes passt schon mal prima zu „Produkteigenschaften“. Die Funktion findest du in wc-template-functions.php.

    Ab der Zeile
    $attributes = array_filter( $product->get_attributes(), 'wc_attributes_array_filter_visible' );
    werden dann die Produkteigenschaften abgerufen und mit einer foreach-Schleife zurückgegeben. Möchtest du die Produkteigenschaften nun an anderer Stelle ausgeben, kopierst du diesen Code an die gewünschte Stelle und passt ihn ggf. noch nach deinen Vorstellungen an.

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 18)
  • Das Thema „Position der Produkteinheiten ändern“ ist für neue Antworten geschlossen.