(¡Mi primera pregunta de WP que se hizo! ¡Sé amable!)
Estoy construyendo un sitio que es principalmente páginas (es decir, estático), usando WP como CMS. En la parte inferior de varias de las páginas, aparecerán 1, 2 o 3 "cuadros de promoción", básicamente imágenes de botones que enlazan con otras partes del sitio. Aunque solo aparecerán hasta 3 cuadros de promoción en cualquier página, habrá ~ 30 diferentes para elegir.
Cuando mi cliente crea una nueva página, me gustaría que pueda elegir cuadros de promoción de algo así como una lista desplegable de todos los cuadros de promoción posibles.
Me parece que esto debería funcionar así:
- Crea un tipo de mensaje personalizado llamado "cuadro de promoción". (Aunque podría ser fácilmente una etiqueta para publicaciones regulares).
- Use una herramienta como Plantilla de campo personalizada para crear un menú desplegable en el editor de páginas, donde los valores de las opciones desplegables se generan dinámicamente a partir de la lista de todas las publicaciones de cuadros de promoción existentes. ( Esta es la parte que no sé hacer ) .
- Acceda a los metadatos resultantes (el número de publicación es realmente todo lo que necesito, luego puedo obtener todo lo demás) en la plantilla de página.
Basado en las respuestas a otras preguntas aquí, he echado un vistazo inicial a los campos personalizados WPAlchemy MetaBox, Posts-2-Posts y SLT, pero confieso que la documentación para cada uno de ellos es un poco más geek de lo que soy, así que no he profundizado Demasiado profundo.
¿Consejo? ¿Es una de las herramientas anteriores la solución adecuada para mí, y solo tengo que resolverlo? ¿Me estoy perdiendo de algo?
fuente
Respuestas:
Como autor de WPAlchemy , soy un poco parcial , pero esencialmente tienes un buen modelo de trabajo descrito para seguir dependiendo de la ruta que elijas.
Sin embargo, si usa WPAlchemy, básicamente haría algo como lo siguiente (paso # 2):
custom/meta.css
puede contener estilos con los que puede diseñar su formulario ycustom/meta.php
es esencialmente un archivo HTML con el contenido FORM del cuadro meta, en este caso su menú desplegable, para generar su menú desplegable, haría una consulta wp personalizada para obtener toda su publicación personalizada tipos. WPAlchemy tiene algunas funciones auxiliares especiales para ayudarlo a crear sus elementos de formulario.Hay documentación adicional para ayudarlo cuando trabaja en la plantilla.
El objetivo principal de WPAlchemy era mantener el control en manos del desarrollador, desde el diseño (look + feel) hasta la definición del contenido de meta box.
Y yo y otros siempre estamos dispuestos a ayudar a quienes comentan y hacen preguntas.
fuente
do_meta_boxes
con alguna lógica condicional o, alternativamente, enadd_meta_boxes_{%TYPE%}
...Jeje, eres un novato! ¡Te destrozaremos ...!
j / k :) Ofrecemos una cálida bienvenida a todos los novatos aquí, me alegro de tenerte.
Esta es la tercera vez que escucho este requisito, dos veces de clientes y no de usted (y de su cliente). Eso me dice que es una necesidad razonablemente común.
Me gustó su análisis, así que decidí codificar una clase para abordar su segundo punto. Lo llamé
LittlePromoBoxes
porque nunca puedo sacar esta canción de mi cabeza, gracias a ellos . Básicamente, uso la clase para encapsular para evitar conflictos de nombres potenciales con las funciones que necesito escribir.Puede poner esta clase en el
functions.php
archivo de su tema o en un archivo .PHP de un complemento que podría estar escribiendo (pero no se preocupe, parece mucho más complejo de lo que es).La primera función
on_load()
es una función estática que llamo al final de la declaración de clase para inicializar los tres (3) ganchos que necesitará (sus funciones estáticas son esencialmente funciones relacionadas con la clase , no con la instancia) :El
init
gancho para registrar elpromo-box
tipo de publicación,El
add_meta_boxes_post
gancho para permitirle definir el metabox, yEl
wp_insert_post_data
gancho para permitirle capturar los cuadros de promoción seleccionados y guardarlos en la base de datos.Cada uno de esos ganchos hace referencia a otra función estática en la clase (estas fueron las funciones que estaba encapsulando al crear la clase).
Me saltearé la descripción de la
action_init()
función y mimake_labels()
función auxiliar, suponiendo que sepa cómo registrar un tipo de publicación en función de su pregunta.La
action_add_meta_boxes_post()
función registra el metabox usando la función principal de WordPressadd_meta_box()
y he comentado sus parámetros para explicar por qué pasé lo que pasé por cada uno. La función de devolución de llamadathe_little_promo_boxes_metabox()
es, por supuesto, otra función estática de la clase y es lo que realmente muestra el contenido en el metabox. Utiliza principalmente la función principal de WordPresswp_dropdown_pages()
para mostrar una lista de cuadros de promoción (tenga en cuenta que mostrará otros tipos de publicaciones además de 'página' pero solo si están marcadas como'hierarchical'=>true
en su registro de tipo de publicación. ¿Por qué solo jerárquico? Porque esa es la forma en que lo escribió, por eso! :)Como estamos mostrando tres (3) menús desplegables, debemos dar a cada uno un ID único en HTML (
"promo_box_{$i}"
) pero el mismo nombre con corchetes ('promo_boxes[]'
) para que PHP los recopile en una matriz dentro de la$_POST
variable (a la que WordPress accede por nosotros; Verás cómo en un minuto) . Y, por supuesto, necesitamos establecer el valor seleccionado ((empty($promo_boxes[$i]) ? 0 : $promo_boxes[$i])
) si de hecho uno de los valores se había seleccionado previamente.También utilicé la función principal de WordPress
get_post_type_object()
para mostrar cómo obtener las etiquetas de un tipo de publicación, y también utilicé la función principal de WordPressget_post_meta()
para recuperar una variedad de ID de cuadros de promoción usando la tecla de campo personalizada '_promo_boxes' que mostraré que tiene para guardar el siguiente (tenga en cuenta que utilicé un guión bajo anterior en el nombre'_promo_boxes'
que hace que WordPress se oculte de la interfaz de usuario de campo personalizado estándar cuando el usuario está editando la publicación) .La última función para describir antes de ver el código es la
filter_wp_insert_post_data()
que recibe los datos de publicación existentes en el primer parámetro ($data
) y el contenido de la$_POST
matriz gracias a WordPress como el segundo parámetro ($postarr
). Dentro de esta función, llamamos a la función principal de WordPressupdate_post_meta()
y extraemos la matriz de cuadros de promoción ($postarr['promo_boxes']
) para guardar en el valor del campo personalizado para la clave'_promo_boxes'
de la publicación especificada por la$_POST
matriz (es decir$postarr['ID']
).Dicho esto, aquí está el código para la
LittlePromoBoxes
clase:Todavía hay dos (2) funciones estáticas aún no mencionadas:
get_promo_boxes()
yget_promo_box()
; Estas son funciones de ayuda para ayudarlo a recuperar las publicacionespost_type='promo-box'
por sus números ordinales 1..3. Pero para hacerlos más WordPress como aquí hay dos funciones de contenedor para agregar alfunctions.php
archivo de su tema (tenga en cuenta que puede pasar una publicación como parámetro pero no tiene que hacerlo a menos que esté utilizando una publicación diferente a la de The Loop ) :Ahora puede llamar a una o ambas funciones en su
single.php
archivo de tema con un código que podría verse así (este código podría haberse escrito en un bucle, pero a la mayoría de los temáticos de WordPress parece que les gusta duplicar el código para que puedan leerlo en lugar de eliminar la redundancia Entonces, cuando en Roma ...):fuente