WooCommerce Ürün Satıcıları – Ön Uç Yönetim Panosu Ekle


Bu makalenin ana amaçları için, WooCommerce Ürün Satıcıları eklentisi aracılığıyla WooCommerce Bookings eklentisi kullanılarak satılan rezervasyonları yönetmek için nasıl bir gösterge tablosu eklediğimi göstereceğim, çünkü kodu yakın zamanda yaptım ve hepsi bu kadar güzel ve temiz paketlenmiş ve hepsi test edilmiş gibi. Ancak, diğer uzantılardan gelen ürünleri ve aynı yerden nakliye vb. diğer seçenekleri yönetmek için kolayca kullanılabilir.

Bunun kodunu bir Gist'e ekledim https://Gist.github.com/LiamBailey/05f083a0c8069301949c – bu yüzden lütfen oraya bakın.

Şimdi – Tüm WooCommerce uzantılarımı kendi oluşturduğum bir çerçeve kullanarak oluşturuyorum ve bu çerçevedeki ilk adım, işlevselliği yalnızca ihtiyaç duyduğu eklentiler etkinse çalıştırmaktır:

Bu durumda WooCommerce, WooCommerce Ürün Satıcıları ve WooCommere Bookings'e ihtiyacımız var, bu yüzden onlara sahip olup olmadığımızı öğrenelim:


class WVBM {

private $textdomain = “woocommerce-vendors-bookings-management”;
private $required_plugins = array('woocommerce', 'woocommerce-rezervasyonları', 'woocommerce-ürün-satıcıları');

function have_required_plugins() {
$active_plugins = (dizi) get_option('active_plugins', dizi());
if (is_multisite()) {
$active_plugins = array_merge($active_plugins, get_site_option('active_sitewide_plugins', array()));
}
foreach ($this->required_plugins as $key => $gerekli) {
$gerekli = (!is_numeric($key)) ? “{$anahtar}/{$gerekli}.php” : “{$gerekli}/{$gerekli}.php”;
if (!in_array($gerekli, $active_plugins) && !array_key_exists($gerekli, $active_plugins))
yanlış döndür;
}
true döndür;
}


function __construct() {
if (!$this->have_required_plugins())
return;
}

Gördüğünüz gibi, üç eklenti adını bir dizide saklıyoruz, have_required_plugins işlevi daha sonra etkinleştirilmiş eklentilerin depolandığı tüm yerleri toplar ve gerekli olanları kontrol eder. Etkin eklentilerin klasör adına/dosya adına göre saklandığına dikkat edin – çoğu durumda ikisi de aynıdır, ancak dosya adının farklı olduğu bir eklentiyle karşılaşırsanız, onu aşağıdaki gibi bir key=>value öğesi olarak saklayın:


private $required_plugins = array('woocommerce', 'woocommerce-bookings' => 'woo-bookings', 'woocommerce-product-vendors');

have_required_plugins içindeki kod, bu gibi durumları işlemeye hazırdır.

Şimdi – kendi url'sinde – /vendors-dashboard'da satıcı panomuza sahip olacağız. Bunu yapmanın basit bir yolu var: sadece bir sayfa ekleyin ve ardından pano kodunu bir kısa kod aracılığıyla girin. Ancak bunu, özel bir uç nokta ekleyen yeni, parlak, havalı bir şekilde yapmak istiyoruz.

Bunu yapmak için yeni sorgu var'ı kümeye kaydetmeniz gerekir (mevcut küme 'sayfa', 'gönderme' vb. birisi uç noktayı (url) ziyaret ettiğinde kod. WordPress'e yeni yeniden yazma kuralları eklemek, sistemi temizlemeniz gerektiği anlamına da gelir.

Uç noktayı eklemenin ve kuralları yeniden yazmanın en iyi yolu, eklentinizi etkinleştirirken yapmaktır.


register_activation_hook(__FILE__, array($this, 'rewrite_flush'));


function rewrite_flush() {
flush_rewrite_rules();
}

Bu nedenle, uç noktanın sorgusunu kaydetmek için var:


add_filter('query_vars', array($this, 'add_query_vars'));


function add_query_vars($vars) {
$vars[] = 'vendors-dashboard';
return $vars;
}

Şimdi init'te uç noktamızı ekliyoruz:


add_action('init',array($this,'endpoint_keeper'));


function endpoint_keeper() {
add_rewrite_endpoint('vendors-dashboard', EP_ALL);
add_rewrite_rule('/vendors-dashboard/(.*)/page/([0-9]+)/?','index.php?vendors-dashboard=$matches[1]&paged=$matches[2]','top');
}

Şimdi uç noktamız için istekleri işlemek için (belirli bir url için içeriği almak için sunucuya yapılan istektir).


add_action('parse_request', array($this, 'parse_request'), 0);

function parse_request($request) {
küresel $wp;
$key = 'satıcılar-gösterge tablosu';
if ( isset( $_GET[ $anahtar ] ) ) {
$wp->query_vars[ $anahtar ] = $_GET[ $anahtar ];
}
else if ( isset( $wp->query_vars[ $key ] ) ) {
$wp->query_vars[ $key ] = $wp->query_vars[ $anahtar ];
}


}

Sadece uç noktamıza hizmet edip etmediğimizi ve var sorgusunu $wp dizisine oluşturup oluşturmadığımızı kontrol ederiz. Daha sonra, sayfamızda olup olmadığımızı kontrol etmek ve özel içeriğimizi şu şekilde sunmak için var sorgusunu kullanırız:


add_filter('template_include',array($this,'get_template'));


function get_template($template) {
global $wp;
if (isset($wp->query_vars['vendors-dashboard']))
$template = trailingslashit(plugin_dir_path(__FILE__)) . "vendors-dashboard.php";
return $template;
}

Ana dosyamızda yaptığımız diğer tek şey, rezervasyonları onaylama eylemini işlemek için bir fonksiyon kancasıdır – bunun için ajax kullanabilirdim ama php kullanmayı seçtim:


add_action('wp',array($this,'process_confirm'));


function process_confirm() {
if ($_GET['wvbm_action'] == "confirm") {
if (get_post_type($_GET['booking_id']) != "wc_booking" || !wp_verify_nonce($_REQUEST['security'],'vendor-booking-confirm-noncerator')) {
wc_add_notice("Invalid request - booking not confirmed","error");
$url = site_url() . "/vendors-dashboard/".get_query_var('vendors-dashboard')."/";
header("Location: ".$url);
}
$booking = new WC_Booking($_GET['booking_id']);
$booking->update_status("confirmed");
wc_add_notice("Booking ".$_GET['booking_id']." confirmed","success");
}
}

Şimdi satıcılar-dashboard.php şablonuna geçin:


<?php
get_header();
global $WVBM;
?><div class="woocommerce container">
<div class="row product content-area">


<main class="site-main col-xl-12" role="main">
<?php $WVBM->show_dashboard(); ?>
</main>
</div>
</div>
<?php get_footer(); ?>

Burada iki önemli kısma dikkat edin:

