WooCommerce Ürün Satıcısı – Ön Uç Yönetimi Gösterge Tablosu Ekle

Ana bölümdeki bu makalenin amaçları için, Woocommerce ürün satıcı eklentisinde bir woocommerce rezervasyon eklentisi kullanarak satılan siparişleri yönetmek için nasıl bir gösterge tablosu eklediğimi göstereceğim, çünkü son kod için yaptım ve sadece paketlenmiş iyi ve düzgün bir şekilde ve hepsi test edilir. Bununla birlikte, diğer uzantılardan ürünleri ve aynı yerden nakliye vb. Gibi diğer seçenekleri yönetmek için kolayca kullanılabilir. Bunun kodunu https://gist.github.com/liambailey/05f083a0c8069301949c için ekledim – bu yüzden lütfen orada kontrol edin.
Şimdi – Kendi oluşturma çerçevemi kullandığım tüm woocommerce uzantılarını oluşturuyorum ve bu çerçevedeki ilk adım, yalnızca gerekli eklenti aktifse işlevselliği gerçekleştirmektir: Bu durumda WooCommerce, Woocommerce ürün satıcılarına ve woocomere rezervasyonlarına ihtiyacımız var Sahip olup olmadığımızı bilelim: Sınıf WVBM {private $ textodain = “WooCommerce-Vendor-Lookings-Management”; Private $ reject_plugins = Array (‘WooCommerce’, ‘WooCommerce-Lookings’, ‘WooCommerce-Ürün-Kullanıcılar’); Function is_required_plugins () {$ Active_plugins = (Array) get_option (‘Active_plugins’, Array ()); if (is_multisite ()) {Active_plugins = array_merge ($ Active_plugins, get_site_option (‘Active_SiteWide_Plugins’, Array ())); } Foreach ($ this-> required_plugins olarak $ key => $ gerekli) {$ zorunlu = (! Is_numeric ($ tuş))? “{$ Key}/{$ gerekli} .php”: “{$ gerekli}/{$ gerekli} .php”; eğer (! in_array ($ zorunlu, $ Active_plugins) &&! Array_key_exists ($ zorunlu, $ Active_plugins)) tekrar yanlış; } doğru döndü; }
İşlev __Construct () {if (! $ This-> heat_required_plugins ()) dönüş; } Gördüğünüz gibi, diziye üç eklenti adını kaydederiz, işlevi_required_plugins daha sonra etkinleştirilen eklentilerin depolandığı tüm yerleri toplayın ve neyin gerekli olduğunu kontrol edin. Adı klasör/dosya adıyla depolanan etkin eklentiye dikkat edin – çoğu durumda her ikisi de aynıdır, ancak dosya adının farklı olduğu bir yer bulursanız, anahtar öğe olarak kaydedin => Değer: private $ coid_plugins = Array (‘wooocommerce’, ‘wooocommerce -bookings’ => ‘woo-rezervasyonlar’, ‘wooCommerce-üreticiler’); haV_required_plugins’deki kod bu tür durumları ele almaya hazırdır. Şimdi kendi URL /satıcılar-dövüşünde bir satıcı kontrol paneli olacak. Bunu yapmanın basit bir yolu var: Sadece bir sayfa ekleyin ve ardından kısa bir kod aracılığıyla gösterge pano kodunu tanıtın. Ancak, bunu yeni bir şekilde yapmak istiyoruz, bu da özel bir son noktası eklemek. Bunu yapmak için, sete yeni bir sorgu VAR kaydetmelisiniz (mevcut set ‘sayfalar’, ‘post’ vb. Gibi şeylerdir), yeni sorgu varlarını son nokta olarak kaydetmeli ve ardından kodu işlemelisiniz Birisi bitiş noktasını (URL) ziyaret ettiğinde işleme. WordPress’e yeni yeniden yazma kuralları eklemek, sistemi de silmeniz gerektiği anlamına gelir.
Son noktayı ve yeniden yazma kurallarını eklemenin en iyi yolu, eklenti aktivasyonunuzda bunu yapmaktır. register_activation_hook (__ dosya__, dizi ($ this, ‘rewrite_flush’));
işlev rewrite_flush () {flush_rewrite_rules (); } Böylece son noktanın sonunun varını kaydetmek için: add_filter (‘query_vars’, dizi ($ this, ‘add_query_vars’); işlev add_query_vars ($ vars) {$ vars [] = ‘satıcılar-dashboard’; $ Vars döndür; } Şimdi son noktamızı ekliyoruz: add_action (‘init’, dizi ($ this, ‘endpoint_keeper’));
endpoint_keeper () işlevi {add_rewrite_endpoint (‘satıcılar-dashboard’, ep_all); add_rewrite_rule (‘/satıcılar-dashboard /(.*)/ sayfa/([0-9]+)/?’, ‘index.php? satıcılar-dashboard = $ eşleşmeler [1] & paged = $ eşleşmeler [2], ‘tepe’); }
Şimdi bitiş noktamız için istekleri işlemek için (talep, verilen URL için içerik almak için sunucuya yapılan şeydir). Add_action (‘parse_request’, dizi ($ this, ‘parse_request’), 0); Parse_request işlevi ($ istek) {global $ wp; $ Key = ‘Dashboard-Vendor’; if (isset ($ _get [$ key])) {$ wp-> query_vars [$ key] = $ _get [$ tuş]; } else if (isset ($ wp-> query_vars [$ key])) {$ wp-> query_vars [$ key] = $ wp-> query_vars [$ key]; }
} Yalnızca son noktamıza hizmet edip etmediğimizi ve $ WP dizisine var sorguları oluşturup oluşturmadığımızı kontrol ediyoruz. Daha sonra, sayfamızda olup olmadığımızı kontrol etmek ve aşağıdakiler gibi özel içeriğimizi sunmak için var Kueri’yi kullanırız:
add_filter (‘template_include’, dizi ($ this, ‘get_template’));
Function get_template ($ template) {global $ wp; if (isset ($ wp-> query_vars [‘satıcılar-dashboard’]))) $ template = trailingsLashite (plugin_dir_path (__ dosya__)). “satıcılar-dashboard.php”; $ Şablon döndür; } Ana dosyamızda yaptığımız diğer tek şey, siparişleri onaylama eylemini işlemek için işlevi bağlamaktır-bunun için AJAX kullanabilirim, ancak php: add_action (‘wp’, dizi ($ this, ‘Process_confirm’ )); function process_confirm () {if ($ _Get [‘wvbm_ace’] == “onaylama”) {if (get_post_type ($ _ get [‘booking_id’])! Rezervasyon-confirm-non-cumhuriyet) {wc_add_notice (“Geçersiz istek rezervasyonu onaylanmadı”, “hata”); $ url = site_url (). “/Vendors-dashboard/”.get_query_var(‘vendors-dashboard’).”/”; Başlık (“konum:”. $ Url); } $ rezervasyon = yeni wc_booking ($ _ get [‘Booking_id’])); $ rezervasyon-> update_status (“onaylandı”); wc_add_notice (“rezervasyon”. $ _ get [‘Booking_id’]. “Onaylandı”, “başarı”); }}
Şimdi satıcı-dashboard.php şablonuna:
show_dashboard (); ?> Buradaki iki önemli bölüme dikkat edin: Global $ wvbm
Bu, ana eklenti sınıfını sakladığımız ve bunu getirmek, sınıfın en büyük işlevini kullanmamızı sağlar: $ wvbm-> show_dashboard ();

