Ayuda con Wordpress: enlaces a página single CPT, peleas para hacerme entender...

LostSouls

Madmaxista
Desde
25 Jul 2012
Mensajes
2.278
Fruta
6.377
Lugar
Shell Beach
A ver si me explico porque llevo varios intentos tratando de explicárselo al que tengo contratado y cuanto más pregunta más lío tenemos ambos.

Tienes que estar registrado para ver este contenido


En la captura insertada está la single page que muestra un CPT nativo del plugin que estoy usando (Hivepress). Al crearse un nuevo post de este tipo de CPT llamado request, se dispara un flujo en n8n que genera un "briefing" a partir de la información recogida en el request. Los datos de ese brifing generado se vuelcan de nuevo a la BD de wordpress mediante API en su propio CPT hecho con Jetengine. Ambos, request y briefing tienen una relación one-to-one.
La cuestión es que la plantilla single de ese request no se puede modificar así como así y como prefiero mantener separadas las partes nativas de las que yo estoy creando, en lugar de mostrar los datos de su brifing en la plantilla del request, lo quiero mostrar en una página separada a la que quiero acceder mediante enlace en la single del request, tanto para mostrar lo que ya tengo ahora como campos que iré añadiendo.
¿cuál es la manera más fácil de hacerlo? porque ahora el pavo me pregunta que si el enlace del boton para mostrar el brifing lo saca de un campo del CPT request, lo cual para mi es un lío ya que volcar datos a ese CPT nativo es una guano porque la API va como el pandero.
Acepto críticas y lo que haga falta, yo no soy desarrollador ni nada, solo me estoy centrando en las automatizaciones fuera de la página.
Si alguien se ofrece a hacerlo o tiene sugerencias estoy abierto a cambiar de desarrollador, de hecho a medio plazo lo voy a necesitar con frecuencia.
Gracias de antebrazo.
 

Adjuntos

Archivo oculto para usuarios no registrados
A ver si me explico porque llevo varios intentos tratando de explicárselo al que tengo contratado y cuanto más pregunta más lío tenemos ambos.

Tienes que estar registrado para ver este contenido


En la captura insertada está la single page que muestra un CPT nativo del plugin que estoy usando (Hivepress). Al crearse un nuevo post de este tipo de CPT llamado request, se dispara un flujo en n8n que genera un "briefing" a partir de la información recogida en el request. Los datos de ese brifing generado se vuelcan de nuevo a la BD de wordpress mediante API en su propio CPT hecho con Jetengine. Ambos, request y briefing tienen una relación one-to-one.
La cuestión es que la plantilla single de ese request no se puede modificar así como así y como prefiero mantener separadas las partes nativas de las que yo estoy creando, en lugar de mostrar los datos de su brifing en la plantilla del request, lo quiero mostrar en una página separada a la que quiero acceder mediante enlace en la single del request, tanto para mostrar lo que ya tengo ahora como campos que iré añadiendo.
¿cuál es la manera más fácil de hacerlo? porque ahora el pavo me pregunta que si el enlace del boton para mostrar el brifing lo saca de un campo del CPT request, lo cual para mi es un lío ya que volcar datos a ese CPT nativo es una guano porque la API va como el pandero.
Acepto críticas y lo que haga falta, yo no soy desarrollador ni nada, solo me estoy centrando en las automatizaciones fuera de la página.
Si alguien se ofrece a hacerlo o tiene sugerencias estoy abierto a cambiar de desarrollador, de hecho a medio plazo lo voy a necesitar con frecuencia.
Gracias de antebrazo.

Cuenta conmigo pero no voy a usar WordPress ni borracho. Nunca he usado gestores de contenido, que además meten código que es prescindible. Dime lo que necesitas por privado
 
Respuesta de Grok 4 fast, por si te sirve de ayuda:


