2014-09-11 50 views
7

Merhaba Ben woocommerce oldukça yeni, Benim dükkan aynı tek ürün şablonu kullanan dört ürün kategorisi vardır. Ürün sayfa düzeninin zaten kullanılandan çok farklı olduğu beşinci ürün kategorisini eklemek istiyorum.WooCommerce - Kategoriye göre birden fazla tek ürün şablonu nasıl oluşturulur?

  • tema/WooCommerce/tek ürün/
  • tema/WooCommerce/tek ürüne sahte/
  • tema/WooCommerce/tek ürüne sahte/başlığı - İşte

    dosya yapısı var php
  • teması/WooCommerce/içerik tek ürün mock.php
  • teması/WooCommerce/tek product.php

İçerik-single-product-mock.php adlı bir dosya oluşturdum. Tek product.php, içeriğin-tek ürün-mock.php yönlendirir alay kategori için aşağıdaki kodu

 <?php if (has_term('mock', 'product_cat')) { 
      woocommerce_get_template_part('content', 'single-product-mock'); 
     } else{ 
     wc_get_template_part('content', 'single-product'); 
     } ?> 

kullanarak, ancak tek ürün klasöründe şablon dosyalarını kullanır. İçerik-single-product-mock.php'deki şablon yolunu nasıl değiştirirsiniz, böylece tek ürünlü sahte dosyadaki özelleştirilmiş dosyaları kullanır?

cevap

11

Muhtemelen bunu yapmanın birden fazla yolu vardır, ancak bunlar dahil edilmeden önce şablonun filtrelenmesi fikri etrafında dönerler.

Sen tamamen ve simple-product-mock.php doğrudan gitmek ve orada her şeyi yaratmak (bu şablonu geçersiz kılmak için gerek kalmadan) WooCommerce en simple-product.php şablonunu atlayabiliriz. Bunu template_include filtreleyerek yaparsınız.

add_filter('template_include', 'so_25789472_template_include'); 

function so_25789472_template_include($template) { 
    if (is_singular('product') && (has_term('mock', 'product_cat'))) { 
    $template = get_stylesheet_directory() . '/woocommerce/single-product-mock.php'; 
    } 
    return $template; 
} 

Sen content-single-product-mock.php ve sert kodunu dosya öyle hitap single-product-mock.php düzenleme olabilir. Hiçbir şey, Woo'nun kancalarını ve işlevlerini kullanmaya devam etmenizi gerektirmez. Onların amacı, sadece sizin için özelleştirmeyi kolaylaştırmaktır. single-product-mock/title.php ve sonra biz alay kategorisinde tek bir ürün şablonuna konum her zaman, biz çağrıları müdahale edeceğiz: Böyle bir single-product-mock klasör ... eski haline single-product/title.php olarak

Ya da gerçekten zor olmaya, kopyalamak olabilir şablonlar single-product/something.php şablonunu ve varsa single-product-mock/something.phpnumarasına yönlendirin ve varsa single-product/something.php işaretini göstermeye devam edin. Bunu woocommerce_locate_template filtresiyle yapacağız.

add_filter('woocommerce_locate_template', 'so_25789472_locate_template', 10, 3); 

function so_25789472_locate_template($template, $template_name, $template_path){ 

    // on single posts with mock category and only for single-product/something.php templates 
    if(is_product() && has_term('mock', 'product_cat') && strpos($template_name, 'single-product/') !== false){ 

     // replace single-product with single-product-mock in template name 
     $mock_template_name = str_replace("single-product/", "single-product-mock/", $template_name); 

     // look for templates in the single-product-mock/ folder 
     $mock_template = locate_template(
      array(
       trailingslashit($template_path) . $mock_template_name, 
       $mock_template_name 
      ) 
     ); 

     // if found, replace template with that in the single-product-mock/ folder 
     if ($mock_template) { 
      $template = $mock_template; 
     } 
    } 

    return $template; 
} 
+0

OMG! Çok teşekkür ederim. Woocommerce_locate_template disk denetleyicisi kullanılarak sona erdi. İyi çalışıyor :) – user1437251

İlgili konular