Files
peptide-news-plugin/includes/class-peptide-news.php
Terence Ong 1ae831e183 feat: remove AI thumbnails, rewrite frontend with React (v1.3.0)
Remove all AI thumbnail generation infrastructure (too expensive,
poor results) and rewrite the public-facing article feed as a React
SPA mounted via WordPress shortcode.

Changes:
- Remove thumbnail generation, OG scraping, and image download code
  from fetcher, LLM, and admin classes
- Replace server-rendered PHP templates with React component
  (PeptideNewsFeed.jsx) using WordPress-bundled React/ReactDOM
- Add Babel build pipeline for JSX transpilation
- Update REST API to serve ai_summary instead of thumbnail fields
- Redesign public CSS: clean card layout, loading skeletons,
  dark mode, responsive, no thumbnail imagery
- Remove dead admin settings (llm_image_model, thumbnail_fallback)
- Fix call_openrouter() visibility for Content Filter cross-class use
- Bump version to 1.3.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 09:45:12 +07:00

114 lines
3.9 KiB
PHP

<?php
/**
* The core plugin class.
*
* Maintains the list of hooks and coordinates all modules.
*
* @since 1.0.0
*/
class Peptide_News {
/** @var Peptide_News_Loader */
protected $loader;
/** @var string */
protected $plugin_name;
/** @var string */
protected $version;
public function __construct() {
$this->version = PEPTIDE_NEWS_VERSION;
$this->plugin_name = 'peptide-news';
$this->load_dependencies();
$this->define_admin_hooks();
$this->define_public_hooks();
$this->define_cron_hooks();
$this->define_rest_hooks();
}
/**
* Load all required files.
*/
private function load_dependencies() {
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-loader.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-activator.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-deactivator.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-fetcher.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-analytics.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-rest-api.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-llm.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-content-filter.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-peptide-news-admin.php';
require_once PEPTIDE_NEWS_PLUGIN_DIR . 'public/class-peptide-news-public.php';
$this->loader = new Peptide_News_Loader();
}
/**
* Register admin-side hooks.
*/
private function define_admin_hooks() {
$admin = new Peptide_News_Admin( $this->plugin_name, $this->version );
$this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_styles' );
$this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_scripts' );
$this->loader->add_action( 'admin_menu', $admin, 'add_admin_menu' );
$this->loader->add_action( 'admin_init', $admin, 'register_settings' );
}
/**
* Register public-facing hooks.
*/
private function define_public_hooks() {
$public = new Peptide_News_Public( $this->plugin_name, $this->version );
$this->loader->add_action( 'wp_enqueue_scripts', $public, 'enqueue_styles' );
$this->loader->add_action( 'wp_enqueue_scripts', $public, 'enqueue_scripts' );
$this->loader->add_action( 'init', $public, 'register_shortcode' );
$this->loader->add_action( 'widgets_init', $public, 'register_widget' );
$this->loader->add_action( 'wp_ajax_peptide_news_track_click', $public, 'handle_click_tracking' );
$this->loader->add_action( 'wp_ajax_nopriv_peptide_news_track_click', $public, 'handle_click_tracking' );
}
/**
* Register WP-Cron hooks for scheduled fetching.
*/
private function define_cron_hooks() {
$fetcher = new Peptide_News_Fetcher();
$this->loader->add_action( 'peptide_news_cron_fetch', $fetcher, 'fetch_all_sources' );
$this->loader->add_filter( 'cron_schedules', $fetcher, 'add_custom_cron_schedules' );
$this->loader->add_action( 'wp_ajax_peptide_news_backfill_sources', $fetcher, 'ajax_backfill_sources' );
}
/**
* Register REST API hooks.
*/
private function define_rest_hooks() {
$rest = new Peptide_News_Rest_API();
$this->loader->add_action( 'rest_api_init', $rest, 'register_routes' );
}
/**
* Run the loader to execute all registered hooks.
*/
public function run() {
$this->loader->run();
}
public function get_plugin_name() {
return $this->plugin_name;
}
public function get_version() {
return $this->version;
}
public function get_loader() {
return $this->loader;
}
}