/ Сайтостроение / Wordpress / Массовое изменение метаполей

Массовое изменение метаполей

HIT

20.08.2017

1138

2

Известная проблема/неудобство wordpress — обновление метаполей, т.е. чтобы обновить метаполе необходимо войти в запись и обновить ее. Массовое редактирование (например поменять статус записей или т.п.) в данном случае не помогает — на метаполя это не оказывает действия. Рассмотрим альтернативные варианты.

Простой перебор массива

Данный метод довольно примитивен, но эффективен (тестировал лично, количество записей 2000 шт, обрабатываются таким образом несколько секунд).

Вот пример обновление метаполя _price с ценой товара woocommerce. При этом задано условие, что если у товара есть цена распродажи (_sale_price) то брать её, а если нет то брать обычную цену (_regular_price).

<?php global $post;

$args = array(
'posts_per_page' => -1,
'post_type' => 'product'
);

$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

<?php if(get_post_meta($post->ID, '_sale_price', true)): ?>

<?php $newprice = get_post_meta($post->ID, '_sale_price', true); ?>
<?php update_post_meta($post->ID, '_price', $newprice); ?>

<?php else: ?>

<?php $newprice = get_post_meta($post->ID, '_regular_price', true); ?>
<?php update_post_meta($post->ID, '_price', $newprice); ?>

<?php endif; ?>

<h3><?php echo $post->post_title; ?></h3> //это строка нужна фактически для достоверности: что обновилось

<?php endforeach; ?>
<?php wp_reset_postdata() ?>

При необходимости можно создать (если у записи его не было) или удалить метаполе

add_post_meta($post->ID, 'meta_key', 'meta_value', true);
delete_post_meta($post_id, $key, $value);

Последний параметр add_post_meta — Уникальность:
true — уникальный, false — не уникальный (по умолчанию). Если поставить параметр в true, то при добавлении поля, сначала будет проверяться существует ли уже поле с таким же ключом, если существует, то поле не будет добавлено.

Обновление строк напрямую в базе данных ($wpdb->get_results)

Плагин Custom Field Bulk Editor (4000)

Недавно натолкнулся на данный плагин. В плане обновления, возможно, он и не очень удобен, но в плане добавления некоего метаполя можно попробовать.

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Функция действующая на конкретный раздел

Функция действующая на конкретный раздел

Создадим функцию, которая будет действовать на конкретный раздел сайта, в частности на конкретную категорию woocommerce. Задачу разобьем на 2 этапа: выборка категорий необходимых для воздействия и непосредственно функция. Вывод определенного Читать далее »

/
Варианты сортировки woocommerce

Варианты сортировки woocommerce

Добавляем свои варианты сортировки в woocommerce, кроме стандартных: по цене, по новизне, по популярности, по рейтингам. Вариант сортировки: Случайно Вариант сортировки: По названию Вариант сортировки: По меткам Вариант сортировки: По Читать далее »

/
Конвертировать цену в рубли

Конвертировать цену в рубли

Предположим, что есть товары, цена которых у продавца в долларах, но при этом на сайте мы хотим продавать эти товары за рубли по сегодняшнему курсу, чтобы не усложнять функционал мультивалютностью. Читать далее »

Добавить комментарий

2 комментария

  1. Аватар
    Dmitry

    Здравствуйте, подскажите как вывести разницу в ценах в вордпресс(цены — новая и старая сделаны, через ACF — произвольные поля ), между старой и новой ценой, типа
    <?php
    $price=str_replace(" ","",$price);
    $old_price=str_replace(" ","",$old_price);
     
    if($old_price > 0){
      return ''.($old_price - $price);

    return '';

    1. Alexandr
      Alexandr

      Сходу не подскажу, т.к. ACF давно не использую. Логика должна быть примерно такой (можно прямо в шаблоне):

      $price = получить у ACF цену;
      $old_price = получить у ACF старую цену;
      
      if($price => 0 && $old_price => 0){
        $sale = $old_price - $price;
        echo $sale;
      }
Массовое изменение метаполей
Цены в зависимости от группы пользователей
Рекомендации для васЦены в зависимости от группы пользователейOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.