91³Ô¹ÏÍø

Watch CBS News

Trump signs executive order cutting funding to PBS, NPR

President Trump on Thursday signed an executive order aiming to slash public subsidies to PBS and NPR as he alleged "bias" in the broadcasters' reporting.

The order instructs the Corporation for Public Broadcasting and other federal agencies "to cease Federal funding for NPR and PBS" and further requires that they work to root out indirect sources of public financing for the news organizations. The White House, in a social media post announcing the signing, said the outlets "receive millions from taxpayers to spread radical, woke propaganda disguised as 'news.'"

The broadcasters get roughly half-a-billion dollars in public money through the Corporation for Public Broadcasting, and have been preparing for the possibility of stiff cuts since Mr. Trump's election, as Republicans have long complained about them.

NPR, which was was established in 1970, released a  on Friday regarding the funding cuts, saying, "This is not about balancing the federal budget."

"The President's order is an affront to the First Amendment rights of NPR and locally owned and operated stations throughout America to produce and air programming that meets the needs of their communities. It is also an affront to the First Amendment rights of station listeners and donors who support independent news and information. Although federal funding is an essential aspect of public media, significant financial support comes from listeners, underwriters, and philanthropic grants," the statement reads.

Addressing reporters last month, Mr. Trump  he "would love to" cut funding to NPR and PBS. 

Paula Kerger, PBS' CEO and president, said in a statement last month that the Trump administration's effort to rescind funding for public media would "disrupt the essential service PBS and local member stations provide to the American people."

"There's nothing more American than PBS, and our work is only possible because of the bipartisan support we have always received from Congress," she said. "This public-private partnership allows us to help prepare millions of children for success in school and in life and also supports enriching and inspiring programs of the highest quality."

The Corporation for Public Broadcasting sued Mr. Trump earlier this week over his move to fire three members of its five-person board, contending that the president was exceeding his authority and that the move would deprive the board of a quorum needed to conduct business.

"Indeed, under the Act, Congress made it clear that it the CPB is a private corporation, over whom the President has no authority save the ability to nominate members of the Board of Directors, with the advice and consent of the Senate," lawyers wrote in the court filing.  

Just two weeks ago, the White House said it would be asking Congress to rescind funding for the CPB as part of a $9.1 billion package of cuts. That package, however, which budget director Russell Vought said would likely be the first of several, has not yet been sent to Capitol Hill.

The Corporation for Public Broadcasting, formed in 1967, is a private corporation that helps support hundreds of public media organizations, including radio and TV stations.   

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });