Hemos estado viendo cómo crear un sistema de CRM simple en WordPress. En la última parte de esta serie, utilizamos Campos personalizados avanzados para agregar campos personalizados a nuestro tipo de publicación personalizada de Contactos. Aprendimos cómo usar Campos personalizados avanzados y configurarlo para que funcione de manera programática..
Hoy, cubriremos cómo mostrar los datos almacenados en nuestros campos personalizados dentro de nuestra tabla de contactos.
Cada tipo de publicación que tiene un panel de control usa la WP_List_Table
Clase para renderizar la tabla familiar y sus acciones asociadas:
Por defecto, WordPress mostrará las siguientes columnas:
Para nuestro Contacto tipo de publicación personalizada, esto no es muy útil si queremos ver rápidamente los detalles clave de un vistazo, como el número de teléfono del contacto o la foto.
WordPress proporciona un filtro y una acción que se puede usar para agregar nuevas columnas a la WP_List_Table
y determinar su salida para cada puesto..
Comencemos agregando el manage_edit- POST_TYPE _columns
filtrar a la construcción de nuestra clase de plugin. TIPO DE MENSAJE
será el nombre de nuestro tipo de publicación, que en este caso es contacto
:
/ ** * Constructor. Se llama cuando se inicializa el complemento * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('plugins_loaded', array ($ this, 'acf_fields')); add_filter ('manage_edit-contact_columns', array ($ this, 'add_table_columns'));
También necesitamos definir nuestros add_table_columns ()
función, que le dice a WordPress los nombres de nuestras columnas adicionales que nos gustaría mostrar en nuestra tabla de Contactos. Esta función acepta una matriz de columnas existentes, que podemos ampliar agregando nuestras columnas de tabla personalizadas.
/ ** * Agrega columnas de la tabla a los Contactos WP_List_Table * * @param array $ columnas Columnas existentes * @return array Nuevas Columnas * / function add_table_columns ($ columns) $ columns ['email_address'] = __ ('Email Address', 'tuts-crm'); $ column ['phone_number'] = __ ('Phone Number', 'tuts-crm'); $ columnas ['foto'] = __ ('Foto', 'tuts-crm'); devuelve $ columnas;
Nos aseguramos de que las claves de la matriz coincidan con los nombres de los campos personalizados de ACF. Si tiene campos diferentes, asegúrese de que los nombres de las claves de sus columnas coincidan con los campos de sus campos.nombre del campo ajuste.
Ver su Contactos mesa haciendo clic en Contactos en el menú del panel de WordPress, y verá nuestras nuevas columnas:
Sin embargo, no se muestran datos para cada contacto en la tabla. Necesitamos agregar el manage_ POST_TYPE _posts_custom_column
acción a nuestro plugin clase 'constructor. TIPO DE MENSAJE
será nuevamente el nombre de nuestro tipo de publicación, que en este caso es contacto
:
/ ** * Constructor. Se llama cuando se inicializa el complemento * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('plugins_loaded', array ($ this, 'acf_fields')); add_filter ('manage_edit-contact_columns', array ($ this, 'add_table_columns')); add_action ('manage_contact_posts_custom_column', array ($ this, 'output_table_columns_data'), 10, 2);
También necesitamos definir nuestros output_table_columns_data ()
función, que le dice a WordPress qué mostrar para cada contacto y combinación de columnas. Porque nos aseguramos de que nuestros nombres de clave de columna coincidan con nuestro ACF Nombres de campo, Esto hace que nuestra codificación sea más fácil. Campos personalizados avanzados tiene una get_field ()
función, que acepta tanto Nombre del campo y parámetros de ID de publicación para recuperar el valor almacenado:
/ ** * Muestra nuestros datos de campo personalizados de contacto, según la columna solicitada * * @param string $ columnName Nombre de clave de columna * @param int $ post_id Identificación de publicación * / function output_table_columns_data ($ columnName, $ post_id) echo get_field ($ columnName, $ post_id);
Vuelve a cargar la tabla de contactos y verás tus campos personalizados:
Dependiendo de su configuración de PHP, la Foto la columna estará en blanco o emitirá un aviso de PHP:
El campo de imagen en Campos personalizados avanzados devuelve una matriz cuando se usa get_field ()
, que comprende los detalles de la imagen y la URL, el ancho y el alto de cada tamaño de imagen registrado (un tamaño de imagen registrado generalmente se basa en los Temas y Complementos instalados).
Modifiquemos nuestra función para generar los datos de la matriz correcta para mostrar una imagen:
/ ** * Muestra nuestros datos de campo personalizados de contacto, según la columna solicitada * * @param string $ columnName Nombre de clave de columna * @param int $ post_id ID de publicación * / function output_table_columns_data ($ columnName, $ post_id) // Field $ field = get_field ($ columnName, $ post_id); if ('photo' == $ columnName) echo ''; else // Output field echo $ field;
Vuelva a cargar la tabla de contactos y verá la foto de cada contacto:
¿Qué sucede si necesitamos ordenar rápidamente nuestros contactos por nombre, número de teléfono o dirección de correo electrónico? Ya podemos ordenar en la columna de nombre (o, más bien, en el título), pero en este momento no hay ninguna funcionalidad para decirle a WordPress cómo ordenar en nuestras columnas de número de teléfono y dirección de correo electrónico.
De vuelta al constructor de nuestro plugin. Necesitamos agregar el manage_ POST_TYPE _posts_custom_column
filtre a la construcción de nuestra clase de complemento, para decirle a WordPress que queremos permitir que ciertas columnas se puedan ordenar. TIPO DE MENSAJE
será de nuevo el nombre de nuestro Tipo de publicación, que en este caso es contacto
:
/ ** * Constructor. Se llama cuando se inicializa el complemento * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('plugins_loaded', array ($ this, 'acf_fields')); add_filter ('manage_edit-contact_columns', array ($ this, 'add_table_columns')); add_action ('manage_contact_posts_custom_column', array ($ this, 'output_table_columns_data'), 10, 2); add_filter ('manage_edit-contact_sortable_columns', array ($ this, 'define_sortable_table_columns'));
Al igual que con nuestras acciones y filtros anteriores, también necesitamos definir nuestros define_sortable_table_columns ()
función, que le dice a WordPress qué columnas se pueden ordenar:
/ ** * Define qué Coloursn de contactos se pueden ordenar * * @param array $ columnas Columnas disponibles de tipo * @return array Nuevas columnas clasificables * / function define_sortable_table_columns ($ columnas) $ columns ['email_address'] = 'email_address'; $ columns ['phone_number'] = 'phone_number'; devuelve $ columnas;
Mueva el cursor del mouse sobre la Dirección de correo electrónico y Número de teléfono columnas, y verás aparecer una flecha, que nos muestra que podemos clasificar por los datos en la columna correspondiente:
En este momento, hacer clic en el encabezado de la columna para ordenar por sus datos no hará nada, ya que el orden por
El parámetro que se establece en la URL no es uno que WordPress reconocerá.
En el constructor de nuestro plugin, vamos a agregar un filtro en el solicitud
y luego defina nuestra función para verificar si estamos tratando de ordenar por una columna personalizada (y si es así, corrija la consulta de las publicaciones para que WordPress pueda entenderlo):
/ ** * Constructor. Se llama cuando se inicializa el complemento * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('plugins_loaded', array ($ this, 'acf_fields')); add_filter ('manage_edit-contact_columns', array ($ this, 'add_table_columns')); add_action ('manage_contact_posts_custom_column', array ($ this, 'output_table_columns_data'), 10, 2); add_filter ('manage_edit-contact_sortable_columns', array ($ this, 'define_sortable_table_columns')); if (is_admin ()) add_filter ('request', array ($ this, 'orderby_sortable_table_columns'));
Porque el solicitud
el filtro se ejecuta en cada carga de página de WordPress (ya sea el sitio web frontend o la interfaz del panel de WordPress), queremos minimizar la frecuencia con la que se llama. Hacemos esto solo agregando el filtro si estamos en la Administración de WordPress (is_admin ()
).
A continuación, definamos nuestra orderby_sortable_table_columns ()
función:
/ ** * Inspeccione la solicitud para ver si estamos en la tabla de WP_List_Table de contactos y estamos intentando * ordenar por dirección de correo electrónico o número de teléfono. Si es así, modifique la consulta de Publicaciones para ordenar * esa clave meta personalizada * * @param array $ vars Solicitar variables * @return array Nuevas variables de solicitud * / function orderby_sortable_table_columns ($ vars) // No hagamos nada si estamos no en el Tipo de publicación personalizada de contacto si ('contact'! = $ vars ['post_type']) devuelve $ vars; // No haga nada si no se establece ningún parámetro orderby si (! Isset ($ vars ['orderby'])) devuelve $ vars; // Compruebe si el parámetro orderby coincide con una de nuestras columnas clasificables if ($ vars ['orderby'] == 'email_address' O $ vars ['orderby'] == 'phone_number') // Agregar orden por meta_value y meta_key parámetros a la consulta $ vars = array_merge ($ vars, array ('meta_key' => $ vars ['orderby'], 'orderby' => 'meta_value',)); devuelve $ vars;
Esta función comprueba que estamos viendo nuestros Contactos Tipo de mensaje personalizado, y si es así que un orden por el parámetro se ha ajustado a juego dirección de correo electrónico
o número de teléfono
. Se configuran si el usuario ha hecho clic en una columna en la Tabla de contactos para ordenar por número de teléfono o dirección de correo electrónico.
Hagamos clic en la columna Dirección de correo electrónico y veremos que los resultados se ordenan correctamente:
Haciendo clic de nuevo revertirá el orden de los resultados:
En el siguiente artículo, vamos a ampliar la funcionalidad de búsqueda y filtro, permitiéndonos buscar los datos almacenados en nuestros Campos personalizados avanzados..