Пагинация в ACF Repeater

Advanced Custom Fields это ‘must have’ плагин для создания любого сайта на Worpdress. Он позволяет с лёгкостью создавать, управлять и выводить произвольные поля в любом месте вашего шаблона. И его функционал можно ещё больше расширить используя дополнение Repeater Field.  Но страница на которой используется Repeater может получится слишком большой, если вы используете много записей и возможно вам придётся использовать для неё пагинацию. И сейчас я покажу вам как это сделать.

В этом примере, мы будем добавлять пагинацию к полю image_gallery, с дочерним полем image которое содержит объект изображения. Наш Repeater будет на странице с ссылкой /gallery.

На странице будет выведено 10 изображений и ссылки под ними позволят пользователю переходить по страницам галереи. Наши ссылки будут иметь вид /gallery/2/, /gallery/3/ и т.д.

Ну и собственно сам код:

<?php
/* 
 * Paginate Advanced Custom Field repeater
 */

if( get_query_var('page') ) {
  $page = get_query_var( 'page' );
} else {
  $page = 1;
}

// Variables
$row              = 0;
$images_per_page  = 10; // How many images to display on each page
$images           = get_field( 'image_gallery' );
$total            = count( $images );
$pages            = ceil( $total / $images_per_page );
$min              = ( ( $page * $images_per_page ) - $images_per_page ) + 1;
$max              = ( $min + $images_per_page ) - 1;

// ACF Loop
if( have_rows( 'image_gallery' ) ) : ?>

  <?php while( have_rows( 'image_gallery' ) ): the_row();

    $row++;

    // Ignore this image if $row is lower than $min
    if($row < $min) { continue; }

    // Stop loop completely if $row is higher than $max
    if($row > $max) { break; } ?>                     
    
    <?php $img_obj = get_sub_field( 'image' ); ?>
    <a href="<?php echo $img_obj['sizes']['large']; ?>">
      <img src="<?php echo $img_obj['sizes']['thumbnail']; ?>" alt="">
    </a>

  <?php endwhile;

  // Pagination
  echo paginate_links( array(
    'base' => get_permalink() . '%#%' . '/',
    'format' => '?page=%#%',
    'current' => $page,
    'total' => $pages
  ) );
  ?>

<?php else: ?>

  No images found

<?php endif; ?>

Источник: http://jonathannicol.com/blog/2014/03/06/paginating-an-advanced-custom-fields-repeater/

Как преобразовать строку в логический тип?

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

Читать далее Как преобразовать строку в логический тип?

Адаптивная таблица на чистом CSS

@media screen and (max-width: 950px) {
    table {
        border: 0;
        width: 100%;
        display: table !important;
    }
    table thead {
        display: none;
    }
    table tr {
        margin-bottom: 10px;
        display: block;
        border-bottom: 2px solid #ddd;
    }
    table td {
        display: block;
        text-align: right !important;
        font-size: 13px;
        border-bottom: 1px dotted #ccc;
        &:last-of-type {
            text-align: center !important;
        }
    }
    table td:last-child {
        border-bottom: 0;
    }
    table td:before {
        content: attr(data-label);
        float: left;
        text-transform: uppercase;
        font-weight: bold;
    }
}

Весь блок <thead> будет скрыт, вместо него нужно каждой ячейке <td> добавить заголовок через атрибут data-label.

Exchange Rates Today — простой плагин WordPress для изменения курса валют на сайте

2015-04-14 22-50-19 WordPress › Exchange Rates Today « WordPress Plugins - Google Chrome

 

Exchange Rates Today — плагин для WooCommerce который позволяет Вам задать в магазине национальную валюту, но вести учёт в зависимости от текущего курса валют. Вы просто указываете цену в нужной Вам валюте и каждый день обновляете курс.

К примеру валюта вашего сайта гривна, но все цены у Вас привязаны к доллару. Вы устанавливаете плагин https://wordpress.org/plugins/exchange-rates-today/

В настройках ставите валюту гривны:

2015-04-14 22-58-03 WooCommerce Settings ‹ Jane Doe — WordPress - Google Chrome

 

Все цены на сайте указываете в долларах:

2015-04-14 22-59-14 Add New Product ‹ Jane Doe — WordPress - Google Chrome

 

В главном меню, в разделе WooCommerce находите ссылку «Курс сегодня» и указываете текущий курс валют:

2015-04-14 23-14-07 Курс сегодня ‹ Jane Doe — WordPress - Google Chrome

 

После этого все цены на сайте пересчитаются по текущему курсу валют:

2015-04-14 23-05-52 Products Jane Doe - Google Chrome

 

Скачать плагин. 

UPD: плагин обновлён, должна пропасть ошибка с дробной ценой, о которой писали в комментариях.

Добавляем заказ в WooCommerce программно.

Наверное кто хоть раз сталкивались с созданием интернет-магазина на Woocommerce знают о его громоздкой и не приспособленной для стран СНГ странице checkout. (P.S. да, я знаю о saphali и о множестве плагинов для её редактирования, но речь сейчас не об этом).

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

2015-04-07 14-10-47 Cart Wptest - Google Chrome

 

 

 

 

 

 

В WC для этого есть функция wc_create_order() которая создаёт новый заказ и возвращает его в виде объекта в который мы можем добавить нужные свойства.

 

$order=wc_create_order(); //создаём новый заказ
//Записываем в массив данные о доставке заказа и данные клиента
$address = array(
        'first_name' => $first_name,
        'last_name'  => $last_name,
        'company'    => '',
        'email'      => $email,
        'phone'      => '',
        'address_1'  => $adress_one,
        'address_2'  => $adress_two, 
        'city'       => $city,
        'state'      => '',
        'postcode'   => $postcode,
        'country'    => ''
    ); 
 $order->add_product( get_product( '99' ), 1 );//Добавляем в заказ товары: 99-ID товара, 1-количество
 $order->set_address( $address, 'billing' ); //Добавляем данные о доставке
 $order->set_address( $address, 'shipping' ); // и оплате
 $order->calculate_totals(); //подбиваем сумму и видим что наш заказ появился в админке

Это минимальные данные нужные для оформления заказа (кол-во элементов в массиве можно уменьшить, заполнив только необходимые поля).

Так же вы можете использовать методы описсаные на странице WooCommerce API: http://docs.woothemes.com/wc-apidocs/class-WC_Order.html. Я для сокращённой формы заказ использовал так-же:

$order->add_order_note($comment); //добавляет комментарий к заказу
$order->update_status('processing', $payment); //устанавливает статус заказа "В обработке" (в этом случае WooCommerce отправляет уведомление администратору сайта и клиенту) и записываем информацию об оплате

SASS функции

Функции используются для вычисления значений и не выводят никакого CSS кода, они только возвращаю значения который могут быть использованы в CSS.
Читать далее SASS функции