Agregar una vista personalizada a la pantalla Todas las publicaciones
TL; DR: voy a estar trabajando en una serie que analiza cómo lograr una tarea útil con taxonomías, categorías probables, luego refactorizarlo en un complemento orientado a objetos que servirá como un complemento de utilidad para taxonomías, en general .
Una breve historia de las publicaciones OOP
Hace algún tiempo, hice una larga serie sobre los principios de la programación orientada a objetos (y traté de compartir una cantidad decente de cómo lograr ciertas cosas dentro del contexto de WordPress).
También he escrito un montón de artículos sobre todo el paradigma a lo largo de los años para aquellos que estén interesados en ponerse al día con algunos de esos artículos.
Y sería negligente si no compartiera que un buen amigo mío también ha escrito literalmente un libro sobre el tema.
Y por lo tanto, como he estado pensando en varios temas sobre los que escribir (después de tomarme un período de tiempo libre más largo de lo que había planeado), pensé que podría valer la pena hablar sobre cosas prácticas que podemos hacer con API y enlaces normales y luego refactorizar eso en un tipo de complemento de utilidad.
Agregar una vista personalizada
Para el propósito del trabajo que voy a compartir en esta demostración, estoy usando lo siguiente:
- Local por Flywheel con un
https://sandbox.localdominio - TablePlus para el acceso a la base de datos
- Visual Studio Code como mi IDE
- Y los estándares de codificación PHP de WDS para todo el PHP que verá.
Si desea seguir lo que estoy haciendo, use todo lo anterior (no sé si compartiré todo, pero si ve capturas de pantalla y fragmentos de código, sabrá de dónde proviene ).
Con eso, aquí hay una breve digresión sobre viewsWordPress (y no es como Vistas en el sentido de MVC o MVVM ).
Vistas de WordPress
En el momento de escribir este artículo, no parece haber una declaración clara y concisa sobre qué es una vista de WordPress. En cuanto al gancho disponible, tenemos views_edit-post.
Entonces, si tomamos ese gancho en particular y lo que hace, tal vez algo como esto sería suficiente:
Una vista de WordPress es una página donde podemos ver todas las publicaciones que se ajustan a un conjunto de criterios específicos.
Fuera de la caja, este criterio generalmente incluye publicaciones como:
- Publicado,
- Borradores,
- Basura,
- Programado,
- Y así.
Pero, ¿qué sucede si tiene otra publicación que tiene otros criterios por los que desea filtrar? Claro, puede filtrar por el cuadro desplegable que está presente en la pantalla (por ejemplo, por categoría), y eso está bien, pero ¿qué sucede si desea usar un criterio personalizado para [cualquier motivo dado]?
Por ejemplo, ¿qué sucede si no desea tener que hacer clic en un determinado elemento, luego filtrar y luego ver las publicaciones? En su lugar, ¿desea ver un enlace a los criterios, la cantidad de publicaciones que se ajustan a los criterios y luego filtrar por ellos?
Aquí es donde entra en juego la capacidad de editar vistas.
Y para los propósitos de esta publicación, voy a cubrir cómo introducir un nuevo ancla en la parte superior de la página que enumerará la cantidad de publicaciones para una categoría específica.
¿Cuál es nuestra opinión?
En este caso, usaremos Sin categorizar porque una instalación predeterminada ya tiene una publicación sin categorizar disponible y podemos modificar fácilmente ciertos cambios al respecto.
Para hacer esto, vamos a escribir un correo electrónico mu-pluginpara que se coloque en el mu-pluginsdirectorio. Si su instalación no tiene uno, agregue el directorio y luego agregue add-custom-view.phpal directorio:
A partir de ahí, el archivo de complemento inicial puede verse así:
Inicialmente, estamos haciendo lo siguiente:
- Establecer un espacio de nombres,
- Agregando un filtro,
- Luego, configure la función que aceptará el conjunto predeterminado de
$viewsy devolverá la matriz de$viewsdespués de que se hayan modificado.
Entonces, ¿qué tenemos que hacer desde aquí?
El conjunto de requisitos
Para lograr lo que queremos, necesitamos ser capaces de:
- Especifique el nombre de la categoría,
- Agregue el enlace a la categoría junto con la cantidad de publicaciones con esa categoría a la lista de vistas,
- La capacidad de determinar si estamos en la página de categoría para diseñar correctamente la lista
- La capacidad de filtrar por tipo de publicación,
- Y una forma de probarlo.
Todo lo anterior se cubrirá en el código más adelante en el artículo, pero el quinto paso requiere que cree manualmente una categoría para que podamos probar fácilmente si el resto del código funciona.
Así que adelante y haz eso. La categoría puede tener cualquier nombre (utilicé Categoría de muestra). Una vez hecho esto, escribamos el código del resto del complemento.
Determinar nuestra vista
Primero, voy a compartir una función que determinará en qué página estamos y hará una de dos cosas:
- Si estamos en una página que tiene el mismo parámetro de cadena de consulta para el ID de nuestra categoría, proporcionaré un nombre de clase; de lo contrario, devolveremos una cadena vacía.
Para hacer esto, la función debe:
- Aceptar un nombre de categoría,
- Inicializar una variable para atributos,
- Comparar las variables de cadena de consulta
- Determine si el nombre de la categoría y el ID de la categoría son iguales,
- Y devolver el valor adecuado, si no.
Así es como se ve mi función:
Esto también podría simplificarse con un operador ternario, pero para mantenerlo lo más legible posible, lo dejo como está por ahora.
Determinar el nombre de la categoría
Esta característica en particular es realmente fácil y, aunque estamos acostumbrados a recibir comentarios de los usuarios en gran parte de lo que hacemos, vamos a codificar este valor.
Para hacer esto, simplemente almacenaremos esto en una variable que se pasa al resto del código.
Viste la variable pasada previamente a la función anterior y verás que también se usa en la versión final del código fuente.
Recuperar resultados de publicaciones con la categoría
Para ello, tenemos que hacer dos cosas:
- Recuperar todos los
object_idregistros que tienen el ID de esta categoría, - Filtre el contenido que no es para estas publicaciones.
Hay un par de cosas que quiero mencionar aquí: Primero, usaremos la get_cat_IDfunción que proporciona WordPress. Esto recupera el ID de la categoría en función del nombre entrante.
En segundo lugar, estoy usando dos funciones, una de las cuales es un bucle, para examinar el estado de publicación de un elemento. Esta no es la manera más eficiente de hacer esto. En cambio, podríamos usar una consulta más elegante para recuperar solo publicaciones; sin embargo, la primera iteración de esto está destinada a mostrar no solo cómo hacer esto desde cero, sino también para una audiencia que puede no estar tan cómoda con otros aspectos de la escritura de código.
Con eso, así es como obtenemos todos los registros en WordPress que están marcados como Sin categoría.
Y con eso, tomamos los resultados y los enviamos a esta función que devolverá la cantidad de elementos que son solo publicaciones.
Con eso, tenemos la mayor parte de lo que necesitamos para comenzar a armar nuestro ancla de vista.
Generar un ancla de vista
Ahora que tenemos todas las funciones necesarias para generar un ancla de vista, debemos juntarlas en lugar de sprintfpara un formato de cadena seguro.
El objetivo es generar un ancla que:
- Se parece al resto de las anclas,
- Muestra el número de publicaciones,
- Está en negrita cada vez que estás viendo dichas publicaciones.
Para hacer esto, necesitamos crear el enlace y agregar los argumentos de cadena de consulta adecuados. Esto significa que configuraremos un enlace edit.phpcon argumentos para:
- el ID de la categoría,
- el tipo de publicación de la publicación,
- y todas las publicaciones que tienen esta categoría.
A continuación, tendremos que incluir:
- cualquier atributo para diseñar el enlace,
- el nombre de la categoría,
- y solo el contenido de la publicación
post_type.
Para ello, podemos utilizar la siguiente función:
Esto hace varias cosas:
- Acepta la matriz estándar de
$viewsWordPress, - Agrega nuestro ancla personalizada como se describe anteriormente,
- Lo empuja en la
$viewsmatriz, - Lo devuelve a WordPress para renderizar.
¡Y eso es!
probandolo
Para probar esto, cargue su navegador y debería ver un nuevo enlace Sin categoría junto al resto de los anclajes, como Todos, Publicado, Mío, Papelera, Programado, etc.
Después de eso, cambie una categoría de publicaciones y elimine Sin categorizar, luego vuelva a visitar o actualice la página Todas las publicaciones y verá que el enlace está activo y con estilo, según cómo lo esté viendo, e incluye la cantidad de publicaciones que están categorizadas. como tal, también.
Ahora, a GitHub
Cargué la primera iteración de este complemento en GitHub para que pueda descargarlo y colocarlo en su mu-pluginsdirectorio para probarlo.
En las próximas publicaciones, me gustaría comenzar cambiando esto a un paradigma orientado a objetos, de modo que esos sean los cambios que se realizarán en el complemento y el contenido que se incluirá en futuras publicaciones.






