• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Кликабельность товара в письме о новом заказе

jamaster

Форумчанин
Уважаемые ребята! помогите с решением проблемы!

как можно сделать в письме о новом заказе, чтобы название товара был кликабельным и ссылался на товар на сайте?

скрин во вложении о чем я толкую )

Заранее благодарю
 

Вложения

  • Screenshot_2.jpg
    Screenshot_2.jpg
    21.3 KB · Просмотры: 36

websplanet

Новичок
Привет!
Замени файл в теме /emails/admin-new-order.php
на это:
Код:
<?php do_action( 'woocommerce_email_header', $email_heading ); ?>

<p><?php printf( __( 'Был получен новый заказ от %s. Подробности заказа ниже:', 'woocommerce' ), $order->billing_first_name . ' ' . $order->billing_last_name ); ?></p>

<?php do_action( 'woocommerce_email_before_order_table', $order, true, false ); ?>

<h2><a href="<?php echo admin_url( 'post.php?post=' . $order->id . '&action=edit' ); ?>"><?php printf( __( 'Order: %s', 'woocommerce'), $order->get_order_number() ); ?></a> (<?php printf( '<time datetime="%s">%s</time>', date_i18n( 'c', strtotime( $order->order_date ) ), date_i18n( wc_date_format(), strtotime( $order->order_date ) ) ); ?>)</h2>

<table cellspacing="0" cellpadding="6" style="width: 100%; border: 1px solid #eee;" border="1" bordercolor="#eee">
    <thead>
        <tr>
            <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Product', 'woocommerce' ); ?></th>
            <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Quantity', 'woocommerce' ); ?></th>
            <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Price', 'woocommerce' ); ?></th>
        </tr>
    </thead>
    <tbody>
        <?php echo $order->email_order_items_table( false, true ); ?>
    </tbody>
    <tfoot>
        <?php
            if ( $totals = $order->get_order_item_totals() ) {
                $i = 0;
                foreach ( $totals as $total ) {
                    $i++;
                    if($i!=1):
                    ?><tr>
                        <th scope="row" colspan="2" style="text-align:left; border: 1px solid #eee; <?php if ( $i == 2 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['label']; ?></th>
                        <td style="text-align:left; border: 1px solid #eee; <?php if ( $i == 2 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['value']; ?></td>
                    </tr><?php
                    endif;
                }
            }
        ?>
    </tfoot>
</table>

<?php do_action( 'woocommerce_email_after_order_table', $order, true, false ); ?>
<p>&nbsp;</p><strong>
<?php do_action( 'woocommerce_email_order_meta', $order, true, false ); ?>
</strong>
<h2><?php _e( 'Customer details', 'woocommerce' ); ?></h2>

<?php if ( $order->billing_email ) : ?>
    <p><strong><?php _e( 'Email:', 'woocommerce' ); ?></strong> <?php echo $order->billing_email; ?></p>
<?php endif; ?>
<?php if ( $order->billing_phone ) : ?>
    <p><strong><?php _e( 'Tel:', 'woocommerce' ); ?></strong> <?php echo $order->billing_phone; ?></p>
<?php endif; ?>

<?php wc_get_template( 'emails/email-addresses.php', array( 'order' => $order ) ); ?>

<?php do_action( 'woocommerce_email_footer' ); ?>
 

jamaster

Форумчанин
Привет!
Замени файл в теме /emails/admin-new-order.php
на это:
Код:
<?php do_action( 'woocommerce_email_header', $email_heading ); ?>

<p><?php printf( __( 'Был получен новый заказ от %s. Подробности заказа ниже:', 'woocommerce' ), $order->billing_first_name . ' ' . $order->billing_last_name ); ?></p>

<?php do_action( 'woocommerce_email_before_order_table', $order, true, false ); ?>

<h2><a href="<?php echo admin_url( 'post.php?post=' . $order->id . '&action=edit' ); ?>"><?php printf( __( 'Order: %s', 'woocommerce'), $order->get_order_number() ); ?></a> (<?php printf( '<time datetime="%s">%s</time>', date_i18n( 'c', strtotime( $order->order_date ) ), date_i18n( wc_date_format(), strtotime( $order->order_date ) ) ); ?>)</h2>

