2016-06-14 16 views
1

外部製品ページに属性target="_blank"を追加できましたが、親(グループ化された製品)ページのリンクを変更できないようです。新しいタブで外部WooCommerce製品を開く - 属性target = "_ blank"を追加

私はexternal.phpを修正し、実際のリンク自体にタグを追加することでこれを行うことができました。私は、この属性を追加するためにグループ化された製品の親ページ上のリンクを変更するにはどうすればよい

<p class="cart"> 
<?php sdnetwork(); sdcondition(); parent_permalink_button(); ?><a href="<?php echo esc_url($product_url); ?>" target="_blank" rel="nofollow" class="single_add_to_cart_button button alt"><img src="/wp-content/themes/wootique-child/images/icons/new_tab_icon.gif" alt="Opens in New Tab"> <?php echo esc_html($button_text); ?></a> 
</p> 

は、私の最初に考えたのはgrouped.phpを変更することでしたが、リンクが異なっ生成されます。

<?php woocommerce_template_loop_add_to_cart(); ?> 

上記の生成されたリンクに自分のタグを追加するにはどうすればよいですか?私はフックを使用することを考えましたが、私はいくつかの助けが必要です。

EDIT:そう.....

jQuery(document).ready(function($) { 
    $(".button.product_type_external").each(function() { 
    $(this).find("a").attr("target", "_blank"); 
    }); 
}); 

問題は、ページがロードされるときに、リンクのほとんどが隠されていると私は心配しているように私はjQueryのを使用することができれば

が不思議これはたくさんのリソースを消費するか、それともそれになりますか? jQueryの新機能cale_bのおかげ解決

http://mobilereactor.co.uk/shop/mobile-phones/sony-xperia-z5-compact-coral-deals/

EDIT:あなたは、コードをトレースした場合

add_filter('woocommerce_loop_add_to_cart_link', 'add_target_blank', 10, 2); 

function add_target_blank($link, $product){ 
    global $post; 
    $product = get_product($post->ID); 
     if($product->is_type('external')){ 
      // I simply added target="_blank" in the line below 
      $link = sprintf('<a rel="nofollow" href="%s" target="_blank" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>', 
        esc_url($product->add_to_cart_url()), 
        esc_attr(isset($quantity) ? $quantity : 1), 
        esc_attr($product->id), 
        esc_attr($product->get_sku()), 
        esc_attr(isset($class) ? $class : 'button'), 
        esc_html($product->add_to_cart_text()) 
       ); 
      return $link; 
     } else { 
      // I simply remove target="_blank" in the line below 
      $link = sprintf('<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>', 
        esc_url($product->add_to_cart_url()), 
        esc_attr(isset($quantity) ? $quantity : 1), 
        esc_attr($product->id), 
        esc_attr($product->get_sku()), 
        esc_attr(isset($class) ? $class : 'button'), 
        esc_html($product->add_to_cart_text()) 
       ); 
      return $link; 
     } 
} 
+0

のjQueryを使用しないでください。このような何かをPHP。あなたの 'external.php'のようにリンクを上書きするテンプレートがあります。リンクしたテンプレートは大幅に変更されているので、もう少し私たちに協力してもらう必要があります。上記のあなたのリンクでは、どのテンプレートを見ていますか? –

+0

リンクの上にあるgrouped.phpの改造版 – Scott

+0

リンクは '' '<?php woocommerce_template_loop_add_to_cart();によって生成されると思います。 ?> '' 'grouped.phpでどうやってモディファイするか分からない? – Scott

答えて

1

を、その関数は、いくつかのことを行い、その後、テンプレートloop/add-to-cart.phpをロードします。フィルタ(woocommerce_loop_add_to_cart_link)を使用して、リンクを変更するには

echo apply_filters('woocommerce_loop_add_to_cart_link', 
    sprintf('<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>', 
     esc_url($product->add_to_cart_url()), 
     esc_attr(isset($quantity) ? $quantity : 1), 
     esc_attr($product->id), 
     esc_attr($product->get_sku()), 
     esc_attr(isset($class) ? $class : 'button'), 
     esc_html($product->add_to_cart_text()) 
    ), 
$product); 

:あなたはloop/add-to-cart.phpを開くと

することは、あなたはこのようになるはずのコードを見つけることができます。

注:WooCommerceテンプレートは、プラグインフォルダ内で直接変更しないでください。それらの優れたTemplate Structureを使用してテンプレートをテーマにコピーしてそこに変更してください。そうしないと、次回のWooCommerceの更新時に変更内容が失われてしまいます。

最終的なメモ:コードをトレースすると、は簡単にとなり、良いIDEを使用すると楽しいことができます。私はPHPStorm(https://www.jetbrains.com/phpstorm/)の巨大なファンです。

EDIT

、あなたは別のアプローチを取ると、外部の製品のためにそれを追加します。

あなたはフィルタを活用し、コメントに記載されているように、関数に関数を記述します。上記のコードで

add_filter('woocommerce_loop_add_to_cart_link', 'my_external_product_links', 10, 2); 

function my_external_product_links($link, $product) { 
    // Set up the $target variable to contain the correct text depending on the product 
    $target = ('external' == $product->product_type ) ? 'target="_blank"' : ''; 
    // Use the code from the core function here, but with our modification to include target 
    echo sprintf('<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s" %s>%s</a>', 
      esc_url($product->add_to_cart_url()), 
      esc_attr(isset($quantity) ? $quantity : 1), 
      esc_attr($product->id), 
      esc_attr($product->get_sku()), 
      esc_attr(isset($class) ? $class : 'button'), 
      esc_html($product->add_to_cart_text()), 
      $target 
     ); 
} 

sprintf文で新しい%sに細心の注意を払う:

// Watch for this --->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->-->--->--->-vv 
'<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s" %s> 
+0

'' 'functions.php'''で関数を作成して、' '' echo target = "_ blank" '' 'を実行していただきありがとうございます。これをする?私はこれが単一の製品も管理していると仮定しているのですか? – Scott

+0

あなたの情報を使ってもっと簡単にできると思っていました。 '' 'function target_blank(){ \t global $ post; \t $ product = get_product($ post-> ID); \t if($ product-> is_type( 'external')){ \t \t echo 'target = "_ blank"'; \t} } '' 'add-to-cart.phpテンプレートに' '' target_blank(); '' 'をポップするだけです。 – Scott

+0

ちょっと試してみましたが、助けてくれてありがとうございました – Scott

関連する問題