Ошибка логики вложенных функций PHP - перевод functions.php с WPML - PullRequest
0 голосов
/ 04 июня 2019

Я перевожу фрагмент текста, который отображается на странице оформления заказа, с помощью пользовательского кода, который я использую.Как правильно использовать вложенные функции в PHP?

Я изменил эхо-функцию на распознаваемую WPML-функцию, но безрезультатно во внешнем интерфейсе.

add_action( 'woocommerce_review_order_before_submit', 'bbloomer_checkout_add_on', 9999 );

function bbloomer_checkout_add_on() {
   $product_ids = array( 14877, 14879, 15493 );
   $in_cart = false;
   foreach( WC()->cart->get_cart() as $cart_item ) {
      $product_in_cart = $cart_item['product_id'];
      if ( in_array( $product_in_cart, $product_ids ) ) {
         $in_cart = true;
         break;
      }
   }
   if ( ! $in_cart ) {
      echo '<h4><b>● Would you like to add 10/20/30 small sample vials?</b></h4>';

      function change_sm_location_search_title( $original_value ) {
    return '<h4><b>' . __('● Would you like to add 10/20/30 small sample vials?','text-domain') . '</b></h4>';
}
add_filter( 'sm-location-search-title', 'change_sm_location_search_title' );

      echo '<p><a class="button" style="width: 140px" href="?add-to-cart=1183"> €1.2 (10) </a><a class="button" style="width: 140px" href="?add-to-cart=9945"> €2.1 (20)</a><a class="button" style="width: 140px" href="?add-to-cart=9948"> €3 (30)</a></p>';
   }
} 

Эхо-кадры отображаются во внешнем интерфейсе, но новая функция текстового домена отображается только на бэкенде.

1 Ответ

1 голос
/ 04 июня 2019

Фильтры используются для замены значений. Вы должны вывести объявление функции фильтра за пределы основной функции и использовать вызов apply_filters, чтобы использовать фильтр.

Вместо этого вы также можете использовать ловушку действия. Я предлагаю почитать об использовании хуков и фильтров: https://docs.presscustomizr.com/article/26-wordpress-actions-filters-and-hooks-a-guide-for-non-developers

И вот этот ответ для лучшего понимания работы фильтра: https://wordpress.stackexchange.com/questions/97356/trouble-understanding-apply-filters

Это должно работать (не проверено).

add_action( 'woocommerce_review_order_before_submit', 'bbloomer_checkout_add_on', 9999 );

    function bbloomer_checkout_add_on() {
       $product_ids = array( 14877, 14879, 15493 );
       $in_cart = false;
       foreach( WC()->cart->get_cart() as $cart_item ) {
          $product_in_cart = $cart_item['product_id'];
          if ( in_array( $product_in_cart, $product_ids ) ) {
             $in_cart = true;
             break;
          }
       }
       if ( ! $in_cart ) {
          echo apply_filters('sm-location-search-title', 'Would you like to add 10/20/30 small sample vials?');
          echo '<p><a class="button" style="width: 140px" href="?add-to-cart=1183"> €1.2 (10) </a><a class="button" style="width: 140px" href="?add-to-cart=9945"> €2.1 (20)</a><a class="button" style="width: 140px" href="?add-to-cart=9948"> €3 (30)</a></p>';
       }
    }   
    function change_sm_location_search_title( $original_value ) {
      return '<h4><b>' . __($original_value,'text-domain') . '</b></h4>';
    }  
    add_filter( 'sm-location-search-title', 'change_sm_location_search_title');
...