Mi cuenta

ODSLocal News & Articles

Noticias, artículos, casos de éxito y convocatorias vinculados a ODS y territorios
Versión 1.0.5
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

  1. Requiere ODSLocal Municipios activo.
  2. Opcional: ODSLocal Contributor Profiles (para integración con el hub y perfil público).
  3. Copia odslocal-news/ a wp-content/plugins/.
  4. Actívalo. En la activación se crean:
    • Páginas Enviar noticia y Mis noticias.
    • Términos ODS1..ODS17, R1..R4 y 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
Aún no hay noticias publicadas.
limit, ods, territory, type, columns, pagination, orderby Grid paginado de noticias publicadas.
Aún no hay noticias publicadas.
limit, columns Noticias destacadas.
Debes iniciar sesión para enviar una noticia.
— Formulario de submisión (requiere login + cap).
Debes iniciar sesión para ver tus noticias.
— 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

  1. Draft: el colaborador rellena el formulario en /noticias/enviar/.
  2. Pending: pulsa Enviar a revisión → se dispara email a revisores.
  3. Publish: el revisor aprueba en Municipios → Revisión de noticias → se publica, se notifica al autor, se emite SEO.
  4. ods_rejected: rechazo con motivo, visible sólo al autor, editable y re-submetible.

6. Enviar un artículo (colaborador)

  1. Entrar en /noticias/enviar/ (o pestaña Publicar del Hub si está instalado Contributor Profiles).
  2. Rellenar: título (mín. 10 chars), contenido (mín. 200 chars), excerpt, imagen destacada.
  3. Seleccionar tipo (noticia, artículo, caso de éxito, evento, convocatoria).
  4. Marcar los ODS relevantes (multi-check).
  5. Buscar y añadir hasta 10 territorios (autocomplete reusa el endpoint de ODSLocal Municipios).
  6. Guardar como borrador o enviar a revisión.
ℹ Máx. pending
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_rejected y 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_keywords y keywords desde 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 a ods_researcher, ods_municipal_manager, ods_citizen_council y administrator.
  • ¿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.

Saltar al contenido principal