Virtual Pages - Source Excerpt 41
Summary
This source excerpt preserves a bounded section of 2IA.org/wp-content/themes/twoia-intelligence/inc/virtual-pages.php so readers can inspect the evidence without opening the full source file.
**Source path:** 2IA.org/wp-content/themes/twoia-intelligence/inc/virtual-pages.php
switch ( $slug ) {
case 'start-here':
twoia_render_start_here_portal();
return true;
case 'topic-hubs':
twoia_render_topic_hubs_portal();
return true;
case 'issues':
twoia_render_issues_portal();
return true;
case 'research':
twoia_render_research_portal();
return true;
case 'resources':
twoia_render_resources_portal();
return true;
case 'organizations':
twoia_render_organizations_portal();
return true;
case 'methodology':
twoia_render_methodology_portal();
return true;
case 'about':
twoia_render_about_portal();
return true;
case 'support':
twoia_render_support_portal();
return true;
case 'lexicon':
twoia_render_lexicon_portal();
return true;
}
return false;
}
/**
* Render the canonical topic hub index.
*/
function twoia_render_topic_hubs_portal() {
?>
<section class="section section--compact twoia-ia-section" aria-labelledby="twoia-topic-hubs-title">
<header class="section-header">
<p class="eyebrow"><?php esc_html_e( 'Canonical hubs', 'two-identities-anonymous' ); ?></p>
<h2 id="twoia-topic-hubs-title"><?php esc_html_e( 'Start with complete public topic pages', 'two-identities-anonymous' ); ?></h2>
<p><?php esc_html_e( 'These hubs replace thin category archives. Each destination is a source-controlled public page with definitions, why-it-matters context, practical first steps, related methods, and correction paths.', 'two-identities-anonymous' ); ?></p>
</header>
<?php
twoia_render_ia_cards(
array(
array( 'label' => __( 'Identity graph', 'two-identities-anonymous' ), 'title' => __( 'Metadata and Identity', 'two-identities-anonymous' ), 'body' => __( 'Records around content can reveal relationships, location, beliefs, movement, and vulnerability. Start here for metadata, retention, and correction questions.', 'two-identities-anonymous' ), 'url' => home_url( '/metadata-and-identity/' ) ),
array( 'label' => __( 'Context collapse', 'two-identities-anonymous' ), 'title' => __( 'Keyword Monitoring', 'two-identities-anonymous' ), 'body' => __( 'Static words and sentiment labels can misread research, journalism, fiction, satire, translation, and protest when review ignores context.', 'two-identities-anonymous' ), 'url' => home_url( '/keyword-monitoring/' ) ),
array( 'label' => __( 'Algorithmic accountability', 'two-identities-anonymous' ), 'title' => __( 'AI Surveillance', 'two-identities-anonymous' ), 'body' => __( 'Model scores and flags need documentation, explainability, human review, appeal, deletion, bias testing, and accountable ownership.', 'two-identities-anonymous' ), 'url' => home_url( '/ai-surveillance/' ) ),
array( 'label' => __( 'Records leverage', 'two-identities-anonymous' ), 'title' => __( 'Public Records and FOIA', 'two-identities-anonymous' ), 'body' => __( 'Use requests, deadline tracking, exemption challenges, fee challenges, rolling releases, and surveillance/vendor record templates.', 'two-identities-anonymous' ), 'url' => home_url( '/public-records-and-foia/' ) ),
array( 'label' => __( 'Surveillance literacy', 'two-identities-anonymous' ), 'title' => __( 'What They Look For', 'two-identities-anonymous' ), 'body' => __( 'Understand selectors, keywords, metadata, social graphs, sentiment, anomalies, false positives, and the records to request.', 'two-identities-anonymous' ), 'url' => home_url( '/what-they-look-for/' ) ),
array( 'label' => __( 'Identity framework', 'two-identities-anonymous' ), 'title' => __( 'Two Identities', 'two-identities-anonymous' ), 'body' => __( 'Given identity, chosen identity, pseudonymity, identity compartmentalization, and the anonymous space between exposure and accountability.', 'two-identities-anonymous' ), 'url' => home_url( '/two-identities/' ) ),
array( 'label' => __( 'Verification', 'two-identities-anonymous' ), 'title' => __( 'Open-Source Intelligence', 'two-identities-anonymous' ), 'body' => __( 'How 2IA verifies public claims with source context, corroboration, redaction, minimization, confidence labels, and correction paths.', 'two-identities-anonymous' ), 'url' => home_url( '/open-source-intelligence/' ) ),
array( 'label' => __( 'Public-interest boundaries', 'two-identities-anonymous' ), 'title' => __( 'Anonymous Hacktivist Collective', 'two-identities-anonymous' ), 'body' => __( 'Study anonymity, attribution, civic analysis, legal risk, and public-interest limits without romanticizing illegal activity.', 'two-identities-anonymous' ), 'url' => home_url( '/anonymous-hacktivist-collective/' ) ),
array( 'label' => __( 'Influence literacy', 'two-identities-anonymous' ), 'title' => __( 'Influence Operations and Media Literacy', 'two-identities-anonymous' ), 'body' => __( 'A speech-preserving taxonomy of propaganda, misinformation, disinformation, synthetic media, amplification, and proxy networks.', 'two-identities-anonymous' ), 'url' => home_url( '/psychological-warfare/' ) ),
array( 'label' => __( 'Research ethics', 'two-identities-anonymous' ), 'title' => __( 'Ethics and Civil Liberties', 'two-identities-anonymous' ), 'body' => __( 'Operational principles for proportionality, minimization, correction, consent, truthfulness, evidence care, and no needless exposure.', 'two-identities-anonymous' ), 'url' => home_url( '/ethics-and-civil-liberties/' ) ),
),
'twoia-topic-hub-grid'
);
?>
</section>
<?php
}
/**
* Render compact link cards.
*
* @param array $cards Card definitions.
* @param string $class Extra class.
*/
function twoia_render_ia_cards( $cards, $class = '' ) {
$classes = 'twoia-dossier-grid twoia-ia-grid';
if ( $class ) {
$classes .= ' ' . sanitize_html_class( $class );
}
?>
<div class="<?php echo esc_attr( $classes ); ?>">
<?php foreach ( $cards as $card ) : ?>
<?php $tag = ! empty( $card['url'] ) ? 'a' : 'article'; ?>
<<?php echo esc_html( $tag ); ?> class="briefing-panel briefing-panel--compact twoia-dossier-card<?php echo ! empty( $card['url'] ) ? ' twoia-dossier-card--link' : ''; ?>"<?php echo ! empty( $card['url'] ) ? ' href="' . esc_url( $card['url'] ) . '"' : ''; ?>>
<?php if ( ! empty( $card['label'] ) ) : ?>
<span class="metadata-label"><?php echo esc_html( $card['label'] ); ?></span>
<?php endif; ?>
<h3><?php echo esc_html( $card['title'] ); ?></h3>
<p><?php echo esc_html( $card['body'] ); ?></p>
<?php if ( ! empty( $card['meta'] ) ) : ?>
<p><strong><?php echo esc_html( $card['meta'] ); ?></strong></p>
<?php endif; ?>
</<?php echo esc_html( $tag ); ?>>
<?php endforeach; ?>
</div>
<?php
}