<table cellspacing="0" cellpadding="6" style="width: 100%; border: 1px solid #eee;" border="1" bordercolor="#eee">
    <thead>
        <tr>
            <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Product', 'woocommerce' ); ?></th>
            <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Quantity', 'woocommerce' ); ?></th>
            <th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Price', 'woocommerce' ); ?></th>
        </tr>
    </thead>
    <tbody>
        <?php echo $order->email_order_items_table( false, true ); ?>
    </tbody>
    <tfoot>
        <?php
            if ( $totals = $order->get_order_item_totals() ) {
                $i = 0;
                foreach ( $totals as $total ) {
                    $i++;
                    if($i!=1):
                    ?><tr>
                        <th scope="row" colspan="2" style="text-align:left; border: 1px solid #eee; <?php if ( $i == 2 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['label']; ?></th>
                        <td style="text-align:left; border: 1px solid #eee; <?php if ( $i == 2 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['value']; ?></td>
                    </tr><?php
                    endif;
                }
            }
        ?>
    </tfoot>
</table>

<?php do_action( 'woocommerce_email_after_order_table', $order, true, false ); ?>
<p>&nbsp;</p><strong>
<?php do_action( 'woocommerce_email_order_meta', $order, true, false ); ?>
</strong>
<h2><?php _e( 'Customer details', 'woocommerce' ); ?></h2>

<?php if ( $order->billing_email ) : ?>
    <p><strong><?php _e( 'Email:', 'woocommerce' ); ?></strong> <?php echo $order->billing_email; ?></p>
<?php endif; ?>
<?php if ( $order->billing_phone ) : ?>
    <p><strong><?php _e( 'Tel:', 'woocommerce' ); ?></strong> <?php echo $order->billing_phone; ?></p>
<?php endif; ?>

<?php wc_get_template( 'emails/email-addresses.php', array( 'order' => $order ) ); ?>

<?php do_action( 'woocommerce_email_footer' ); ?>


большое спасибо!
 

jamaster

Форумчанин
а есть вариант сделать эту же фичу в письме которая приходит клиенту?
 

websplanet

Новичок
Я не весь код добавил!
Так же необходимо добавить в файл /emails/email-order-items.php это:
Код:
// Title
    echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item );

ЗАМЕНИТЬ НА ЭТО:

echo '<a href="'.get_permalink($_product->id).'">';
echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item );
echo '</a>';
 

websplanet

Новичок
И по аналогии с первым постом сделать письмо, которое клиенту приходит ))))

В принципе, это я делал для себя и кое-что из письма убирал!

Для ваших нужд достаточно добавления ссылки в файл order-item
 

belfer

Новичок
Как можно добавить ссылку в письмо, в которой будут переменные с данными о заказе, такие как номер заказа, ФИО, общая стоимость? Это надо для последующего заполнения полей input через метод GET.
 

Yogamat

Форумчанин
Я не весь код добавил!
Так же необходимо добавить в файл /emails/email-order-items.php это:
Код:
// Title
    echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item );

ЗАМЕНИТЬ НА ЭТО:

echo '<a href="'.get_permalink($_product->id).'">';
echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item );
echo '</a>';

Спасибо. Но у меня ссылалось на главную.
Заменил $_product на $product, и все работает
 

wp.org.ru

Новичок
Более простое решение. Добавить в functions.php :cool:

Код:
//ссылка на товар в письме woocommerce
add_filter( 'woocommerce_order_item_name', 'display_product_title_as_link', 10, 2 );
function display_product_title_as_link( $item_name, $item ) {
$_product = get_product( $item['variation_id'] ? $item['variation_id'] : $item['product_id'] );
$link = get_permalink( $_product->id );
return '<a href="'. $link .'"  rel="nofollow">'. $item_name .'</a>';
}
 
Сверху Снизу