¡Hola! Entiendo perfectamente la frustración: cuando no eres dev y tratas de explicar algo técnico a alguien que va por otro camino, se arma un lío. No te preocupes, voy a desglosar esto paso a paso de la forma más clara y sencilla posible, basándome en las mejores prácticas de WordPress, HivePress y JetEngine. No soy un dev contratado, pero como IA con conocimiento actualizado, te doy una solución práctica, escalable y que evita tocar lo nativo de HivePress (nada de volcar datos al CPT "request" vía API, que como dices, es un dolor de cabeza).Resumen del problema y mi enfoque
  • Lo que quieres: En la single page del CPT "request" (de HivePress), añadir un enlace/boton que lleve a la single page del CPT "briefing" (de JetEngine). Relación 1:1 entre ellos, generada por n8n.
  • Por qué el enfoque del contractor es un lío: Guardar el permalink del briefing en un campo meta del "request" requiere actualizar el CPT nativo de HivePress vía API cada vez, lo que es lento, propenso a errores y abusa el principio de "no tocar lo nativo".
  • Mi propuesta:
    • Usa la relación nativa de JetEngine para enlazar los CPTs (almacena el ID del "request" en el "briefing", no al revés).
    • En n8n, al crear el briefing, asigna la relación (fácil vía API de JetEngine).
    • En la single del "request", añade el enlace vía customización de template en HivePress (sin hooks complicados ni child themes). Usa un shortcode simple para generar el enlace dinámicamente, basado en la relación.
  • Ventajas: Mantiene todo separado, la API solo toca JetEngine (rápida), y es fácil de mantener/expandir. Si añades más campos al briefing, solo los editas en su template.
Esto se puede hacer en ~1-2 horas por un dev decente. Si necesitas uno nuevo, mira en Upwork o el foro de HivePress con keywords como "HivePress + JetEngine integration". Yo te ayudo con el código base.Paso 1: Configura la relación 1:1 en JetEngine (una vez, en el admin)JetEngine tiene un antiestéticature llamado "Relations" perfecto para esto. No necesitas código aquí.
  1. Ve a WordPress Admin > JetEngine > Relations > Add New.
  2. General Settings:
    • Name: Algo como "request_briefing" (para macros y tags).
    • Parent Object: Selecciona "request" (el CPT de HivePress).
    • Child Object: Selecciona "briefing" (tu CPT de JetEngine).
    • Relation Type: "One to one".
    • Activa "Register controls for parent object" (para ver/editar la relación desde la edición del request, si quieres).
    • Opcional: Activa "Allow to create new children from parent" si n8n no lo hace todo.
  3. Labels: Pon textos amigables, ej. "Briefing relacionado" para el box.
  4. Meta Fields: Opcional, añade campos extra si necesitas (ej. fecha de generación).
  5. Guarda. Esto crea una tabla/relación en la BD que JetEngine maneja automáticamente.
En n8n: Cuando crees el briefing vía API de WordPress (usando el endpoint de JetEngine), incluye el campo de relación: {"relations": {"request_briefing": {"parent_id": "{{request_id}}"}}}. La API de JetEngine es rápida y soporta esto nativo. Docs: .

Paso 2: Crea un shortcode simple para el enlace (en functions.php)Esto va en el functions.php de tu tema (o child theme, para no perderlo en updates). Es código PHP básico, ~10 líneas. El shortcode queryea el briefing relacionado y genera el enlace.
php

