WP CLI ile WooCommerce Siparişlerine Not Ekleme: wp wc order_note Kullanımı
WooCommerce mağazanızı yönetirken sipariş notları, müşteri iletişiminin ve iç operasyonların bel kemiğini oluşturur. Bir müşteriye kargo takip numarası iletmek, ödeme durumu hakkında not düşmek ya da depo ekibine özel talimat vermek… Bunların hepsini WP-CLI üzerinden yapmak, özellikle toplu işlemler söz konusu olduğunda hayat kurtarıcıdır. Bu yazıda wp wc order_note komutunu her yönüyle ele alacağız.
WooCommerce Sipariş Notları Nedir?
WooCommerce’de sipariş notları iki farklı türde bulunur. Müşteri notları (customer notes), alışveriş yapan kişinin sipariş takip sayfasında görebildiği ve e-posta ile iletilen notlardır. İç notlar (private notes) ise yalnızca mağaza yöneticisinin görebildiği, operasyonel amaçlı kayıtlardır.
Yönetim panelinden bu notları tek tek eklemek küçük bir mağaza için yeterli olabilir. Ancak yüzlerce siparişi aynı anda güncellemek gerektiğinde, ya da otomasyona dayalı bir süreç kurduğunuzda, WP-CLI’nin gücünden yararlanmak zorunlu hale gelir.
WP-CLI ile WooCommerce Kurulum Kontrolü
Komutları çalıştırmadan önce ortamın hazır olduğundan emin olalım.
# WP-CLI versiyonunu kontrol et
wp --version
# WooCommerce eklentisinin aktif olduğunu doğrula
wp plugin status woocommerce
# WooCommerce REST API namespace kontrolü
wp wc --help
Eğer wp wc komutu tanınmıyorsa, WooCommerce ya aktif değildir ya da WP-CLI’nin WooCommerce entegrasyonu düzgün yüklenmemiştir. WooCommerce 3.0 ve sonrasında bu komutlar varsayılan olarak gelir.
order_note Komutunun Yapısı
wp wc order_note komutu dört temel alt komut içerir:
- create: Siparişe yeni not ekler
- get: Belirli bir notu getirir
- list: Siparişe ait tüm notları listeler
- delete: Belirli bir notu siler
Temel sözdizimi şu şekildedir:
wp wc order_note <komut> <siparis_id> [parametreler] --user=admin
--user parametresi kritik önem taşır. WooCommerce REST API komutları yetkilendirme gerektirir, bu yüzden yeterli yetkiye sahip bir kullanıcı belirtmek zorunludur.
Sipariş Notu Ekleme: create Komutu
Temel Kullanım
En basit haliyle bir sipariş notu eklemek:
wp wc order_note create 145
--note="Kargo firmasına teslim edildi."
--user=admin
Bu komut, 145 numaralı siparişe bir iç not ekler. Çıktı olarak oluşturulan notun ID’si döner.
Müşteri Bildirimi ile Not Ekleme
Müşteriyi bilgilendirmek istediğinizde --customer_note parametresini kullanırsınız:
wp wc order_note create 145
--note="Siparişiniz kargoya verilmiştir. Takip numaranız: TRK123456789"
--customer_note=true
--user=admin
--customer_note=true olarak ayarlandığında, WooCommerce bu notu müşteriye e-posta ile iletir ve sipariş takip sayfasında gösterir. Bu parametre için:
- –customer_note=true: Müşteriye görünür ve e-posta gönderilir
- –customer_note=false: Yalnızca yönetici görebilir (varsayılan davranış)
JSON Formatında Çıktı Alma
Otomasyon senaryolarında JSON çıktısı işleri kolaylaştırır:
wp wc order_note create 145
--note="Ödeme onaylandı, hazırlanıyor."
--customer_note=false
--format=json
--user=admin
Dönen çıktı şuna benzer bir yapıda olur:
{"id": 47, "author": "WooCommerce", "date_created": "2024-01-15T14:30:00", "note": "Ödeme onaylandı, hazırlanıyor.", "customer_note": false}
Notları Listeleme ve Görüntüleme
Siparişe Ait Tüm Notları Listele
wp wc order_note list 145 --user=admin
Varsayılan tablo formatında çıktı verir. Sütunlar ID, yazar, tarih ve not içeriğini gösterir.
Belirli Bir Notu Getirme
Not ID’sini biliyorsanız direkt olarak o notu sorgulayabilirsiniz:
wp wc order_note get 145 47 --user=admin
Burada 145 sipariş ID’si, 47 ise not ID’sidir.
Sadece Müşteri Notlarını Filtreleme
Liste çıktısını JSON olarak alıp filtreleyebilirsiniz:
wp wc order_note list 145
--format=json
--user=admin | python3 -c "
import json, sys
notes = json.load(sys.stdin)
customer_notes = [n for n in notes if n['customer_note']]
print(json.dumps(customer_notes, indent=2))
"
Gerçek Dünya Senaryoları
Senaryo 1: Toplu Kargo Takip Numarası Ekleme
Bir e-ticaret mağazasında günde 200-300 sipariş çıkıyorsa ve kargo firmasından toplu takip numaraları CSV olarak geliyorsa, bu işlemi manuel yapmak saatler sürebilir. Aşağıdaki bash scripti bu süreci otomatize eder:
#!/bin/bash
# kargo_notlari.sh
# CSV Format: siparis_id,takip_no
# Kullanim: ./kargo_notlari.sh kargo_listesi.csv
CSV_FILE="$1"
WP_PATH="/var/www/html"
ADMIN_USER="admin"
LOG_FILE="/var/log/kargo_notlari.log"
if [ -z "$CSV_FILE" ]; then
echo "Kullanim: $0 <csv_dosyasi>"
exit 1
fi
echo "Islem basladi: $(date)" >> "$LOG_FILE"
while IFS=',' read -r order_id tracking_no; do
# Bos satir ve baslik satirini atla
[[ -z "$order_id" || "$order_id" == "siparis_id" ]] && continue
NOTE="Siparişiniz kargoya verilmiştir. Takip Numarası: ${tracking_no} - Takip için: https://sureklikargo.com.tr/sorgula"
RESULT=$(wp wc order_note create "$order_id"
--note="$NOTE"
--customer_note=true
--user="$ADMIN_USER"
--path="$WP_PATH"
--format=json 2>&1)
if echo "$RESULT" | grep -q '"id"'; then
echo "BASARILI: Siparis $order_id - Takip: $tracking_no" | tee -a "$LOG_FILE"
else
echo "HATA: Siparis $order_id - $RESULT" | tee -a "$LOG_FILE"
fi
# API limitlerini zorlamaktan kacin
sleep 0.5
done < "$CSV_FILE"
echo "Islem tamamlandi: $(date)" >> "$LOG_FILE"
Senaryo 2: Belirli Durumdaki Siparişlere Toplu Not Düşme
Uzun süredir bekleyen “processing” durumundaki siparişlere otomatik not eklemek için:
#!/bin/bash
# bekleyen_siparisler_not.sh
WP_PATH="/var/www/html"
ADMIN_USER="admin"
# 3 gunden eski processing siparislerini bul
ORDERS=$(wp wc order list
--status=processing
--field=id
--user="$ADMIN_USER"
--path="$WP_PATH"
--format=ids 2>/dev/null)
if [ -z "$ORDERS" ]; then
echo "Not eklenecek siparis bulunamadi."
exit 0
fi
BUGUN=$(date +%Y-%m-%d)
NOTLANAN=0
for ORDER_ID in $ORDERS; do
# Siparis tarihini al
ORDER_DATE=$(wp wc order get "$ORDER_ID"
--field=date_created
--user="$ADMIN_USER"
--path="$WP_PATH" 2>/dev/null | cut -d'T' -f1)
# Tarih farkini hesapla
FARK=$(( ($(date -d "$BUGUN" +%s) - $(date -d "$ORDER_DATE" +%s)) / 86400 ))
if [ "$FARK" -ge 3 ]; then
wp wc order_note create "$ORDER_ID"
--note="UYARI: Bu siparis $FARK gundur 'processing' durumunda. Kontrol gerekiyor. Kontrol eden: Otomatik Sistem - $BUGUN"
--customer_note=false
--user="$ADMIN_USER"
--path="$WP_PATH" > /dev/null 2>&1
echo "Not eklendi: Siparis #$ORDER_ID ($FARK gün bekliyor)"
NOTLANAN=$((NOTLANAN + 1))
fi
done
echo "Toplam $NOTLANAN siparişe not eklendi."
Senaryo 3: Ödeme Hatası Loglama
Ödeme gateway’lerinden gelen hata kodlarını sipariş notuna otomatik yazmak, debug süreçlerini ciddi ölçüde hızlandırır:
#!/bin/bash
# odeme_hata_log.sh
# Kullanim: ./odeme_hata_log.sh <siparis_id> <hata_kodu> <hata_mesaji>
ORDER_ID="$1"
ERROR_CODE="$2"
ERROR_MSG="$3"
WP_PATH="/var/www/html"
ADMIN_USER="admin"
if [ -z "$ORDER_ID" ] || [ -z "$ERROR_CODE" ]; then
echo "Kullanim: $0 <siparis_id> <hata_kodu> [hata_mesaji]"
exit 1
fi
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
NOTE="[ODEME HATASI] Zaman: $TIMESTAMP | Kod: $ERROR_CODE | Mesaj: ${ERROR_MSG:-Detay yok} | Otomatik log."
wp wc order_note create "$ORDER_ID"
--note="$NOTE"
--customer_note=false
--user="$ADMIN_USER"
--path="$WP_PATH"
echo "Hata notu eklendi: Siparis #$ORDER_ID - Kod: $ERROR_CODE"
Not Silme İşlemleri
Yanlış eklenen ya da gereksiz notları temizlemek için:
# Belirli bir notu sil
wp wc order_note delete 145 47 --user=admin
# Onay istemeden sil
wp wc order_note delete 145 47 --user=admin --force
Dikkat edilmesi gereken nokta: WooCommerce bazı sistem notlarının silinmesine izin vermez. Durum geçiş notları bu kategoriye girer.
Eski Notları Toplu Temizleme
#!/bin/bash
# eski_notlari_temizle.sh
# Bir siparisteki tum notlari listeler ve siler (dikkatli kullanin!)
ORDER_ID="$1"
WP_PATH="/var/www/html"
ADMIN_USER="admin"
if [ -z "$ORDER_ID" ]; then
echo "Siparis ID gerekli."
exit 1
fi
# Tum not ID'lerini al
NOTE_IDS=$(wp wc order_note list "$ORDER_ID"
--field=id
--user="$ADMIN_USER"
--path="$WP_PATH"
--format=ids 2>/dev/null)
if [ -z "$NOTE_IDS" ]; then
echo "Siparis #$ORDER_ID icin not bulunamadi."
exit 0
fi
echo "Siparis #$ORDER_ID icin silinecek notlar: $NOTE_IDS"
read -p "Devam etmek istiyor musunuz? (e/h): " CONFIRM
if [ "$CONFIRM" = "e" ]; then
for NOTE_ID in $NOTE_IDS; do
wp wc order_note delete "$ORDER_ID" "$NOTE_ID"
--force
--user="$ADMIN_USER"
--path="$WP_PATH" > /dev/null 2>&1
echo "Not silindi: #$NOTE_ID"
done
echo "Tum notlar temizlendi."
else
echo "Islem iptal edildi."
fi
Cron ile Otomatik Not Sistemi Kurma
Günlük rutin kontroller için cron entegrasyonu kurmak son derece pratiktir:
# Crontab'a eklenecek satirlar
# Her sabah 09:00'da bekleyen siparisleri kontrol et
0 9 * * * /bin/bash /opt/scripts/bekleyen_siparisler_not.sh >> /var/log/woo_cron.log 2>&1
# Her Pazartesi kargo takip notlarini guncelle
0 8 * * 1 /bin/bash /opt/scripts/kargo_notlari.sh /data/haftalik_kargo.csv >> /var/log/kargo_cron.log 2>&1
Cron scriptlerinde --path parametresini mutlaka belirtmek gerekir, çünkü cron farklı bir working directory ile çalışır:
wp wc order_note create 145
--note="Otomatik sistem kontrolü tamamlandı."
--user=admin
--path=/var/www/html
--url=https://magazaniz.com
Çoklu site (multisite) yapılarında --url parametresi de şarttır.
Hata Ayıklama ve Sorun Giderme
Yaygın Hatalar ve Çözümleri
“Error: Sorry, you are not allowed to do this.” hatası alıyorsanız:
# Kullanicinin rolunu kontrol et
wp user get admin --field=roles --user=admin
# Yeterli rol atanmis mi kontrol et
wp user list --role=administrator
“Error: Invalid parameter(s): note” hatası genellikle not içeriğinin boş geçilmesinden kaynaklanır. Shell değişkenlerini her zaman tırnak içinde kullanın.
Sipariş bulunamıyor hatası için:
# Once siparisın var olup olmadigini dogrula
wp wc order get 145 --user=admin --path=/var/www/html
# Siparis listesinde ara
wp wc order list --search="145" --user=admin
Performans ve Güvenlik Notları
Toplu işlemlerde dikkat edilmesi gereken bazı kritik noktalar vardır:
- Rate limiting: Döngü içinde
sleep 0.5veyasleep 1kullanmak, veritabanı üzerindeki anlık yükü dengeler. Yüzlerce kayıt işlenirken bu küçük bekleme ciddi fark yaratır.
- Log tutma: Her toplu işlemin çıktısını bir log dosyasına yönlendirin. Bir şeyler ters gittiğinde hangi siparişlere not eklendiğini bilmek çok önemlidir.
- Test ortamı: Üretim ortamında büyük toplu işlemler yapmadan önce staging ortamında deneyin. Yanlış not içeriğiyle 500 müşteriye e-posta gitmesi hoş olmaz.
- Kullanıcı yetkileri: WP-CLI işlemleri için mümkünse özel bir “CLI kullanıcısı” oluşturun. Bu kullanıcıya administrator rolü verin fakat sadece sunucu üzerinden giriş yapabilsin. Bu sayede audit loglarında hangi işlemlerin otomatik hangileri manuel yapıldığını ayırt edebilirsiniz.
- Not içeriği sanitizasyonu: Dışarıdan gelen verilerle (CSV, API yanıtları vs.) not oluştururken özel karakterlere dikkat edin. Tek tırnak veya çift tırnak içeren veriler komutu bozabilir.
printf '%q'kullanımı veya heredoc yapısı bu sorunları önler.
Sonuç
wp wc order_note komutu, WooCommerce mağaza yönetiminde küçük ama etkili bir araçtır. Tek başına kullanıldığında hızlı bir şekilde not eklemenizi sağlar; bash scriptleriyle ve cron ile birleştirildiğinde ise tam anlamıyla bir otomasyon gücüne dönüşür.
Özellikle kargo takip numaralarının toplu iletilmesi, bekleyen siparişlerin işaretlenmesi ve ödeme hatalarının loglanması gibi tekrarlayan operasyonel görevlerde bu komutu kullanmak, hem zamandan tasarruf sağlar hem de insan hatasını en aza indirir.
WP-CLI ile WooCommerce yönetimi bu komutla sınırlı değil elbette. Sipariş durumu güncelleme, ürün yönetimi, müşteri işlemleri gibi onlarca başka komut da aynı mantıkla çalışır ve birbirleriyle zincirlenebilir. Bir sonraki yazıda wp wc order komutunu ve sipariş durumu yönetimini ele alacağız.
