{"id":297581,"date":"2026-05-12T18:18:33","date_gmt":"2026-05-12T18:18:33","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/constructive-news\/"},"modified":"2026-05-30T08:42:30","modified_gmt":"2026-05-30T08:42:30","slug":"constructive-news","status":"publish","type":"plugin","link":"https:\/\/su.wordpress.org\/plugins\/constructive-news\/","author":23468232,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Constructive News","header_author":"Jonathan Widder","header_description":"The plugins display constructive \/ solutions-focused news stories from a variety of trustworthy sources in Gutenberg blocks using the Squirrel News content service.","assets_banners_color":"","last_updated":"2026-05-30 08:42:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/constructive-news.org\/","header_author_uri":"https:\/\/squirrel-news.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":140,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"squirrelnews","date":"2026-05-12 18:23:45"},"1.0.1":{"tag":"1.0.1","author":"squirrelnews","date":"2026-05-30 08:42:30"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3532546,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3532546,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"pnp\/list-block":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pnp\/list-block","title":"Constructive News List","category":"constructive-news","icon":"list-view","example":{"attributes":{"limit":3,"imageWidth":60,"imageHeight":60,"titleFontSize":14,"titleTransform":"uppercase"}},"description":"A compact constructive news list with images on the left.","textdomain":"constructive-news","attributes":{"isEditor":{"type":"boolean","default":false},"limit":{"type":"number","default":3},"articlePositionStart":{"type":"number","default":1},"issuePosition":{"type":"number","default":1},"language":{"type":"string"},"maxWidth":{"type":"number","default":800},"elementGap":{"type":"number","default":20},"showImage":{"type":"boolean","default":true},"imageWidth":{"type":"number","default":80},"imageHeight":{"type":"number","default":80},"imageTextGap":{"type":"number","default":15},"primaryColor":{"type":"string","default":"#1a1a1a"},"titleFontSize":{"type":"number","default":14},"titleFontWeight":{"type":"boolean","default":true},"titleTransform":{"type":"string","default":"uppercase"},"titleColor":{"type":"string","default":"#1a1a1a"},"titleAlignment":{"type":"string","default":"left"},"titleItalic":{"type":"boolean","default":false},"showTeaser":{"type":"boolean","default":false},"teaserFontSize":{"type":"number","default":13},"teaserColor":{"type":"string","default":"#555555"},"teaserBold":{"type":"boolean","default":false},"teaserItalic":{"type":"boolean","default":false},"teaserAlignment":{"type":"string","default":"left"},"teaserCharacterCount":{"type":"number","default":100},"showSource":{"type":"boolean","default":true},"sourcePosition":{"type":"string","default":"above"},"sourceFontSize":{"type":"number","default":11},"sourceColor":{"type":"string","default":"#888888"},"sourceBold":{"type":"boolean","default":true},"sourceItalic":{"type":"boolean","default":false},"sourceAlignment":{"type":"string","default":"left"},"autoRotate":{"type":"boolean","default":false},"randomizeOnRefresh":{"type":"boolean","default":false},"rotateDuration":{"type":"number","default":5},"brandingAlignment":{"type":"string","default":"left"},"brandingEnableLink":{"type":"boolean","default":true},"showDonate":{"type":"boolean","default":true},"showBlockTitle":{"type":"boolean","default":true},"blockTitle":{"type":"string"},"blockTitleFontSize":{"type":"number","default":24},"blockTitleColor":{"type":"string","default":"#1a1a1a"},"blockTitleBold":{"type":"boolean","default":true},"blockTitleItalic":{"type":"boolean","default":false},"blockTitleAlignment":{"type":"string","default":"left"}},"editorScript":"file:.\/index.js","style":"file:.\/index.css","viewScript":"file:.\/view.js"},"pnp\/grid-block":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pnp\/grid-block","title":"Constructive News Grid","description":"Magazine-style grid cards for constructive news stories.","category":"constructive-news","icon":"grid-view","example":{"attributes":{"columns":2,"limit":4,"imagePercent":80}},"attributes":{"isEditor":{"type":"boolean","default":false},"limit":{"type":"number","default":6},"articlePositionStart":{"type":"number","default":1},"issuePosition":{"type":"number","default":1},"language":{"type":"string"},"columns":{"type":"number","default":3},"maxWidth":{"type":"number","default":700},"elementGap":{"type":"number","default":30},"showImage":{"type":"boolean","default":true},"imagePercent":{"type":"number","default":60},"imageTextGap":{"type":"number","default":15},"cardBgColor":{"type":"string","default":"#f3eee4"},"primaryColor":{"type":"string","default":"#22c55e"},"titleFontSize":{"type":"number","default":16},"titleFontWeight":{"type":"boolean","default":true},"titleTransform":{"type":"string","default":"none"},"titleColor":{"type":"string","default":"#1a1a1a"},"titleItalic":{"type":"boolean","default":false},"titleAlignment":{"type":"string","default":"center"},"showTeaser":{"type":"boolean","default":false},"teaserFontSize":{"type":"number","default":14},"teaserCharacterCount":{"type":"number","default":100},"teaserColor":{"type":"string","default":"#555555"},"teaserBold":{"type":"boolean","default":false},"teaserItalic":{"type":"boolean","default":false},"teaserAlignment":{"type":"string","default":"center"},"showSource":{"type":"boolean","default":true},"sourcePosition":{"type":"string","default":"above"},"sourceFontSize":{"type":"number","default":11},"sourceColor":{"type":"string","default":"#888888"},"sourceBold":{"type":"boolean","default":true},"sourceItalic":{"type":"boolean","default":false},"sourceAlignment":{"type":"string","default":"center"},"autoRotate":{"type":"boolean","default":false},"randomizeOnRefresh":{"type":"boolean","default":false},"rotateDuration":{"type":"number","default":5},"brandingAlignment":{"type":"string","default":"center"},"brandingEnableLink":{"type":"boolean","default":true},"showDonate":{"type":"boolean","default":true},"showBlockTitle":{"type":"boolean","default":true},"blockTitle":{"type":"string"},"blockTitleAlignment":{"type":"string","default":"center"},"blockTitleFontSize":{"type":"number","default":32},"blockTitleColor":{"type":"string","default":"#1a1a1a"},"blockTitleBold":{"type":"boolean","default":true},"blockTitleItalic":{"type":"boolean","default":false}},"editorScript":"file:.\/index.js","style":"file:.\/index.css","viewScript":"file:.\/view.js"},"pnp\/card-block":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pnp\/card-block","title":"Constructive News Card","category":"constructive-news","icon":"cover-image","example":{"attributes":{"limit":1,"imageWidth":300,"imageHeight":200,"cardBgColor":"#f3eee4"}},"description":"Magazine-style cards for constructive news with images on top and equal-height text boxes.","textdomain":"constructive-news","attributes":{"isEditor":{"type":"boolean","default":false},"limit":{"type":"number","default":3},"articlePositionStart":{"type":"number","default":1},"issuePosition":{"type":"number","default":1},"language":{"type":"string"},"maxWidth":{"type":"number","default":1200},"elementGap":{"type":"number","default":20},"showImage":{"type":"boolean","default":true},"imageWidth":{"type":"number","default":300},"imageHeight":{"type":"number","default":200},"imageTextGap":{"type":"number","default":0},"cardBgColor":{"type":"string","default":"#f3eee4"},"primaryColor":{"type":"string","default":"#22c55e"},"titleColor":{"type":"string","default":"#1a1a1a"},"titleFontSize":{"type":"number","default":18},"titleFontWeight":{"type":"boolean","default":true},"titleItalic":{"type":"boolean","default":false},"titleTransform":{"type":"string","default":"none"},"titleAlignment":{"type":"string","default":"left"},"showTeaser":{"type":"boolean","default":false},"teaserFontSize":{"type":"number","default":14},"teaserCharacterCount":{"type":"number","default":100},"teaserColor":{"type":"string","default":"#555555"},"teaserBold":{"type":"boolean","default":false},"teaserItalic":{"type":"boolean","default":false},"teaserAlignment":{"type":"string","default":"left"},"showSource":{"type":"boolean","default":true},"sourcePosition":{"type":"string","default":"above"},"sourceFontSize":{"type":"number","default":11},"sourceColor":{"type":"string","default":"#888888"},"sourceBold":{"type":"boolean","default":true},"sourceItalic":{"type":"boolean","default":false},"sourceAlignment":{"type":"string","default":"left"},"autoRotate":{"type":"boolean","default":false},"randomizeOnRefresh":{"type":"boolean","default":false},"rotateDuration":{"type":"number","default":5},"brandingAlignment":{"type":"string","default":"center"},"brandingEnableLink":{"type":"boolean","default":true},"showDonate":{"type":"boolean","default":true},"showBlockTitle":{"type":"boolean","default":true},"blockTitle":{"type":"string"},"blockTitleAlignment":{"type":"string","default":"center"},"blockTitleFontSize":{"type":"number","default":32},"blockTitleColor":{"type":"string","default":"#1a1a1a"},"blockTitleBold":{"type":"boolean","default":true},"blockTitleItalic":{"type":"boolean","default":false}},"editorScript":"file:.\/index.js","style":"file:.\/index.css","viewScript":"file:.\/view.js"}},"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[4121,529,148076,1248,1751],"plugin_category":[],"plugin_contributors":[262720],"plugin_business_model":[],"class_list":["post-297581","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-content","plugin_tags-gutenberg","plugin_tags-news","plugin_tags-positive","plugin_contributors-squirrelnews","plugin_committers-squirrelnews"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/constructive-news\/assets\/icon-128x128.png?rev=3532546","icon_2x":"https:\/\/ps.w.org\/constructive-news\/assets\/icon-256x256.png?rev=3532546","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin helps you have more content on your website by providing blocks with positive, solutions-focused news headlines and teasers. All articles are thoroughly handpicked by the editorial team of Squirrel News. Squirrel News is a curated solutions-focused news service, run by the German nonprofit Constructive News e.V.<\/p>\n\n<p>The plugin provides three different blocks showing teasers of constructive news stories from a variety of different media sources, including links to the original articles on the websites of the corresponding media.<\/p>\n\n<p>For this purpose they can choose among three Gutenberg blocks:<\/p>\n\n<ul>\n<li>Constructive News Card<\/li>\n<li>Constructive News Grid<\/li>\n<li>Constructive News List<\/li>\n<\/ul>\n\n<p>The plugin is published by Jonathan Widder for Squirrel News \/ Constructive News e.V. and developed by Anouar Ben Hamza.<\/p>\n\n<h3>Getting started<\/h3>\n\n<p>To get started, activate the plugin, choose the language on the <strong>Constructive News<\/strong> settings page, then insert one of the Constructive News blocks into a post or page.<\/p>\n\n<p><strong>Language note:<\/strong> English and German content are fetched from completely different source pools and countries, so switching the language will change the geographic focus and sources of the articles.<\/p>\n\n<h3>Use of external service<\/h3>\n\n<p>This plugin is a <strong>service-based plugin<\/strong>.\nIt connects to an external content service to fetch article data:<\/p>\n\n<ul>\n<li>Endpoint: <code>https:\/\/getarticlesforlastissues-mdlzfg63qq-uc.a.run.app<\/code><\/li>\n<li>Query parameters sent by the plugin: <code>lang<\/code> and <code>limit<\/code>, plus editor-only preview\/cache parameters when blocks are previewed in wp-admin.<\/li>\n<\/ul>\n\n<p>Without the external service response, the plugin cannot fetch fresh article content and does not work.<\/p>\n\n<h3>Service and Privacy Disclosure<\/h3>\n\n<p>This plugin performs outbound requests to the Squirrel News content service to retrieve article data.<\/p>\n\n<p>The service is operated by Squirrel News for Constructive News e.V. and is used to deliver the curated article data shown by the plugin blocks.<\/p>\n\n<p>The plugin sends requests to the external service whenever a Constructive News block is rendered and needs article data, including in the block editor preview and on the frontend.<\/p>\n\n<p>Data sent to the service:<\/p>\n\n<ul>\n<li>The selected content language (<code>en<\/code> or <code>de<\/code>)<\/li>\n<li>The requested article limit<\/li>\n<li>Technical request data sent by normal HTTP requests, such as the visitor IP address, user agent, and request timing<\/li>\n<\/ul>\n\n<p>Why this data is sent:<\/p>\n\n<ul>\n<li>To request the correct article feed<\/li>\n<li>To return the requested number of curated articles<\/li>\n<li>To allow the remote service to respond and operate securely<\/li>\n<\/ul>\n\n<p>Service links:<\/p>\n\n<ul>\n<li>Privacy Policy: <code>https:\/\/squirrel-news.net\/privacy-policy\/<\/code><\/li>\n<li>Legal notice \/ service terms information: <code>https:\/\/squirrel-news.net\/imprint\/<\/code><\/li>\n<\/ul>\n\n<p>Plugin settings data stored locally in WordPress:<\/p>\n\n<ul>\n<li>Selected language (<code>en<\/code> or <code>de<\/code>)<\/li>\n<li>Cached API payloads for performance\/fallback<\/li>\n<\/ul>\n\n<p>External links rendered on the frontend can point to:<\/p>\n\n<ul>\n<li>Squirrel News website<\/li>\n<li>Squirrel News support page<\/li>\n<li>Third-party publisher article URLs<\/li>\n<\/ul>\n\n<p>Site owners should review and publish their own privacy disclosures as needed for their jurisdiction and site policy.<\/p>\n\n<h3>Development<\/h3>\n\n<p>The distributed plugin includes the original, human-readable source files used to build the JavaScript and CSS assets.<\/p>\n\n<p>Included source and build files:<\/p>\n\n<ul>\n<li><code>src\/<\/code> contains the original block editor and frontend source code<\/li>\n<li><code>build\/<\/code> contains the compiled production assets used by WordPress<\/li>\n<li><code>package.json<\/code> contains the build commands and dependencies<\/li>\n<\/ul>\n\n<p>Build tools:<\/p>\n\n<ul>\n<li><code>npm<\/code><\/li>\n<li><code>@wordpress\/scripts<\/code><\/li>\n<\/ul>\n\n<p>To rebuild the generated assets:<\/p>\n\n<ol>\n<li>Run <code>npm install<\/code><\/li>\n<li>Run <code>npm run build<\/code><\/li>\n<\/ol>\n\n<h3>Developer Hooks<\/h3>\n\n<p>The plugin includes filters for customization without editing core files.<\/p>\n\n<p>API filters:\n* <code>constructnews_api_lang<\/code>\n* <code>constructnews_api_limit<\/code>\n* <code>constructnews_api_payload<\/code>\n* <code>constructnews_api_base_url<\/code>\n* <code>constructnews_api_request_args<\/code>\n* <code>constructnews_api_articles<\/code><\/p>\n\n<p>Card block filters:\n* <code>constructnews_card_block_lang<\/code>\n* <code>constructnews_card_labels<\/code>\n* <code>constructnews_card_behavior_flags<\/code>\n* <code>constructnews_card_styles<\/code>\n* <code>constructnews_card_articles_prepared<\/code>\n* <code>constructnews_card_display_articles<\/code>\n* <code>constructnews_card_plan<\/code><\/p>\n\n<p>Grid block filters:\n* <code>constructnews_grid_block_lang<\/code>\n* <code>constructnews_grid_labels<\/code>\n* <code>constructnews_grid_behavior_flags<\/code>\n* <code>constructnews_grid_styles<\/code>\n* <code>constructnews_grid_articles_prepared<\/code>\n* <code>constructnews_grid_display_articles<\/code>\n* <code>constructnews_grid_plan<\/code><\/p>\n\n<p>List block filters:\n* <code>constructnews_list_block_lang<\/code>\n* <code>constructnews_list_labels<\/code>\n* <code>constructnews_list_behavior_flags<\/code>\n* <code>constructnews_list_styles<\/code>\n* <code>constructnews_list_articles_prepared<\/code>\n* <code>constructnews_list_display_articles<\/code>\n* <code>constructnews_list_plan<\/code><\/p>\n\n<p>Example:<\/p>\n\n<pre><code>add_filter( 'constructnews_api_limit', function( $limit ) { return 10; } );\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via the WordPress admin.<\/li>\n<li>Activate <strong>Constructive News<\/strong>.<\/li>\n<li>Go to <strong>Constructive News<\/strong> in wp-admin and select language.<\/li>\n<li>Insert one of the Constructive News blocks in the block editor.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20an%20external%20service%3F\"><h3>Does this plugin require an external service?<\/h3><\/dt>\n<dd><p>Yes. Fresh content is fetched from the Squirrel News content API service every 2-3 days.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20api%20keys%3F\"><h3>Does the plugin work without API keys?<\/h3><\/dt>\n<dd><p>Yes. No API key is required in the current version.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20the%20service%3F\"><h3>What data is sent to the service?<\/h3><\/dt>\n<dd><p>The plugin sends language and limit values as query parameters. Standard HTTP request metadata is also transmitted by normal web requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved article ordering by article position.<\/li>\n<li>Added issue-aware article selection internally to prevent duplicate article groups across blocks.<\/li>\n<li>Moved article selection controls into the Content tab.<\/li>\n<li>Enabled auto-rotation controls for all users.<\/li>\n<li>Updated German editor translations and clearer animation wording.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Display constructive news in Gutenberg blocks using the Squirrel News content service.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297581"}],"author":[{"embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/squirrelnews"}],"wp:attachment":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297581"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297581"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297581"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297581"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297581"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}