Código:
function enlace_briefing_relacionado($atts) {
global $post;
if (!$post || $post->post_type !== 'request') return ''; // Solo en single request

// Query el briefing relacionado vía meta (o usa JetEngine relation query si prefieres)
$briefing_id = get_post_meta($post->ID, '_related_briefing_id', true); // Asume que guardas el ID en meta del request (ver nota abajo)
if (!$briefing_id) return '';

$briefing = get_post($briefing_id);
if (!$briefing || $briefing->post_type !== 'briefing') return '';

$url = get_permalink($briefing->ID);
return '<a href="' . esc_url($url) . '" class="btn btn-primary" target="_blank">Ver Briefing Generado</a>'; // Añade clases CSS para estilo
}
add_shortcode('briefing_link', 'enlace_briefing_relacionado');
Notas:
  • Cómo guardar el ID: En n8n, después de crear el briefing, haz una llamada API extra para actualizar el meta del request: update_post_meta($request_id, '_related_briefing_id', $briefing_id). Es una sola llamada ligera al CPT nativo, pero solo el ID (no datos pesados), y solo post-creación. Si odias tocar el request, invierte: guarda el request_id en meta del briefing (_related_request_id), y queryea con get_posts(['post_type' => 'briefing', 'meta_key' => '_related_request_id', 'meta_value' => $post->ID, 'numberposts' => 1]) en el shortcode.
  • Mejor con Relations de JetEngine: Si usas la relación full, reemplaza la query con JetEngine's function: $related = Jet_Engine()->relations->get_related_posts('request_briefing', $post->ID); y toma $related[0]->ID. Más robusto, consulta docs de JetEngine para el exacto.
Paso 3: Añade el enlace en la single del "request" (customiza template de HivePress)HivePress permite customizar templates sin tocar core. Es como editar una página con Gutenberg.
  1. Ve a HivePress > Templates > Add New.
  2. Title: "Single Request Custom".
  3. Template: Selecciona "Single Listing" (o "Single Request" si es específico; HivePress trata requests como listings).
  4. Publica/Guarda. Esto overridea el default.
  5. Edita el template como una página normal:
    • Usa los bloques de HivePress (ej. "Listing Content" para lo existente).
    • Añade un Shortcode Block (de Gutenberg) donde quieras el botón, ej. después del contenido: [briefing_link].
    • O añade un Button Block y pon el shortcode en el enlace dinámico (o usa HTML personalizado).
  6. Guarda. ¡Listo! El enlace aparece solo si hay briefing relacionado.
Si usas Elementor para templates, integra el shortcode igual.Posibles mejoras/expansiones
  • Estilo: Añade CSS en Apariencia > Personalizar para el botón (ej. .btn-briefing { background: #007cba; }).
  • Condicional: Si no hay briefing, muestra "Generando..." o nada.
  • Más campos: En la single del briefing (customiza con JetEngine o Elementor), usa dynamic tags de JetEngine para mostrar campos del request relacionado (ej. [jet_rel:request_briefing:title]).
  • Seguridad: Asegura que solo usuarios logueados vean el botón, con if (!is_user_logged_in()) return ''; en el shortcode.
Críticas constructivas (como pediste)
  • Estás en lo correcto: Evita tocar CPTs nativos; es buena práctica para updates de plugins.
  • n8n + API es genial para automatizaciones, pero prueba con webhooks de WordPress para triggers más directos (menos latencia).
  • Si esto crece, considera un plugin custom o extension de HivePress (tienen docs para eso). Para dev a medio plazo, busca alguien con experiencia en Crocoblock (JetEngine) + HivePress; hay freelancers en su comunidad.
Si esto no encaja o necesitas tweaks (ej. código ajustado), dame más detalles (captura del error o setup exacto). ¿Quieres que busque un dev recomendado o simule el código en un entorno? ¡Dime!
Muchas gracias, había usado grok pero solo para generar prompts, comparado con las respuestas e iteraciones que he hecho a gpt y claude el resultado es mucho más viable a bote pronto. Mis dieses.
 
Cuenta conmigo pero no voy a usar WordPress ni borracho. Nunca he usado gestores de contenido, que además meten código que es prescindible. Dime lo que necesitas por privado
Mi idea si funciona la base en cuanto tire un poco es pasarlo a nativo o como cño se diga. Para validar la idea encontré el plugin casi clavado a lo que necesitaba y me ha valido para pillar la estructura y desarrollar el concepto. Ahora al menos si tengo que explicar la arquitectura tengo los cigot pelados porque lo he nacido yo casi todo. Cuando tenga un rato te cuento por privado por si te interesa.
Gracias
 

Estadísticas del foro

Temas
2.049.292
Mensajes
58.144.174
Miembros
190.829
Último miembro
Chinches

El blog de burbuja.info

Volver