En el artículo de hoy, le mostraré cómo expandir el complemento de suscripción de WooCommerce para crear estados personalizados. Crearé un nuevo estado de suscripción de WooCommerce llamado `Like On Hold, que funciona de manera similar como una retención. ¡Vamos a empezar! #1 El primer paso para registrar un nuevo estado de suscripción utilizando la acción wooCommerce_subscripts_regisred_statuses, como se muestra a continuación: add_filter (‘wooCommerce_subscripts_regisred_states’, ‘registre_post_status’, 100, 1);
La función registra_new_post_status ($ registrada_statuses) {
$ registrado_statuses [‘wc-like-on-hold’] = _nx_noop (‘me gusta en Hold (%s) ‘, ‘me gusta en Hold (%s) ‘,’ Etiqueta de estado de publicación, incluido el número de publicaciones ‘,’ Custom-wcs-status-texts ‘);
Devuelve $ registrado_statuses;
}
#2 Para que este estado sea visible en el menú desplegable en la página de suscripción, debe agregarlo a la lista de estados de suscripción utilizando el filtro “WCS_SUBSCTION_STASS”, como se muestra a continuación:
add_filter (‘wcs_subscription_statuses’, ‘add_new_subscription_statuses’, 100, 1);
La función add_new_subscription_statuses ($ suscription_states) {
$ Suscription_statuses [‘wc-like-on-hold’] = _x (‘me gusta en Hold’, ‘status’, ‘Custom-wcs-status-texts’);
Devuelve $ suscription_statuses;
} Para la visibilidad del nuevo estado en el menú de caída, debe especificar si la suscripción con un determinado estado se puede actualizar al nuevo estado o no. Esto se puede hacer utilizando “wooCommerce_subscription_status_updated” .add_filter (‘wooCommerce_can_subescription_be_updated_to’, ‘EXNDS_CAN_BE_UPDATADO’, 100, 3);
Function_can_be_updated ($ can_be_updated, $ new_status, $ suscripción) {
if ($ new_status == ‘me gusta-on-hold’) {
If ($ suscripción -> paymet_method_suports (‘suscription_suspension’) && $ subscription -> has_status (matrix (‘activo’, ‘pendiente,’ on -hold ‘)) {
$ can_fi_actualized = true;
} de lo contrario {
$ can_fi_actualized = false;
}
}
return $ can_fi_actualized;
}
#3 Ahora, para realizar una acción cuando el administrador selecciona `Me gusta en Hold` en el menú desplegable y actualiza la suscripción, debemos extender la función update_status utilizando la acción ‘wooCommerce_substus_updated’. Aquí copiaremos y pegaremos el mismo código que el estado de espera.
add_action (‘wooCommerce_subscription_status_updated’, ‘Exnds_update_status’, 100, 3);
La función se extiende
if ($ new_status == ‘me gusta-on-hold’) {
$ Suscripción -> update_suspension_count ($ suscripción -> suspensión_count + 1);
Wcs_maybe_make_user_inactive ($ suscripción -> customer_user);
}
}
Aquí termina el código básico para configurar un nuevo estado llamado `como en espera en la suscripción de WooCommerce. Ahora, lidiemos con otras cosas, como mostrar una determinada condición en el menú desplegable de una suscripción cuyo estado actual es “esperar” y agregar el nuevo estado al bloque en la página de la lista y administrarlo .add_filter ( ‘wooCommerce_can_subscription_be_upeded_to_active’, ‘enable_active_in_new_states’, 100, 2);
add_filter (‘wooCommerce_can_subscription_be_upated_to_on-hold’, ‘enable_on_hold_in_new_statuses’, 100, 2);
Enable_active_in_new_statuses function ($ can_be_updated, $ suscripción) {
If ($ suscription-> paymet_method_suports (‘suscription_reaactive’) && $ suscription-> has_status (matrix (‘on-hold’, ‘like-on-hold) {
$ can_fi_actualized = true;
} Elseif ($ suscripción -> has_status (‘espera’)) {
$ can_fi_actualized = true;
} de lo contrario {
$ can_fi_actualized = false;
}
return $ can_fi_actualized;
}
Enable_on_hold_in_new_statuses function ($ can_be_updated, $ suscripción) {
If ($ suscripción -> paymet_method_suports (‘suscription_suspension’) && $ suscripción -> has_status (matrix (‘activo’, ‘pendiente’, ‘me gusta -on -hold’)) {
$ can_fi_actualized = true;
} de lo contrario {
$ can_fi_actualized = false;
}
return $ can_fi_actualized;
}
#4 Agregar el nuevo estado al menú desplegable de acciones de bloque en la lista de la lista de suscripción utilizando el filtro “wooCommerce_subbulk_actions”. add_filter (‘wooCommerce_subbulk_actions’, ‘add_new_status_bulk_actions’, 100, 1); add_new_status_bulk_actions ($ bulk_actions) {
$ bulk_actions [‘me gusta-on-hold’] = _x (‘marc like on hold’, ‘una acción sobre una suscripción,’ Custom-WCS-Status-texts ‘);
Devuelve $ Bulk_actions;
}
#5 El siguiente código trata de administrar las acciones de bloque. El estilo es similar a lo que hace WooCommerce. Las extensiones tendrán que definir su propia lógica copiando el concepto detrás del método escrito en el complemento de suscripción de WooCommerce. La función está conectada a la acción “Load-edit.php” del núcleo de WordPress.
add_action (‘load-eit.php’, ‘pars_bulk_actions’);
Parse_bulk_acciones function () {
// Queremos lidiar solo con Shop_Subscriptions. Si algún otro CPT tiene una acción “activa”.
if (! isset ($ _request [‘post_tip’) || ‘suscription_magazin’! == $ _request [‘post_tip’]
devolver;
}
$ Action = ”;
if (isset ($ _request [‘Action’]) && – 1! = $ _Request [‘Action’]) {
$ Action = $ _cerere [‘Action’];
} Elseif (isset ($ _request [‘action2’]) && – 1! = $ _Request [‘Action2’]) {
$ Action = $ _cerere [‘Action2’];
}
Switch ($ Action) {
Caso “activo”:
Caso “Esperando”:
Caso “cancelado”:
Caso “Me gusta:
$ new_status = $ acción;
descanso ;
defecto:
devolver;
}
$ report_action = ‘Marked_’. $ new_status; $ cambiado = 0;
$ Suscription_ids = array_map (‘ausint’, (array) $ _request [‘post’]);
$ SendBack_args = matrix (
‘post_type’ => ‘suscription_magazin’,
$ report_action => verdadero,
‘IDS’ => Join (‘,’, $ suscription_ids),
‘Error_count’ => 0,
);
Foreach ($ suscription_ids como $ suscription_id) {
$ suscripción = Toys_get_subscription ($ suscription_id);
$ orden_note = _x (‘El estado de la suscripción se cambió modificando en el bloque:’, utilizado en la nota de comando. La razón por la cual se cambió el estado ‘,’ WooCommerce-subscripts ‘);
probar {
if (‘cancelado’ == $ acción) {
$ suscripción -> cancelation_command ($ orden_note);
} de lo contrario {
$ Suscripción -> update_status ($ new_status, $ orden_not, true);
}
// Tira de los ganchos de acción
Switch ($ Action) {
Caso “activo”:
Caso “Esperando”:
Caso “cancelado”:
Caso “Me gusta:
Caso “basura”:
do_action (‘wooCommerce_admin_changed_subscripction_to_’. $ Action, $ suscription_id);
descanso ;
}
$ cambiado ++;
} Catch (excepción $ e) {
$ SendBack_args [‘error’] = urlecode ($ e -> getMessage ());
$ SendBack_args [‘Number_eroare’] ++;
}
}
$ SendBack_args [‘cambiado’] = $ cambiado;
$ SendBack = ADD_QUERY_ARG ($ SendBack_args, wp_get_referrer ()? wp_get_referrer (): ”);
wp_safe_redirect (esc_url_raw ($ envío));
producción ();
}
Tratamos la mayoría de las características principales al final de la suscripción de WoCommerce. Ahora, ¿qué sucede si queremos el mismo estado en el comando wooCommerce? Y si el estado del pedido es “actualizar al nuevo estado”, ¿cómo se marchza toda la suscripción con el nuevo estado (si es posible)? Entonces así es cómo debemos proceder. 1) Registre un nuevo estado en WooCommerce. Aquí registraremos la misma condición que la suscripción de WooCommerce. add_action (‘init’, ‘registro_like_on_hold_order_statuses’);
Registro_like_on_hold_order_statuses () función {
Registro_post_status (‘wc-like-on-hold’, matrix (
‘Label’ => _x (‘me gusta On Hold’, ‘Order’ ‘,’ Custom-WCS-State-texts ‘),
‘Public’ => Verdadero,

‘Exclude_from_search’ => false,
‘Show_in_admin_all_list’ => verdadero,
‘Show_in_admin_status_list’ => verdadero,
‘Label_count’ => _n_noop (‘me gusta en Hold (%s) ‘, ‘me gusta en Hold (%s) ‘ , “WooCommerce”),
));
}
2) Agregue este nuevo estado a la lista de estados de comando utilizando el filtro “wc_order_stastuses” add_filter (‘wc_order_statuses’, ‘like_on_hold_wc_order_stuses’, 100, 1);
Como_on_hold_wc_rder_sder_stustus function ($ orden_statuses) {
$ orden_statuses [‘wc-like-on-hold’] = _x (‘me gusta en Hold’, ‘Estado del comando’, ‘Custom-WCS-State-texts’);
Devuelve $ status_command;
}
3) Una vez que se cambia el estado del pedido al nuevo estado, queremos que el estado de toda la suscripción dentro del orden se cambie al nuevo estado. Podemos hacer esto usando “woCommerce_order_status_”. La acción $ new_status como se muestra a continuación.Add_Action (‘wooCommerce_order_status_like-on-hold’, array ($ this, ‘put_subscription_on_like_hold_order_order’), 100);
Put_subscription function_on_like_on_hold_for_order ($ orden) {
$ Suscripciones = wcs_get_subscriptions_for_order ($ orden, array (‘orden_type’ => ‘parent’));
If (! Vacía ($ suscripciones)) {
Foreach ($ suscripciones CA $ suscripción) {
probar {
If (! $ Suscripción -> has_status (wcs_get_subscriftion_ended_statuses ())) {
$ Suscripción-> update_status (‘me gusta-on-hold’);
}
} Catch (excepción $ e) {
// traductores: $ 1: número de comando, $ 2: mensaje de error
$ Suscripción-> add_order_not (sprintf (__ (‘no se pudo actualizar el estado de la suscripción después de ordenar # %$ 1 se colocó en Like-On-Hold: %$ 2,’ WooCommerce-subscripts ‘), IS_Object ($ orden) $ comando $ -> get_order_numbber (): $ comando, $ e -> getMessage ()));
}
}
// se agregó una nueva acción, tal como se agregó el complemento de suscripción para esperar
do_action (‘suscripciones_put_to_like_on_hold_for_order’, $ orden);
}
}
La implementación de este código con una explicación más detallada de cada función se puede encontrar en nuestro almacén de gitscriptus git personalizado personalizado
¡Eso es todo!. Si tiene alguna pregunta, escriba un comentario y le responderé. Hasta entonces, feliz codificación.
Cómo crear un estado personalizado para el complemento de suscripción de WooCommerce
Tags Cómo crear un estado personalizado para el complemento de suscripción de WooCommerce
homefinance blog