Function show_dashboard () {/* extract (Jortcode_atts (Array (‘Active_Tabs’ => ‘Rezervasyonlar’ // Comma Sejenat Aktif sekmeler listesi), $ atts)); */ $ satıcı = get_term_by (‘slug’, get_query_var (‘satıcılar-dashboard’), ‘wcpv_product_vendors’); eğer (! $ satıcı) {echo “satıcı bulunamıyor!”; dönüş; } $ user = get_current_user_id (); if (! current_user_can (‘yönetici’) &&! is_vendor_admin ($ satıcı-> term_id, $ kullanıcı)) {echo “Bu sayfayı görmek için izniniz yok”; dönüş; } $ cols = Array (‘sipariş kimliği’, ‘ana sipariş’, ‘tarih’, ‘başlangıç ​​zamanı’, ‘zaman sonu’, ‘konuk’, ‘fiyat’, ‘kullanıcı’, ‘geçerlilik tarihi’, ‘durum’ ,’Eylem’); $ sekme = dizi (‘sipariş’); $ Post_per_halam = 10; $ page = (get_query_var (‘sayfa’))? 1: get_query_var (‘sayfa’); $ sipariş = yeni wp_query (Array (‘post_type’ => ‘sipariş_wc’, ‘post_per_page’ => $ post_per_page, ‘meta_key’ => ‘_booking_vendor’, ‘meta_value’> $ vendor-> term_id, ‘post_status’ => post_status ‘=> ‘herhangi bir şey’, ‘paged’ => get_query_var (‘sayfa’)))); $ data = array (); foreach ($ Rezervasyonlar-> $ Key => $ rezervasyon olarak yayınlar) {$ _booking = yeni wc_booking ($ rezervasyon-> id); $ user = get_post_meta ($ rezervasyon-> id, ‘_ booking_customer_id’, true); $ action = array ();
if ($ rezervasyon-> post_status! = “iptal edildi”) array_push ($ action, “iptal edildi”); if ($ rezervasyon-> post_status == “bekleme-confirmation”) array_push ($ aksiyon, “onay”); $ action_string = array (); Foreach ($ Action olarak $ eylem) {$ action_url = add_query_arg (Array (‘wvbm_raction’ => $ eylem, ‘Booking_id’ => $ rezervasyon-> id, ‘güvenlik’ => wp_create_nonce ( , Site_url (). “/Vendor-dashboard/ante.get_query_var(‘vendor-dashboard’u $ action_strings [] = ($ action == “iptal edildi”)? “Get_cancel_url ().” “> İptal”: “” .ucirst ($ action). “”;} $ Veri [$ rezervasyon-> id] = dizi (‘id sipariş’ => $ rezervasyon-> id, ‘sipariş Ebeveyn ‘=> $ rezervasyon-> post_parent,’ tarih ‘=> tarih (“ymd”, strtotime (get_post_meta ($ rezervasyon-> id,’ _ booking_start ‘, true)),’ başlangıç ​​saati ‘=> tarih (“h : o “, strtotime (get_post_meta ($ rezervasyon-> id, ‘_ booking_start’, true))), ‘zaman bitiyor’ => tarih (” h: o “, strtotime (get_post_meta ($ rezervasyon-> id, ‘_ Booking_end ‘, true)),’# konuk ‘=> count (get_post_meta ($ rezervasyon-> id,’ _ booking_persons ‘,’ fiyat ‘=> get_post_meta ($ rezervasyon-> id,’ _ booking_cost ‘, true), ‘kullanıcı’ => (get_user_meta ($ user, ‘Billing_first_name’, true)! == “”)? get_user_meta ($ user, ‘Billing_first_name’, true). “$ kullanıcı-> user_login, ‘geçerlilik tarihi’ => $ rezervasyon-> post_date, ‘status’ => $ rezervasyon-> post_status, ‘eylem’ => improde (“|”, $ action_strings));} wc_print_notices (); “>
$ sekmesi olarak $ sekme) {$ class = ($ key == 0)? “aktif” : “”; ?>
<div class =" giriş-içerik paneli "id =" sekme- “Style =” Ekran: blok; “> <tablo class =" <? Php echo $ sekmesi;
$ col olarak $ Cols) {?>
echo paginate_links (dizi (‘baz’ => str_replace ($ big, ‘%#%’, esc_url (get_pagenum_link ($ büyük)), ‘format’ => ‘? Paged =%#%’, ‘cari’ => maks. (1, get_query_var (‘sayfa’)), ‘toplam’ => $ rezervasyonlar-> max_num_pages)); html tablosunda, siparişi iptal etmek ve onaylamak için bir bağlantı ile tamamlayın. Basit…

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir