Julius'Lab

PHP

(Formidable) Limitar mes de un datepicker al mes en curso

Para limitar el mes de un datepicker en Formidable, usar este código en Code Snippets:

add_action('frm_date_field_js', 'limit_date_field_to_current_month');
function limit_date_field_to_current_month($field_id){
  if($field_id == 'field_FIELDKEY'){ // change FIELDKEY to the key of the date field
    $first_day_of_month = date('Y-m-01');
    $last_day_of_month = date('Y-m-t');
    $first_day_js = date('n-j-Y', strtotime($first_day_of_month));
    $last_day_js = date('n-j-Y', strtotime($last_day_of_month));
    
    echo "
      ,minDate: new Date('{$first_day_js}')
      ,maxDate: new Date('{$last_day_js}')
      ,dateFormat: 'dd/mm/yy'
      ,showMonthAfterYear: false
      ,monthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
      ,monthNamesShort: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
    ";
  }
}

Este código fue escrito por ChatGPT (https://chatgpt.com/c/983f82d5-fc89-466d-95ad-790f116960ab) basado en el código dado por Formidable en https://formidableforms.com/knowledgebase/frm_date_field_js/#kb-custom-dynamic-date-range

Curiosamente, en monthNamesShort estaban los nombres de tres caracteres de los meses (‘ene’,’feb’,’mar’, etc) pero se los tuve que cambiar ya que sólo toma el nombre en ese array, y ChatGPT no lo solucionó.

NOTA: IMPORTANTE que la línea ,dateFormat:’dd/mm/yy’ tenga ese formato para que la fecha elegida sea aceptada por el formulario.

(Formidable) Limitar mes de un datepicker al mes en curso Leer más »

(Formidable/PHP) Colocar una entry meta en un campo (fecha, hora, id de la entrada, etc.)

Agregar este código donde se necesite (create o update entry):

add_action('frm_after_create_entry', 'frm_update_updated_at_meta', 10, 2);
add_action('frm_after_update_entry', 'frm_update_updated_at_meta', 10, 2);
function frm_update_updated_at_meta($entry_id, $form_id) {
    if ($form_id == 41) { //id of the form with the entry and the fields to set
        $updated_at = current_time('Y-m-d H:i:s'); // Get the current date and time

        $updated_date = date('Y-m-d', strtotime($updated_at)); // Extract the date part
        $updated_time = date('H:i:s', strtotime($updated_at)); // Extract the time part

        FrmEntryMeta::add_entry_meta($entry_id, 845, '', $updated_date);
        FrmEntryMeta::add_entry_meta($entry_id, 864, '', $updated_time);
        // Replace 845 and 864 with the IDs of the fields where you want to store the date and time parts respectively
    }
}

En este caso específico, la función extrae el valor meta de $updated_at (fecha de actualización), lo separa en 2 valores ($updated_date y $updated_time), y cada uno lo coloca en los campos 845 (date field) y 864 (time field) con el método: FrmEntryMeta::add_entry_meta, que automáticamente toma el id de la entrada con $entry_id y coloca el valor respectivo de las variables.

Puede usarse con el hook frm_after_create_entry o con frm_after_update_entry.
Pueden usarse otros valores meta, por ejemplo created_at o entry_id.

Ejemplo para colocar el id de la entrada en un campo:

add_action('frm_after_create_entry', 'frm_add_entry_id', 42, 2);
function frm_add_entry_id($entry_id, $form_id){
   if ( $form_id == 2 ) { //change 2 to the ID of your form
     FrmEntryMeta::add_entry_meta( $entry_id, 30, "", $entry_id);//change 30 to the ID of the field in which you want to store the entry ID
   }
}

(Formidable/PHP) Colocar una entry meta en un campo (fecha, hora, id de la entrada, etc.) Leer más »

(WordPress) Añadir un Menú (con enlaces o inactivo-notas) al admin toolbar

Debe usarse el Code Snippets y agregar el código siguiente en PHP:

if (!function_exists('jnotes_admin_bar_link')):
    function jnotes_admin_bar_link($admin_bar)
    {
        $admin_bar->add_menu([
            'id' => 'jnotes_parent',
            'title' => '<span class="ab-icon"></span><span class="ab-label">JNotes</span>',
            'href' => '',
            'meta' => [
                'title' => '',
            ],
        ]);
        $admin_bar->add_menu([
            'id' => 'jnotes_color1',
            'parent' => 'jnotes_parent',
            'title' => esc_html('oro #dab42d'),
            'href' => '',
        ]);
        $admin_bar->add_menu([
            'id' => 'jnotes_color2',
            'parent' => 'jnotes_parent',
            'title' => esc_html('gris #636363'),
            'href' => '',
        ]);
        $admin_bar->add_menu([
            'id' => 'jnotes_color3',
            'parent' => 'jnotes_parent',
            'title' => esc_html('verde #54b236'),
            'href' => '',
        ]);
        $admin_bar->add_menu([
            'id' => 'jnotes_color4',
            'parent' => 'jnotes_parent',
            'title' => esc_html('lightblack #353a40'),
            'href' => '',
        ]);
    }
    add_action('admin_bar_menu', 'jnotes_admin_bar_link', 999);
endif;

Este código agrega un elemento (sin enlace) al admin toolbar llamado JNotes, que funciona como parent. Los subelementos son los que le siguen (en este caso colores), y cada elemento que se requiera debajo del inicial debe ponérsele la propiedad ‘parent’ => ‘jnotes_parent’ para que aparezca debajo del principal. Pueden agregarse varios elementos.

(WordPress) Añadir un Menú (con enlaces o inactivo-notas) al admin toolbar Leer más »

(Formidable) usr_meta: códigos de comparación y resultados (code snippets)

SHORTCODE (CON PARÁMETRO) DEVUELVE TRUE (1) SI ES IGUAL A usr_tipo (user meta) DEL USUARIO ACTUAL
Uso: [checkmeta vum=»valor a comparar»] . Colocar el shortcode en posts o pages.

add_shortcode('checkmeta','check_user_meta');
function check_user_meta ( $atts ) {
   $currentusermeta = get_user_meta( get_current_user_id(), 'usr_tipo', $single = true ); //cambiar usr_tipo al user meta que se quiera usar
    $valueusermeta = $atts['vum'];
    if($currentusermeta == $valueusermeta)
	return true;
    else
	return false;
    }

SHORTCODE (SIN PARÁMETRO). DEVUELVE TRUE (1) SI ES IGUAL A usr_tipo (user meta) DEL USUARIO ACTUAL
Uso: [checkmeta] . Colocar el shortcode en posts o pages. Cambiar $valueusermeta = «valor a comparar».

add_shortcode('checkmeta','check_user_meta');
function check_user_meta () {
   $currentusermeta = get_user_meta( get_current_user_id(), 'usr_tipo', $single = true );
    $valueusermeta = "Médico";
    if($currentusermeta == $valueusermeta)
	return true;
    else
	return false;
    }

SHORTCODE (SIN PARÁMETRO). DEVUELVE EL VALOR DE usr_tipo (user meta) DEL USUARIO ACTUAL
Uso: [displayusermeta] . Colocar el shortcode en posts o pages. Cambiar $valueusermeta = «valor a comparar».

add_shortcode('displayusermeta','check_user_meta');
function check_user_meta () {
   $currentusermeta = get_user_meta( get_current_user_id(), 'usr_tipo', $single = true );
   return $currentusermeta;
}

DIVI – PLUGIN: CONTENT VISIBILITY FOR DIVI (FUNCIÓN CON PARÁMETRO)
Divi no tiene un plugin como Stax Visibility Logic para Elementor, donde permite elegir la visibilidad de un bloque seleccionando «by user meta». El plugin de Divi «Content Visibility for Divi» sólo agrega una caja en las opciones donde debe ponerse una expresión PHP booleana (que devuelva True), para ocultar el bloque. Para esto, la función siguiente sirve.

Uso: check_user_meta («parámetro») (sin corchetes)| Ejemplo: check_user_meta («Médico»)

Colocarlo en la caja Content visibility de Divi>Cualquier elemento>Panel opciones>Avanzado>Visibilidad

function check_user_meta ( $valueusermeta ) {
   $currentusermeta = get_user_meta( get_current_user_id(), 'usr_tipo', $single = true );
   if($currentusermeta == $valueusermeta)
	return true;
    else
	return false;
    }

(Formidable) usr_meta: códigos de comparación y resultados (code snippets) Leer más »

(Formidable) Problema con shortcodes en modal RESUELTO – Sintaxis de shortcode

Los shortcodes funcionan en ventanas modales. Lo que pasa es que los shortcodes con parámetros deben venir sin «comillas», de esta forma:

[ formidable id=x readonly=administrator ]

No de esta forma, como lo indican aquí:

[ formidable id=x readonly=’administrator’ ] o [ formidable id=x readonly=»administrator» ]

Esta aclaración viene porque implementé una ventana modal en GuíaSaludMx y dentro un formulario con un parámetro del custom code mencionado arriba. No funcionó, porque al parámetro le puse las comillas, y me hizo pensar que el problema era la ventana modal.

(Formidable) Problema con shortcodes en modal RESUELTO – Sintaxis de shortcode Leer más »

Copiar el valor de un Dynamic Field a un campo de texto o combinar varios en uno solo

COPIAR EL VALOR DE UN DYNAMIC FIELD A UN CAMPO DE TEXTO. #

Agregar el siguiente fragmento de código:

add_filter('frm_validate_field_entry', 'copy_my_dynamic_field', 10, 3);
function copy_my_dynamic_field( $errors, $posted_field, $posted_value ) {
  if ( $posted_field->id == 125 ) {
    $_POST['item_meta'][ $posted_field->id ] = FrmProEntriesController::get_field_value_shortcode( array( 'field_id' => 50, 'entry' => $_POST['item_meta'][120] ) );
  }
  return $errors;
}

125 es el ID del campo de texto donde se copiará.
120 es el campo dinámico que contiene el valor a copiar, y
50 es el campo original del cual el campo dinámico jalan las entradas.

COMBINAR VARIOS VALORES (DINÁMICOS O NO) EN UN CAMPO DE TEXTO #

add_filter('frm_validate_field_entry', 'combine_to_one_field', 8, 3);
function combine_to_one_field( $errors, $posted_field, $posted_value ) {
    if($posted_field->id == 125){ //change 125 to the ID of the destination field
        //change the value between the quotes to what should go in-between values
        $separator = " - ";
        $_POST['item_meta'][125] =
        $_POST['item_meta'][17] . $separator .
        $_POST['item_meta'][ $posted_field->id ] = FrmProEntriesController::get_field_value_shortcode( array( 'field_id' => 60, 'entry' => $_POST['item_meta'][19] ) ) . $separator .
        $_POST['item_meta'][ $posted_field->id ] = FrmProEntriesController::get_field_value_shortcode( array( 'field_id' => 58, 'entry' => $_POST['item_meta'][32] ) );
    }
    return $errors;
}

125 es el ID del campo de texto donde se combinarán los campos.
La línea con el campo 17 es un campo normal.
Las líneas con FrmProEntriesController son las de los campos dinámicos. En la primera línea, 19 es el ID del dynamic field a copiar y el 60 es el id del campo de donde jala las entradas.

Copiar el valor de un Dynamic Field a un campo de texto o combinar varios en uno solo Leer más »

(Formidable) Establecer orden específico para una Vista con un enlace

Agregar el siguiente código PHP:
(tomado de Change View order based on URL parameter)

add_filter( 'frm_filter_view', 'change_my_view_object', 10, 1);
function change_my_view_object( $view ) {
	if ( $view->ID === 8477 ) { // 8477 is the View id
		if ( isset( $_GET['my_param'] ) && $_GET['my_param'] == 'descent' ) {
			$view->frm_order_by = array( created_at );
			$view->frm_order = array( 'DESC' );
		}
	}

	return $view;
}

En el ejemplo, 8477 es el id de la Vista.

En my_param puede ponerse el nombre del parámetro al gusto, e igualmente en descent, cualquier valor.

En la línea $view->frm_order_by = array( created_at );, dentro de los paréntesis, puede haber un ID de un campo (p.e. 150), campo por el cual se ordenará la Vista. En este ejemplo, se usa created_at como campo a ordenar, lo cual sirve para ordenar por creación de la entrada de forma ascendente o descendente.

En la línea $view->frm_order = array( ‘DESC’ );, se pone ASC o DESC, lo que se desee.

Para implementar, el enlace es como:

https://url.com/?my_param=descent

(Formidable) Establecer orden específico para una Vista con un enlace Leer más »