Manipulación de meta de publicación en el personalizador

4

Estoy trabajando en un complemento para campos personalizados en todo el administrador y estoy tratando de crear tantas ubicaciones para campos como sea posible. Hasta ahora estoy haciendo esto con éxito en algunas de esas ubicaciones:

  1. tipos de publicaciones
  2. Taxonomías
  3. Comentarios
  4. Usuarios
  5. Opciones (páginas)
  6. Widgets
  7. elementos del menú
  8. Adjuntos
  9. Códigos cortos
  10. El personalizador (tipo de)

Naturalmente, para cada una de las ubicaciones que tengo, estoy tratando de usar la API de WordPress adecuada - * _post_meta, * _term_meta, etc. y las cosas funcionan bastante bien.

Para las ubicaciones, que están asociadas a un elemento que tiene una URL (principalmente las primeras 4, aunque los archivos adjuntos también tienen URL), tengo formularios front-end, que permitirían a los usuarios editar el elemento actual y guardar su Campos Personalizados. Lo hago a través de una única etiqueta de función / plantilla, que no requiere ningún argumento: todos los grupos de campos asociados con el elemento se muestran automáticamente.

El último elemento que deseo tener, antes de considerar que mi (prueba de) concepto es exitoso, es el soporte para el personalizador. El uso de la API predeterminada me permite trabajar con las opciones / modificaciones de tema con bastante facilidad y llegué a un punto en el que la ubicación del "personalizador" es bastante funcional. El único inconveniente de mi implementación parece ser que estoy mostrando todo el grupo con campos como un solo control. Esto me permite tener pestañas, lógica condicional y validación adecuada (que depende de la lógica condicional). Sin embargo, estoy usando configuraciones diferentes (como en WP_Customize_Setting ), por lo que postMessage y todo lo demás están funcionando correctamente sin tener que hackear nada más.

Sin embargo, lo que quiero es permitir que las mismas ubicaciones, que tienen URL y que pueden tener formularios de inicio de sesión, se agreguen fácilmente al personalizador también. Un desarrollador puede crear un grupo meta de publicaciones, que aparecerá como un buzón de correo normal en la pantalla de edición y mi objetivo es permitirle que llame a algo como - > show_in_customizer () para permitir que ese grupo se use allí también.

Sé que mucha gente recomendaría no editar publicaciones en el personalizador y, en muchas ocasiones, estaría de acuerdo con ellas. Sin embargo, si hay una configuración de diseño por publicación, algunas opciones de color o incluso algo tan simple como la imagen mostrada, me gustaría mantener esa puerta abierta.

Para ir al grano, esto parece ser una tarea bastante difícil, ya que requiere al menos lo siguiente:

  1. Determinar si mostrar la sección responsable en el personalizador. Eso es bastante fácil a través de la propiedad "active_callback" de las secciones.
  2. introducir datos en el personalizador: este es un poco complicado. Incluso si hace clic en el botón "Personalizar" al obtener una vista previa de una página, el personalizador se carga desde el contexto del administrador y no tengo acceso directo a la cosa, que se muestra. Lo que estoy haciendo, es reunir todos los datos que necesito en el pie de página de la página y enviarlos al personalizador a través de parent.someFunction cuando la página está cargada. Esto no es lo ideal, pero funciona lo suficientemente bien: no estoy recuperando / enviando ningún valor más de una vez, así que estoy contento. En el mundo perfecto, esta funcionalidad, combinada con active_callback , permitiría a los usuarios editar una página, hacer clic en un enlace a otra página y editar inmediatamente la página recién cargada. Sin embargo, cuando se hace esto, la nueva página no recibe parámetros de solicitud ni encabezados incluidos, por lo que está actuando como si no estuviera en el personalizador, así que esto no funciona para mí.
  3. Sobrescribiendo el resultado de get_*_meta con los valores del personalizador en una solicitud normal (sin mensaje posterior). Esta parte es muy sencilla.
  4. Guardando los datos: Aquí es donde falla mi implementación :(

Cuando se hace clic en el botón "Guardar y publicar", el personalizador realiza una solicitud wp_ajax. La solicitud aún incluye el customized JSON normal, como una actualización cuando se cambia un valor, pero debido a que la secuencia de comandos usa admin-ajax, no puedo saber qué se está guardando realmente.

La única idea que tengo ahora es sobrescribir la función wp.customize.previewer.query JavaScript con algo en la línea de:

var query = wp.customize.previewer.query;
wp.customize.previewer.query = function( options ) {
    args = query.call( wp.customize.previewer, options );
    args.my_plugin_name_current_object = 'post_10';
    return args;
}

Sin embargo, en este punto, debo tener mucho cuidado al agregar el parámetro y, en general, la implementación está empezando a ensuciarse demasiado.

Finalmente, mi pregunta: ¿Alguien ha logrado lograr con éxito una funcionalidad similar en el personalizador? ¿Podrías aconsejarme un enfoque adecuado para terminar esto?

Hasta ahora no he intentado desarrollar nada personalizado para el customzer y (aunque no tengo la intención de ofender a nadie), me sorprende lo sobre-complicadas / sobre-diseñadas que parecen algunas partes del personalizador, mientras que algunos aspectos bastante básicos parecen estar extremadamente a medio cocinar.

Sé que no estoy incluyendo ningún fragmento de código en particular, pero la pregunta parece ser lo suficientemente general, al menos para mí.

Gracias de antemano!

    
pregunta Radoslav Georgiev 13.01.2017 - 23:36

1 respuesta

1

Consulte el complemento Personalizar publicaciones . Tiene un WP_Customize_Post_Setting y WP_Customize_Postmeta_Setting para representar publicaciones y postmeta en el personalizador, respectivamente.

    
respondido por el Weston Ruter 14.01.2017 - 09:03

Lea otras preguntas en las etiquetas