Заменить конкретное слово для метода оплаты BACS на страницах редактирования заказа Woocommerce

Я новичок в woocommerce, используя ловушку gettext, я могу заменить текст «оплачено» на «размещено», но я хочу отображать этот текст на основе одного условия, т.е. когда клиент выбирает банковский перевод (bacs), поскольку платеж не был получен только тогда текст необходимо заменить на размещенный

Я прикрепил изображение. Заменить конкретное слово для метода оплаты BACS на страницах редактирования заказа Woocommerce

🤔 А знаете ли вы, что...
PHP поддерживает многопоточность и многозадачность.


1
316
2

Ответы:

Решено

Ну вот

Сначала давайте добавим функцию изменения текста:

function change_text($translated_text, $text, $domain)
    {

        switch ($translated_text) {

            case 'Paid on %1$s @ %2$s':

                $translated_text = __('Placed on %1$s @ %2$s', 'woocommerce');
                break;

        }

        return $translated_text;
    }

Условие:

Теперь давайте создадим наше условие, получив все идентификаторы заказа с помощью банковского перевода, и если текущий идентификатор сообщения соответствует нашему идентификатору заказа, мы можем вызвать функцию изменения текста следующим образом:

add_action('admin_head', 'current_screen');
function current_screen()
{
    global $post;

    if (empty($post)) {
        return;
    } else {
        $postid = $post->ID;
    }
    $args = array(
        'payment_method' => 'bacs',
        'return' => 'ids',
    );

    $ordersid = wc_get_orders($args);

    if (!empty($postid) && in_array($postid, $ordersid)) {
        add_filter('gettext', 'change_text', 20, 3);
    }
}

Эта уникальная легкая функция перехвата заменит "Оплачено" на "Размещено" для способа оплаты BACS:

add_filter( 'gettext', 'change_order_edit_text', 20, 3 );
function change_order_edit_text( $translated, $text, $domain ) {
    global $pagenow;

    // Only active on order edit pages
    if ( ! is_admin() || $pagenow != 'post.php' || get_post_type($_GET['post']) != 'shop_order' )
        return $translated; // Exit

    // Get the payment method used for the current order
    $payment_method = get_post_meta( $_GET['post'], '_payment_method', true );

    // Replacing the word "Paid" for BACS payment method only
    if ( $translated == 'Paid on %1$s @ %2$s' && isset($payment_method) && $payment_method == 'bacs' )
        $translated = __('Placed on %1$s @ %2$s', 'woocommerce');

    return $translated;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.