De cómo los desarrolladores (también) ganamos un Premio Ondas
Agraciados con la tarea de desarrollo: Natalia Díaz de Tudanca Carlos Bravo Bernal ¡Full Stack WordPress Development!
Los 5 marrones
Primera petición (marrón) Quiero programas, temporadas y episodios Quiero mostrar una página para cada programa, temporada y episodio
Solución Programa: Custom Post Type Temporada: Custom Taxonomy con Slug para relacionar con el programa (doble validación) Episodio: Custom Post Type relacionado con los dos anteriores
Segunda petición (marrón) Quiero un blog para el site Quiero un blog para cada programa
¿Seguro que vas a escribir tanto como para necesitar un blog para cada programa?
SÍ
Solución Blog del Site: Los posts de siempre Blog de cada programa: Custom Post Type vinculado con los programas Custom Taxonomies para los posts de programa
3 meses después… Mejor me lo pones todo en un mismo blog
Tercera petición (gran marrón) No podemos perder la reproducción del audio en la navegación del site
TODA LA NAVEGACIÓN EN AJAX Sólo nos petó en: Contact Form 7 Solución TODA LA NAVEGACIÓN EN AJAX Sólo nos petó en: Contact Form 7 Visual Composer (petaban las columnas de ancho completo) Actualizar metas Revolution Slider
Cuarta petición Quiero tener campos donde poner datos que luego recoja la API para cargar el audio correcto y funcionalidades varias de Front
Advanced Custom Fields get_field(‘wadus’,$post->ID) Solución Advanced Custom Fields get_field(‘wadus’,$post->ID)
Quinta petición (gran marrón) Quiero que las urls sean: wadus.org/programa wadus.org/programa/temporada wadus.org/programa/temporada/episodio wadus.org/programa/blog wadus.org/programa/blog/post_programa
definir rewrites de los CPT add_rewrite_rule expresiones reguleras Solución endpoints definir rewrites de los CPT add_rewrite_rule expresiones reguleras post_type_link Los endpoints los utilizamos para los archive de blog de cada programa, una página extra con información del programa (que apareció de la nada) y para una petición específica que nos hicieron.
add_rewrite_endpoint( 'blog', EP_PERMALINK ); add_rewrite_endpoint( 'sobre-el-programa', EP_PERMALINK ); add_action( 'template_redirect', 'wadus_endpoints_template_redirect' ); add_filter( 'request', 'wadus_rewrite_filter_request' ); Básicamente lo que hacemos con esto es añadir una nueva query variable a nuestra URL pero en plan bonito. Utilizando el hook de template redirect, podemos mostrar el contenido que queremos y como nosotros queramos para ese endpoint. Cuando añadimos el endpoint, es lo mismo que si añadieramos ?blog=foo En el filtro request, si existe la query variable, le damos el valor true y jugamos con el valor de la variable “blog” para poder paginar add_filter( 'request', 'wadus_rewrite_filter_request' ); function wadus_rewrite_filter_request( $vars ) { if( isset( $vars['blog'] ) ) if(empty($vars['blog'])) $vars['blog'] = true; } else $test = explode('page/', $vars['blog']); if(isset($test) && !empty($test[1])) $vars['pagina'] = $test[1]; if( isset( $vars['sobre-el-programa'] ) ) $vars['sobre-el-programa'] = true; return $vars;
Definimos los “comodines” de los CPT y las taxonomías: /%programa% /%programa%/%temporada% add_rewrite_rule('([^/]+)/(?!blog)([^/]+)/([^/]+)/?$', 'index.php?post_type=micpt&micpt=$matches[3]','top'); Por otro lado, necesitábamos asociar cada elemento de manera unívoca una URL “bonita”, para eso utilizamos los comodines en el rewrite al registrar el custom post type Mediante la definición de las rewrites rules podemos relacionar nuestra URL “bonita” con el post concreto al que queremos ir. Para pillar el link correcto cuando se ejecute qet_post_permalink, lo tuneamos con el filtro post_type_link
add_filter('post_type_link', 'wadus_filter_post_link', 10, 3); function wadus_filter_post_link($permalink, $post, $leavename) { if ( is_object( $post ) ) { $post_ID = $post->ID; $type = $post->post_type; if($type == 'micpt' && false === strpos( $permalink, '%programa%' ) ) return $permalink; } $permalink = str_replace( '%programa%' , $prog_name , $permalink ); $permalink = str_replace( '%temporada%' , $temp_name , $permalink ); Para pillar el link correcto cuando se ejecute qet_post_permalink, lo tuneamos con el filtro post_type_link Si es mi tipo de post, pero no aparece el comodín en el permalink, devolvemos el permalink tal cual. En nuestra función le damos el valor que nosotros queremos a esos comodines, en nuestro caso, a través de un campo de ACF obtenemos el nombre del programa y la temporada y los sustituimos en el permalink
¿Y para cuando necesitas todo esto?
Pero no estuvimos solos :-)
Jefes de proyecto Diseñadores Gestores de contenido Gente de sistemas Locutores y editores de sonido etc...
El mayor gustazo es ver a la gente utilizando la plataforma que has creado,o escuchar a tus compañeros comentar programas de la web. Y... ¡nos han dado un Ondas!
¡Gracias!