Как отображать наличие товаров в зависимости от классов доставки на двух языках

Я пытаюсь отобразить пользовательский текст доступности для продуктов по 4 правилам на двух языках.

Я установил эту функцию, но я получаю текст доступности (на английском и греческом языках). Я хочу отобразить конкретное сообщение для каждого языка.

//Availability Text for products 
add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2);
function wcs_custom_get_availability( $availability, $_product ) {
   global $product;
    $defined_shipping_class = "Κατόπιν Παραγγελίας 7-15 ημέρες";
    $defined_shipping_class_en = "Available 7-15 days";

 $term = get_term_by( 'slug', $product->get_shipping_class(), 'product_shipping_class' );

 //Availability for greek language

 if(ICL_LANGUAGE_CODE=='gr');{

     //message if has shipping class
     if( is_a($term, 'WP_Term') && $term->name == $defined_shipping_class ){
        echo '<p class="product-shipping-class">' . $term->name . '</p>';
    }
     //message if is low stock
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() >= 1 && $product->get_stock_quantity() <= 10 ) {
    echo 'Διαθεσιμότητα: ' . $product->get_stock_quantity() . ' τεμ.'; 
    }
     // message if is  out of stock 
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() <1  ) {
    echo "<p><a href='https://...../επικοινωνια/' style='background-color:#e1e2e2; padding:5px 15px;color:#ed1c24;'>Αναμένεται. Επικοινωνήστε μαζί μας.</a></p>" ;
    }
     // message if is in stock
    elseif( $_product->is_in_stock() && $product->get_stock_quantity() > 11  ) {
       echo  'Σε απόθεμα' . $product->get_stock_quantity() . ' τεμ.'; 
    }

 }

 //Availability for english language
if(ICL_LANGUAGE_CODE=='en'); {

    //message if has shipping class
    if( is_a($term, 'WP_Term') && $term->name == $defined_shipping_class_en ){
        echo '<p class="product-shipping-class">' . $term->name . '</p>';
    }
    //message if is low stock
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() >= 1 && $product->get_stock_quantity() <= 10 ) {
    echo 'Αvailability: ' . $product->get_stock_quantity() . ' pcs.'; 
    }
    // message if is  out of stock 
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() <1  ) {
    echo "<p><a href='https://....../επικοινωνια/' style='background-color:#e1e2e2; padding:5px 15px;color:#ed1c24;'>Expected.Please contact us.</a></p>" ;
    }
    // message if is in stock
    elseif( $_product->is_in_stock() && $product->get_stock_quantity() > 11  ) {
       echo  'In stock' . $product->get_stock_quantity() . ' pcs.'; 
    }

 }
}

Я хочу отобразить конкретное сообщение для каждого языка. Этот код печатает текст на обоих языках одновременно. Когда я ставлю elseif для английского языка, сайт ломается. Не могу понять, что я делаю не так... Заранее спасибо за помощь!


person Helen_zs    schedule 15.04.2019    source источник
comment
Я не понимаю - вы хотите печатать текст на обоих языках, этот код делает это, как вы говорите. Так что именно здесь происходит не так?   -  person Nico Haase    schedule 15.04.2019
comment
Привет, спасибо за ваш ответ. Этот код печатает оба сообщения для каждого языка. Бывший. если товар есть в наличии, он отображается на греческом языке: Διαθεσιμότητα¨2τεμ. Наличие 2шт. Я хочу отображать каждое сообщение для каждого языка.   -  person Helen_zs    schedule 15.04.2019
comment
Тогда вы должны написать код для именно этого: если вы придумали решение для греческого и английского, почему бы не продолжить и для других языков?   -  person Nico Haase    schedule 15.04.2019
comment
Но этот код должен печатать сообщение на соответствующем языке. Я не понимаю, что я делаю не так...   -  person Helen_zs    schedule 15.04.2019
comment
Что вы подразумеваете под печатью сообщения на соответствующем языке? Можете ли вы объяснить дальше, что пошло не так? Вы ожидаете, что этот код выведет сообщение на обоих языках, он делает именно это, но что вас все еще смущает?   -  person Nico Haase    schedule 15.04.2019
comment
Я ожидал, что этот код будет отображать сообщения в зависимости от языка. Бывший. в греческом языке должно отображаться только Διαθεσιμότητα 2 τεμ. а на английском должно отображаться только Availability 2pcs.. Теперь выводит оба сообщения вместе на обоих языках.   -  person Helen_zs    schedule 15.04.2019
comment
Ах, теперь это имеет смысл   -  person Nico Haase    schedule 15.04.2019