 global $WVBM
  • bu, ana eklenti sınıfını içine kaydettiğimiz globaldir ve onu getirmek, o sınıftan en büyük işlevi kullanmamıza izin verir:

$WVBM->show_dashboard();


function show_dashboard() {
/* extract(shortcode_atts(array(
'active_tabs' => 'bookings'//comma seperated list of active tabs
),$atts)); */
$vendor = get_term_by('slug',get_query_var('vendors-dashboard'),'wcpv_product_vendors');
if (!$vendor) {
echo "

Satıcı bulunamadı!

";
return;
}
$user = get_current_user_id();
if (!current_user_can('administrator') && !is_vendor_admin($vendor->term_id,$user)) {
echo "

Bu sayfayı görüntüleme izniniz yok

";
return;
}

$cols = array('Rezervasyon Kimliği', 'Ebeveyn Siparişi', 'Tarih', 'Başlangıç ​​Zamanı', 'Bitiş Zamanı', 'Konuk Sayısı', 'Fiyat', 'Kullanıcı', 'Uygulama Tarihi', 'Durum ','Hareketler');
$tabs = dizi('rezervasyonlar');
$posts_per_page = 10;
$sayfa = (get_query_var('paged')) ? 1: get_query_var('sayfalanmış');
$rezervasyonlar = yeni WP_Query(dizi(
'post_type' => 'wc_booking',
'posts_per_page' => $posts_per_page,
'meta_key' => '_booking_vendor',
'meta_value' => $vendor->term_id,
'post_status' => 'herhangi biri',
'paged' => get_query_var('paged')
));
$veri = dizi();
foreach($bookings->$key => $booking olarak gönderiler) {
$_booking = new WC_Booking($booking->ID);
$user = get_post_meta($booking->ID,'_booking_customer_id',true);
$eylemler = dizi();

if ($booking->post_status != “iptal edildi”)
array_push($eylemler,"iptal");
if ($booking->post_status == “onay bekleniyor”)
array_push($eylemler,"onayla");
$action_strings = dizi();
foreach($actions as $action) {
$action_url = add_query_arg(array('wvbm_action'=>$action,'booking_id'=>$booking->ID,'security'=>wp_create_nonce('vendor-booking-confirm-noncerator')),site_url().” /vendors-dashboard/”.get_query_var('vendors-dashboard').”/”);
$action_strings[] = ($action == “iptal”) ? “get_cancel_url().””>İptal” : ““.ucfirst($eylem).”“;
}
$veri[$rezervasyon->ID] = dizi(
'Rezervasyon Kimliği' => $rezervasyon->Kimlik,
'Ebeveyn Siparişi' => $booking->post_parent,
'Tarih' => tarih(“Ymd”,strtotime(get_post_meta($booking->ID,'_booking_start',true))),
'Başlangıç ​​Zamanı' => tarih(“s:ia”,strtotime(get_post_meta($booking->ID,'_booking_start',true))),
'Bitiş Zamanı' => tarih(“h:ia”,strtotime(get_post_meta($booking->ID,'_booking_end',true))),
'Misafir Sayısı' => count(get_post_meta($booking->ID,'_booking_persons',true)),
'Fiyat' => get_post_meta($booking->ID,'_booking_cost',true),
'Kullanıcı' => (get_user_meta($user,'billing_first_name',true) !== “”) ? get_user_meta($user,'billing_first_name',true) . ” ”. get_user_meta($user,'billing_last_name',true): $user->user_login,
'Uygulama Tarihi' => $rezervasyon->post_date,
'Durum' => $rezervasyon->post_status,
'Eylemler' => implode(” | “,$action_strings)
);
}
wc_print_notices();
?><div class=”woocommerce-tabs”>
<ul class=”sekmeler”>
<?php
foreach ($tabs as $key => $tab) {
$sınıf = ($anahtar == 0) ? "aktif" : "";
?><li class=”dashboard_tab $tab) {
?><div class=”panel giriş içeriği” id=”tab-<?php echo $tab; ?>” style=”ekran: blok;”>
<tablo sınıfı=”<?php echo $tab; ?>-tablo”>
<kafa>
<tr>
<?php foreach ($kols as $anahtar => $kol) { ?>
<th><?php echo $col; ?></th><?php } ?>
</tr>
</thead>
<vücut>
<?php foreach ($veri as $booking_id => $rezervasyon) { ?>
<tr><?php foreach($sütun as $anahtar => $sütun) { ?>
<td><?php echo $rezervasyon[$col]; ?></td>
<?php } ?>
</tr><?php } ?>

</tbody>
</tablo>
</div><?php }
$büyük = 999999999; // olası olmayan bir tamsayıya ihtiyaç var


echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $bookings->max_num_pages
) );?>
</div><?php
}

Bu oldukça basit bir şey, o satıcının ürünleri için rezervasyonları alıyor ve bunları rezervasyonun iptali ve onaylanması için bağlantılar içeren bir html tablosunda gösteriyor. Basit…

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

Divi's Theme Builder ile Özel Global Başlık Nasıl Oluşturulur

Artık Tema Oluşturucu burada olduğuna göre, web sitenizi A'dan Z'ye kurmanıza yardımcı olacak yeni eğitimlere dalmak için sabırsızlanıyoruz. Buna Divi'nin yerleşik seçeneğini kullanarak özel başlıklar oluşturma da dahildir. Bu eğitimde Divi's Theme Builder'ı kullanarak global bir başlık oluşturmaya odaklanacağız. Bu sayfaya veya gönderiye farklı bir başlık atamadıysanız, web sitenizin her yerinde genel bir başlık görünecektir.

Bir Cevap Yazın

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