Cuando creas una campaña en Charitable, WordPress le da automáticamente su propia URL pública en /campaigns/[campaign-slug]/. Eso sucede porque Charitable registra las campañas como un tipo de publicación personalizada pública, que es lo que permite que los motores de búsqueda y los enlaces directos lleguen a la página propia de una campaña.
Eso funciona bien si quieres que cada campaña tenga su propia página de destino. Pero si solo quieres que los donantes lleguen a tu campaña a través de una página específica de tu sitio, por ejemplo, una página /donate/ única donde hayas incrustado la campaña con el shortcode o bloque, la URL creada automáticamente se convierte en un segundo punto de entrada no deseado.
Esta página cubre dos formas de eliminar ese punto de entrada. Ambas opciones dejan tu incrustación de campaña funcionando exactamente como antes, porque la incrustación lee el registro de la campaña directamente de la base de datos. No depende de que la URL de campaña única sea accesible públicamente.
Cuándo usar esto
- Incrustas tu campaña en una página de donación dedicada y quieres que ese sea el único lugar al que lleguen los donantes.
- Una URL de campaña aparece en los resultados de búsqueda o se comparte, y quieres enviar a esos visitantes a tu página de donación en su lugar.
- Solo ejecutas una campaña a la vez y la URL de campaña única es redundante.
Por qué existe la URL en primer lugar
Charitable registra campaign como un tipo de publicación personalizada de WordPress con public => true y publicly_queryable => true. Esas dos banderas son las que le dicen a WordPress que genere una URL para cada campaña y la sirva a través de la plantilla de publicación única.
El patrón de URL es [tu-permalink-front]/campaigns/[campaign-slug]/. Si la estructura de permalink de tu WordPress tiene un prefijo, por ejemplo /noticias/%postname%/, la URL de la campaña se convierte en /noticias/campaigns/[campaign-slug]/. Ese es el comportamiento estándar de WordPress, no una configuración de Charitable.
No hay un interruptor incorporado en la configuración de Charitable para deshabilitar la URL de campaña única. Los dos fragmentos a continuación son las formas admitidas para desactivarla.
Opción 1: Redirigir las URL de campaña únicas a tu página de donación (recomendado)
Esta es la opción a elegir si existe alguna posibilidad de que una URL de campaña ya haya sido compartida, indexada o enlazada desde otro lugar. Los visitantes que lleguen a la URL de la campaña serán enviados a tu página de donación con una redirección 301, que los motores de búsqueda respetan con el tiempo.
Añade este fragmento usando un plugin de fragmentos de código (como WPCode) o el archivo functions.php de tu tema hijo:
add_action( 'template_redirect', function() {
if ( is_singular( 'campaign' ) ) {
wp_safe_redirect( home_url( '/donate/' ), 301 );
exit;
}
} );
Cambia /donate/ por la URL a la que quieras enviar a los visitantes. Después de guardar el fragmento, abre la URL de tu campaña en una ventana privada del navegador para confirmar que ahora aterriza en tu página de donación.
Opción 2: Hacer que el tipo de publicación de campaña no sea público
Esta opción desactiva la URL de campaña única por completo. Cualquiera que visite /campaigns/[slug]/ verá un 404 estándar de WordPress. Usa esto si prefieres que la URL no exista en absoluto en lugar de que se redirija.
Añade este fragmento usando un plugin de fragmentos de código o el archivo functions.php de tu tema hijo:
add_filter( 'charitable_campaign_post_type', function( $args ) {
$args['public'] = false;
$args['publicly_queryable'] = false;
$args['exclude_from_search'] = true;
return $args;
} );
Después de añadir el fragmento, actualiza tus permalinks: ve a Ajustes > Permalinks en tu administrador de WordPress y haz clic en Guardar cambios. No necesitas cambiar nada en esa pantalla. El acto de guardar regenera las reglas de reescritura para que la URL de la campaña deje de resolverse.
¿Qué pasa con la incrustación de la campaña?
Ambas opciones dejan la incrustación de la campaña intacta:
- El shortcode
[charitable_campaign]sigue renderizándose en tu página de donación. - El bloque de campaña de Charitable sigue renderizándose en tu página de donación.
- El título, la historia, el objetivo y el formulario de donación de la campaña siguen cargándose.
- Las nuevas donaciones todavía se adjuntan a la campaña y actualizan su progreso.
La incrustación lee la publicación de la campaña directamente por ID, por lo que no importa si la URL de la campaña no es pública, se redirige o devuelve un 404.
¿Qué opción deberías elegir?
| Usa la Opción 1 (redirección) si… | Usa la Opción 2 (no pública) si… |
|---|---|
| Una URL de campaña ya podría estar compartida, indexada o enlazada desde algún lugar. | La URL de la campaña nunca se ha compartido y no aparece en los resultados de búsqueda. |
| Quieres una transición fluida para cualquier visitante que encuentre la URL antigua. | Preferirías que la URL no se resolviera en absoluto. |
| Quieres que los motores de búsqueda sigan el 301 y eliminen la URL antigua con el tiempo. | No te importa conservar la presencia de la URL en los motores de búsqueda. |
En la mayoría de los casos, la Opción 1 es la elección más segura porque maneja tanto a los nuevos visitantes como a cualquiera que ya tenga la URL.
Preguntas frecuentes
¿Afectará esto a cómo se rastrean las donaciones?
No. Las donaciones se adjuntan al registro de la campaña en sí, no a la URL. Ya sea que alguien done a través de tu formulario incrustado en /donate/ o (antes de la redirección) la página de campaña creada automáticamente, la donación llega a la misma campaña y cuenta para el mismo objetivo.
¿Esto elimina la campaña del administrador de WordPress?
No. La campaña todavía aparece en Charitable > Campañas en tu administrador. Puedes editarla, archivarla, ver sus donaciones, etc. Solo cambia la URL pública.
¿Puedo hacer esto para una campaña pero no para otras?
Sí: limita la redirección comprobando el ID específico de la campaña:
add_action( 'template_redirect', function() {
if ( is_singular( 'campaign' ) && get_queried_object_id() === 123 ) {
wp_safe_redirect( home_url( '/donate/' ), 301 );
exit;
}
} );
Reemplaza 123 con el ID de la campaña que deseas redirigir. Otras campañas continuarán usando sus URL normales. (La Opción 2 es todo o nada porque cambia el registro del tipo de publicación).
¿Qué pasa con la página de archivo de campañas?
Charitable ya tiene desactivado el archivo de campañas (has_archive => false), por lo que visitar /campaigns/ por sí solo no renderiza un archivo de Charitable. No necesitas hacer nada adicional para desactivarlo.
Referencia del desarrollador
El resto de esta página es para desarrolladores que desean un mayor control sobre el registro del tipo de publicación de campaña.
El filtro
charitable_campaign_post_type se ejecuta en init (prioridad 5) justo antes de que se llame a register_post_type(). Recibe la matriz completa de argumentos utilizada para registrar el tipo de publicación campaign, por lo que puede cambiar cualquiera de estos:
| Argumento | Predeterminado | Efecto |
|---|---|---|
público | verdadero | Interruptor principal para la visibilidad en el front-end y la interfaz de administración. |
publicamente_consultable | verdadero | Si /campaigns/[slug]/ se resuelve en una sola plantilla. |
excluir_de_la_busqueda | false | Si las búsquedas /?s= incluyen campañas. |
tiene_archivo | false | El archivo de campañas ya está desactivado por defecto. |
reescribir | array( 'slug' => 'campanas', 'with_front' => true ) | El slug de la URL para campañas individuales. |
mostrar_en_menus_de_navegacion | verdadero | Si las campañas se pueden agregar a los menús de navegación desde Apariencia > Menús. |
Cambiar el slug de la URL en lugar de deshabilitarlo
Si prefiere mantener la página de campaña individual pero cambiar su prefijo de URL, filtre el slug de reescritura. Por ejemplo, para cambiar /campaigns/[slug]/ a /fundraise/[slug]/:
add_filter( 'charitable_campaign_post_type', function( $args ) {
$args['rewrite']['slug'] = 'fundraise';
return $args;
} );
Guarde los permalinks después del cambio (Ajustes > Permalinks > Guardar cambios).
Por qué with_front importa
El valor predeterminado 'with_front' => true significa que WordPress antepone el prefijo de permalink a la URL de la campaña. Si la estructura de permalink de su WordPress es /news/%postname%/, sus URL de campaña serán /news/campaigns/[slug]/. Establezca 'with_front' => false para ignorar el prefijo de permalink:
add_filter( 'charitable_campaign_post_type', function( $args ) {
$args['rewrite']['with_front'] = false;
return $args;
} );
Guarde los permalinks después del cambio.
Cómo sigue funcionando la incrustación
El shortcode [charitable_campaign] y el bloque de campaña se resuelven en consultas Charitable_Campaign que cargan la publicación por ID. Esas consultas utilizan get_post() y búsquedas directas de metadatos, que son independientes de las marcas public y publicly_queryable. Las marcas solo controlan si el controlador del front-end de WordPress dirigirá una solicitud a la plantilla de campaña individual. Deshabilitarlas no impide que el código PHP lea la publicación.
Referencia de gancho
| Gancho | Tipo | Úselo para |
|---|---|---|
tipo_de_publicacion_campana_caritativa | Filtro | Modificar los argumentos pasados a register_post_type() para las campañas. Se ejecuta en la prioridad 5 de init. |
plantilla_redireccionar | Acción | Dispare su redirección después de que WordPress haya analizado la solicitud y elegido una plantilla, pero antes de que se cargue la plantilla. Gancho estándar de WordPress. |
es_singular( 'campana' ) | Condicional | Verdadero cuando la solicitud actual es una URL de campaña individual. Úsalo dentro de template_redirect para delimitar la redirección. |