Ответы (2)


Взгляните на свои операторы if: если вы закончите их точкой с запятой, следующий блок больше не связан с этим оператором, поэтому он будет выполняться независимо от условия.

Чтобы было еще понятнее: следующие два блока выдают один и тот же результат:

// First
if(ICL_LANGUAGE_CODE=='en'); {
    echo 'test';
}

// Second
echo 'test';

Если вы удалите точку с запятой в этой строке if, первый вывод не будет показан, если условие не сработает.

person Nico Haase    schedule 15.04.2019
comment
Когда ``` if(ICL_LANGUAGE_CODE=='gr');{......} if(ICL_LANGUAGE_CODE=='en') {....} ```я получаю сообщение на греческом языке на обоих языках. Если я уберу обе точки с запятой, правильные сообщения будут отображаться только на английском языке, а на греческом языке ничего не отображается. - person Helen_zs; 15.04.2019
comment
Вы проверили, что точно содержит эта константа в случае греческого языка? Может код не указан как gr? - person Nico Haase; 15.04.2019

Это решило проблему:

add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2);
function wcs_custom_get_availability( $availability, $_product ) {
   global $product;
    $defined_shipping_class = "Κατόπιν Παραγγελίας 7-15 ημέρες";
    $defined_shipping_class_en = "Available 7-15 days";

 $term = get_term_by( 'slug', $product->get_shipping_class(), 'product_shipping_class' );

 //Availability for greek language
 if(ICL_LANGUAGE_CODE=='en') {

    //message if has shipping class
    if( is_a($term, 'WP_Term') && $term->name == $defined_shipping_class_en ){
        echo '<p class="product-shipping-class">' . $term->name . '</p>';
    }
    //message if is low stock
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() >= 1 && $product->get_stock_quantity() <= 10 ) {
    echo 'Αvailability: ' . $product->get_stock_quantity() . ' pcs.'; 
    }
    // message if is  out of stock 
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() <1  ) {
    echo "<p><a href='https://....../επικοινωνια/' style='background-color:#e1e2e2; padding:5px 15px;color:#ed1c24;'>Expected.Please contact us.</a></p>" ;
    }
    // message if is in stock
    elseif( $_product->is_in_stock() && $product->get_stock_quantity() > 11  ) {
       echo  'In stock' . $product->get_stock_quantity() . ' pcs.'; 
    }

 }


 //Availability for english language
elseif(ICL_LANGUAGE_CODE=='en') {

    //message if has shipping class
    if( is_a($term, 'WP_Term') && $term->name == $defined_shipping_class_en ){
        echo '<p class="product-shipping-class">' . $term->name . '</p>';
    }
    //message if is low stock
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() >= 1 && $product->get_stock_quantity() <= 10 ) {
    echo 'Αvailability: ' . $product->get_stock_quantity() . ' pcs.'; 
    }
    // message if is  out of stock 
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() <1  ) {
    echo "<p><a href='https://....../επικοινωνια/' style='background-color:#e1e2e2; padding:5px 15px;color:#ed1c24;'>Expected.Please contact us.</a></p>" ;
    }
    // message if is in stock
    elseif( $_product->is_in_stock() && $product->get_stock_quantity() > 11  ) {
       echo  'In stock' . $product->get_stock_quantity() . ' pcs.'; 
    }
}
    else{

     //message if has shipping class
     if( is_a($term, 'WP_Term') && $term->name == $defined_shipping_class ){
        echo '<p class="product-shipping-class">' . $term->name . '</p>';
    }
     //message if is low stock
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() >= 1 && $product->get_stock_quantity() <= 10 ) {
    echo 'Διαθεσιμότητα: ' . $product->get_stock_quantity() . ' τεμ.'; 
    }
     // message if is  out of stock 
    elseif ( $_product->is_in_stock() && $product->get_stock_quantity() <1  ) {
    echo "<p><a href='https://...../επικοινωνια/' style='background-color:#e1e2e2; padding:5px 15px;color:#ed1c24;'>Αναμένεται. Επικοινωνήστε μαζί μας.</a></p>" ;
    }
     // message if is in stock
    elseif( $_product->is_in_stock() && $product->get_stock_quantity() > 11  ) {
       echo  'Σε απόθεμα' . $product->get_stock_quantity() . ' τεμ.'; 
    }

 }


}
person Helen_zs    schedule 15.04.2019