ODSLocal News & Articles
PHP ≥ 8.1
WordPress ≥ 6.0
Requiere ODSLocal Municipios
1. Qué hace
Extensión de ODSLocal Municipios que permite a los colaboradores submeter noticias, artículos, casos de éxito, eventos y convocatorias vinculados a los ODS y a los territorios de la plataforma, con flujo de aprobación, SEO rico e integración con el hub de colaboradores.
2. Instalación
- Requiere ODSLocal Municipios activo.
- Opcional: ODSLocal Contributor Profiles (para integración con el hub y perfil público).
- Copia
odslocal-news/awp-content/plugins/. - Actívalo. En la activación se crean:
- Páginas Enviar noticia y Mis noticias.
- Términos
ODS1..ODS17,R1..R4y los tipos de noticia predefinidos. - Capabilities añadidas a los roles existentes.
3. CPT y taxonomías
3.1 Custom Post Type
news_article — visible en el admin como Noticias.
3.2 Taxonomías
| Taxonomía | Términos |
|---|---|
ods_topic |
ODS1..ODS17, R1..R4. Corresponden a los grupos del catálogo. |
news_type |
Noticia, artículo, caso de éxito, evento, convocatoria (editables desde admin). |
3.3 Territorios asociados
Relación many-to-many con odslocal_territories guardada en post_meta. Máximo 10 territorios por artículo (configurable).
4. Shortcodes
| Shortcode | Atributos | Uso |
|---|---|---|
|
limit, ods, territory, type, columns, pagination, orderby |
Grid paginado de noticias publicadas. |
|
limit, columns |
Noticias destacadas. |
|
— | Formulario de submisión (requiere login + cap). |
|
— | Lista de submisiones del usuario logueado. |
|
ods, territory, exclude, limit |
Artículos relacionados, ideal en single. |
Ejemplos
<!-- Últimas 8 noticias de ODS3 + ODS11 en grid de 4 columnas -->
Aún no hay noticias publicadas.
<!-- Noticias del municipio de Vigo (territory_id=123) -->
Aún no hay noticias publicadas.
<!-- Relacionadas en la página de un artículo -->
5. Flujo de aprobación
- Draft: el colaborador rellena el formulario en
/noticias/enviar/. - Pending: pulsa Enviar a revisión → se dispara email a revisores.
- Publish: el revisor aprueba en Municipios → Revisión de noticias → se publica, se notifica al autor, se emite SEO.
- ods_rejected: rechazo con motivo, visible sólo al autor, editable y re-submetible.
6. Enviar un artículo (colaborador)
- Entrar en
/noticias/enviar/(o pestaña Publicar del Hub si está instalado Contributor Profiles). - Rellenar: título (mín. 10 chars), contenido (mín. 200 chars), excerpt, imagen destacada.
- Seleccionar tipo (noticia, artículo, caso de éxito, evento, convocatoria).
- Marcar los ODS relevantes (multi-check).
- Buscar y añadir hasta 10 territorios (autocomplete reusa el endpoint de ODSLocal Municipios).
- Guardar como borrador o enviar a revisión.
Por defecto cada colaborador puede tener 3 artículos en
pending simultáneamente. Evita spam y concentra la revisión. Filtrable vía ODSLocal_News_Ajax::MAX_PENDING_PER_USER.
7. Revisar y aprobar
Usuarios con capability moderate_news (admin, ods_platform_manager) entran en Municipios → Revisión de noticias:
- Lista de pendientes con preview de título, autor, ODS, territorios.
- Botones por fila: Aprobar, Rechazar con motivo, Ver borrador.
- Tras aprobar → se publica (
publish) y se emite todo el SEO. - Tras rechazar → email al autor con el motivo; el artículo queda en
ods_rejectedy editable.
Trash con auditoría
Cualquier acción wp_trash_post sobre un news_article se registra en odslocal_audit como news_trash.
8. REST API
Namespace público /wp-json/ods-news/v1:
| Ruta | Descripción |
|---|---|
GET /news?ods=ods3&territory=42&page=1&per_page=10 |
Listar noticias publicadas con filtros. |
GET /news/:id |
Detalle de un artículo. |
GET /news-by-territory/:code_ine?limit=5 |
Noticias en un municipio. |
9. SEO nativo
Cada artículo publicado emite automáticamente:
<meta description>desde el excerpt (o auto-generado).- Canonical URL.
- Open Graph completo:
og:type=article, image, locale, site_name. - Twitter Cards
summary_large_image. article:published_time,modified_time,author,section.news_keywordsykeywordsdesde tags.- JSON-LD NewsArticle con author, publisher, image, keywords, articleSection y
contentLocation(coordenadas de los territorios asociados).
Desactivar nuestro SEO
Si ya usas Yoast o RankMath:
add_filter('ods_news_disable_seo', '__return_true');
10. Integraciones
| Plugin | Qué aporta |
|---|---|
| ODSLocal Municipios | Autocompletado de territorios reutilizando odslocal_search_territory. |
| ODSLocal Contributor Profiles | Pestaña Publicar en el Hub; el perfil público muestra los últimos 4 artículos del colaborador. |
| Carta / certificado | Nuevo placeholder {num_articulos} (inyectado vía odslocal_profiles_letter_vars). |
| ODSLocal Audit | Acciones news_submit, news_publish, news_reject, news_trash. |
11. Seguridad
- Todos los AJAX validan nonce + auth + cap + límite 500 chars/unidad.
- Max. 3 pendientes por colaborador (
MAX_PENDING_PER_USER). - Contenido sanitizado con
wp_kses_post; sin iframes salvo YouTube/Vimeo (por filtro). - Subida de imagen destacada valida MIME y tamaño (<2 MB).
- Enlaces externos emiten
rel="nofollow noopener"automáticamente. - Attachments adoptados (re-asignar
post_author) al aprobar → el colaborador sigue siendo «propietario» de la imagen.
12. Traducciones
- Text domain:
odslocal-news. Idioma de origen: español. languages/odslocal-news.pot— 238 strings.- Galego (
gl_ES) 100 % traducido. - Todos los strings JS vía
wp_localize_script.
# Añadir catalán
cp languages/odslocal-news.pot languages/odslocal-news-ca.po
# traducir msgstr en el .po
wp i18n make-mo languages/odslocal-news-ca.po languages/
13. Solución de problemas
No puedo enviar artículo
- ¿Tienes capability
ods_submit_news? Se añade aods_researcher,ods_municipal_manager,ods_citizen_councilyadministrator. - ¿Tienes 3+ artículos en
pending? Espera a que te los revisen.
El autocompletado de territorios no devuelve nada
- Mínimo 3 caracteres.
- Verifica que el plugin ODSLocal Municipios está activo y tiene territorios poblados.
Título no traducido en admin
Verifica que el locale de WP coincide con un .mo en languages/. Ajustes → General → Idioma del sitio.
Emails de decisión no llegan
Revisa spam y que wp_mail funciona. Instala WP Mail SMTP si el host bloquea saliente.
Schema.org no valida
Comprueba en validator.schema.org y revisa que la imagen destacada existe y tiene dimensiones válidas.