WooCommerce: วิธีแก้ไข get_price_html


13

ฉันกำลังพยายามแก้ไขมูลค่าราคาสำหรับผลิตภัณฑ์เดียว

ในมีการเรียกแม่แบบsingle-product/price.php $product->get_price_htmlฉันจะแก้ไขฟังก์ชัน / วิธีการนั้นเพื่อเปลี่ยนวิธีการนำเสนอ HTML ได้อย่างไร

ในขณะนี้แม้ว่าฉันจะลบเนื้อหาทั้งหมดของฟังก์ชั่นที่อยู่ในclass-wc-productนั้นยังคงแสดงอย่างน่าอัศจรรย์? ใครรู้ว่าทำไม

คำตอบ:


17

ไฟล์หลักและปลั๊กอินไม่ควรถูกแก้ไขโดยตรงเนื่องจากการอัปเดตใด ๆ อาจแทนที่การเปลี่ยนแปลงของคุณ หากคุณดูที่แหล่งที่มาของ WooCommerce get_price_htmlวิธีการมีตัวกรองจำนวนมากที่สามารถปรับเปลี่ยนผลลัพธ์ของฟังก์ชันได้

ดูadd_filterใน Codex สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มตัวกรองในการapply_filtersโทร

จากget_price_htmlในclass-wc-product:

return apply_filters('woocommerce_get_price_html', $price, $this);

ดังนั้นในการเพิ่มตัวกรองของคุณเอง:

add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
    return 'Was:' . str_replace( '<ins>', ' Now:<ins>', $price );
}

ขอบคุณสำหรับคำตอบโดยวิธีการที่ทำไมเมื่อฉันลบเนื้อหาของฟังก์ชั่นหลักก็ยังคงส่งออกผลลัพธ์ตามปกติ
Lucky Luke

1
สมมติว่ามีการลดราคาและส่งคืนฉันฉัน<del>£2</del><ins>£1</ins>จะเปลี่ยนสิ่งนั้นWas:<del>£2</del> Now:<ins>£1</ins>เป็นตัวกรองได้อย่างไร
ลัคกี้ลุค

ไม่แน่ใจไม่คุ้นเคยกับ WooCommerce บางทีคลาสอื่นก็ขยายออกไป ดูการแก้ไขด้านบนสำหรับคำถามที่สองของคุณ
Milo

Brill,;) ความช่วยเหลือที่ดี
ลัคกี้ลุค

ฉันพยายามที่จะรู้ว่าสิ่งที่เกิดขึ้นในการเริ่มต้นตัวกรองสำหรับwoocommerce_get_price_html $priceในเว็บไซต์ของฉัน woocommerce แสดง 0 $ สำหรับผลิตภัณฑ์ฟรีแทนFree!
SKMohammadi

5
function wpa83368_price_html( $price,$product ){
   // return $product->price;
    if ( $product->price > 0 ) {
      if ( $product->price && isset( $product->regular_price ) ) {
        $from = $product->regular_price;
        $to = $product->price;
        return '<div class="old-colt"><del>'. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .' Retail </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Our Price</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Our Price</div>';
      }
   } else {
     return '<div class="live-colst">0 Our Price</div>';
   }
}

5
แม้ว่ารหัสของคุณสามารถทำงานได้ (และฉันก็ไม่มีเหตุผลที่จะคิดว่ามันไม่ได้) นี่คือเว็บไซต์ Q / A ไม่ใช่ที่เก็บรหัสดังนั้นจึงเป็นการแบ่งปันผู้เชี่ยวชาญและความรู้ที่อธิบายรหัสของคุณได้ดีกว่าแทนที่จะเขียนโค้ดโดยไม่มีการอธิบาย หรือความคิดเห็นแบบอินไลน์ ...
gmazzap

รหัสยังใช้คุณสมบัติวัตถุที่ไม่ดี
Svetoslav Marinov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.