close

WooCommerce vendedores del producto - Añadir frontend panel de administración

A los efectos de este artículo en el principal iré mostrando cómo he añadido un panel de control para gestionar las reservas vendido utilizando el plugin WooCommerce reservas a través del Producto WooCommerce fabricantes de plugins, porque eso es lo que hice el código recientemente y por lo que es todo empaquetados agradable y limpio y todas las bandas similares. Sin embargo, fácilmente se podría utilizar para gestionar los productos de otras extensiones, y también otras opciones, como el envío, etc desde el mismo lugar.

He añadido el código para esto a un Gist - así que por favor revise las instrucciones.

Ahora - construyo todas mis extensiones WooCommerce utilizando un marco de mi propia creación, y el primer paso en este marco es sólo para ejecutar la funcionalidad si los plugins necesarios están activos:

En este caso necesitamos WooCommerce, WooCommerce proveedores de productos y WooCommere reservas así que vamos a averiguar si los tenemos:

WVBM clase {    $ Textdomain privada = "WooCommerce-vendedores-reservas-gestión";    $ required_plugins privadas = array ( 'WooCommerce', 'WooCommerce-reservas', 'WooCommerce a productos de los vendedores);    have_required_plugins function () {        $ Active_plugins = (array) get_option (array '', active_plugins ());        si (is_multisite ()) {            $ Active_plugins = array_merge (active_plugins $, get_site_option ( 'active_sitewide_plugins', array ()));        }        foreach ($ this-> required_plugins como $ clave => $ requerido) {            $ Requerido = (! Is_numeric ($ key))? "{$ Key} / {} $ requerido .php": "{$ requerida} / {} $ requerido .php";            if (! in_array ($ requeridas, active_plugins $) &&! array_key_exists ($ requiere, $ active_plugins))                falso retorno;        }        return true;    }    __construct función () {        if (! $ this-> have_required_plugins ())            regreso;    }

Así como se puede ver que almacenamos los tres nombres de plugin a una matriz, la función have_required_plugins a continuación recoge todos los lugares donde se almacenan los plugins activados, y los controles de los requeridos. Nota plugins activos son almacenados por su nombre de carpeta / nombre de archivo - en la mayoría de los casos ambos son lo mismo, pero si te encuentras con uno, donde el nombre del archivo es diferente a continuación, sólo almacena como un elemento clave => valor, como:

$ required_plugins privadas = array ( 'WooCommerce', 'WooCommerce-reservas' => 'Woo-reservas', 'WooCommerce a productos de los vendedores);

El código en have_required_plugins está listo para manejar estos casos.

Ahora - vamos a tener nuestra vendedores salpicadero en su propia url - / vendedores-salpicadero. Hay una manera simple de hacer esto: sólo tiene que añadir una página y luego introducir el código a través de un código corto salpicadero. Sin embargo, queremos hacerlo de la nueva manera fresca y brillante, que es la adición de un punto final personalizado.

Con el fin de hacer esto hay que registrarse la nueva consulta var en el conjunto (conjunto existente es cosas como "página", "post", etc), lo que tienes que registrar esa nueva consulta var como criterio de valoración, y luego manejar el procesamiento de código cuando alguien visita el punto final (url). La adición de nuevas reglas de reescritura a WordPress también significa que necesita para hacer salir del sistema.

La mejor manera que he encontrado para añadir el punto final y volver a escribir las reglas es hacerlo en la activación de su plugin.

register_activation_hook (__ FILE__, array ($ this, 'rewrite_flush'));rewrite_flush función () {                flush_rewrite_rules ();    }

Así que para el registro del punto final var query:

add_filter ( 'query_vars', array ($ add_query_vars esto ''));add_query_vars una función ($ {VAR)        $ Vars [] = 'vendedores-tablero ";        devolver $ vars;    }

Ahora en init añadimos nuestra criterio de valoración:

add_action ( 'init', array ($ this, 'endpoint_keeper'));endpoint_keeper función () {         add_rewrite_endpoint ( 'vendedores-tablero ", EP_ALL);         add_rewrite_rule('/vendors-dashboard/(.*)/page/([0-9]+)\/?','index.php?vendors-dashboard=$matches[1]&paged=$matches[2]','top');    }

Ahora para manejar las peticiones de nuestro punto final (una solicitud es lo que se hizo con el servidor para recibir el contenido de una determinada URL).

add_action ( 'parse_request', array ($ this, 'parse_request'), 0);parse_request función ($ request) {        $ Wp mundial;        'vendedores-salpicadero' = $ clave;    if (isset ($ _GET [$ key])) {            $ WP> query_vars [$ key] = $ _GET [$ key];    }    else if (isset ($ wp-> query_vars [$ key])) {            $ WP> query_vars [$ key] = $ wp-> query_vars [$ key];    }    }

Simplemente chequeamos si estamos sirviendo a nuestro punto final, y si queremos construir la consulta var en el array $ wp. A continuación, utilizamos esa consulta var para comprobar si estamos en nuestra página y servir a nuestro contenido personalizado, así:

add_filter ( 'template_include', array ($ this, 'get_template')); get_template función ($ plantilla) {        $ Wp mundial;        if (isset ($ wp-> query_vars [ 'vendedores-salpicadero']))            $ Template = trailingslashit (plugin_dir_path (__ FILE__)). "Los vendedores-dashboard.php";        devolver $ plantilla;    }

La única otra cosa que hacemos en nuestro archivo principal es conectar una función para procesar la acción de confirmación de las reservas - Podría haber usado ajax para esto, pero optó por usar PHP:

add_action ( 'wp', array ($ this, 'process_confirm'));process_confirm función () {        if ($ _GET [ 'wvbm_action'] == "confirmar") {            si (get_post_type ($ _ GET [ 'booking_id'])! = "wc_booking" ||! wp_verify_nonce ($ _ REQUEST [ "seguridad"], «proveedor-reserva-confirm-noncerator ')) {                wc_add_notice ( "solicitud no es válida - reserva no confirmado", "error");                $ Url = site_url (). "/vendors-dashboard/".get_query_var('vendors-dashboard')."/";                encabezado (. "Lugar:" $ url);            }            $ = New reserva WC_Booking ($ _ GET [ 'booking_id']);            $ Reserva-> update_status ( "confirmado");            wc_add_notice ( "reserva" $ _ GET [ 'booking_id'] "confirmado", "éxito"..);        }    }

Ahora la plantilla de vendedores-dashboard.php:

<? Phpget_header ();$ WVBM mundial;?> <Div id = "contenido" class = "contenedor WooCommerce">        <Div class = "producto contenido-área de filas">            <Principal id = clase "principal" = función "sitio principal col-xl-12" = "principal"><? Php $ WVBM-> show_dashboard (); ?></ Principal>
<?php get_footer(); ?>

Note two key parts here:

global $WVBM
  • this is the global we have stored the main plugin class into, and bringing it in allows us to use the biggest function from that class:
$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'),'shop_vendor');        if (!$vendor) {            echo "

Vendor not found!

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

You do not have permission to view this page

"; return; } $cols = array('Booking ID', 'Parent Order', 'Date', 'Start Time', 'End Time', '# of Guests', 'Price', 'User', 'Date Applied', 'Status','Actions'); $tabs = array('bookings'); $posts_per_page = 10; $page = (get_query_var('paged')) ? 1 : get_query_var('paged'); $bookings = new WP_Query(array( 'post_type' => 'wc_booking', 'posts_per_page' => $posts_per_page, 'meta_key' => '_booking_vendor', 'meta_value' => $vendor->term_id, 'post_status' => 'any', 'paged' => get_query_var('paged') )); $data = array(); foreach($bookings->posts as $key => $booking) { $_booking = new WC_Booking($booking->ID); $user = get_post_meta($booking->ID,'_booking_customer_id',true); $actions = array(); if ($booking->post_status != "cancelled") array_push($actions,"cancel"); if ($booking->post_status == "pending-confirmation") array_push($actions,"confirm"); $action_strings = array(); 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 == "cancel") ? "" : ""; } $data[$booking->ID] = array( 'Booking ID' => $booking->ID, 'Parent Order' => $booking->post_parent, 'Date' => date("Y-m-d",strtotime(get_post_meta($booking->ID,'_booking_start',true))), 'Start Time' => date("h:ia",strtotime(get_post_meta($booking->ID,'_booking_start',true))), 'End Time' => date("h:ia",strtotime(get_post_meta($booking->ID,'_booking_end',true))), '# of Guests' => count(get_post_meta($booking->ID,'_booking_persons',true)), 'Price' => get_post_meta($booking->ID,'_booking_cost',true), 'User' => (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, 'Date Applied' => $booking->post_date, 'Status' => $booking->post_status, 'Actions' => implode(" | ",$action_strings) ); } wc_print_notices(); ?><div class="woocommerce-tabs"> <ul class="tabs"> <?php foreach ($tabs as $key => $tab) { $class = ($key == 0) ? "active" : ""; ?><li class="dashboard_tab $tab) { ?><div class="panel entry-content" id="tab-<?php echo $tab; ?>" style="display: block;"> <table class="<?php echo $tab; ?>-table"> <thead> <tr> <?php foreach ($cols as $key => $col) { ?> <th><?php echo $col; ?></th><?php } ?> </tr> </thead> <tbody> <?php foreach ($data as $booking_id => $booking) { ?> <tr><?php foreach($cols as $key => $col) { ?> <td><?php echo $booking[$col]; ?></td> <?php } ?> </tr><?php } ?> </tbody> </table> <?php } $big = 999999999; // need an unlikely integerecho 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) );?> <?php }

That is pretty straightforward stuff, it pulls up the bookings for that vendor’s products and displays them in a html table complete with links for cancelling and confirming the booking. Simples…

Spread the love
  •  
  •  
  •  
  •  

Previous Post     Next Post


TAGS


CATEGORIES

.