{"id":30030676,"url":"https://github.com/n3xt0r/wp-xpub","last_synced_at":"2026-05-16T08:34:55.909Z","repository":{"id":305758329,"uuid":"1023851036","full_name":"N3XT0R/WP-XPub","owner":"N3XT0R","description":"Auto-publish WordPress posts to LinkedIn, Dev.to, Mastodon \u0026 more. Modular plugin with hooks, drivers \u0026 full extensibility.","archived":false,"fork":false,"pushed_at":"2025-08-05T01:06:24.000Z","size":582,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-05T02:36:13.471Z","etag":null,"topics":["automated-updates","clean-architecture","cronjob-scheduler","devto","modular","wordpress"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/N3XT0R.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-21T19:46:51.000Z","updated_at":"2025-08-04T02:22:39.000Z","dependencies_parsed_at":"2025-07-21T22:23:57.890Z","dependency_job_id":"deb25324-089e-4347-80d8-d7d20f2f6cb6","html_url":"https://github.com/N3XT0R/WP-XPub","commit_stats":null,"previous_names":["n3xt0r/wp-xpub"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/N3XT0R/WP-XPub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/N3XT0R%2FWP-XPub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/N3XT0R%2FWP-XPub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/N3XT0R%2FWP-XPub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/N3XT0R%2FWP-XPub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/N3XT0R","download_url":"https://codeload.github.com/N3XT0R/WP-XPub/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/N3XT0R%2FWP-XPub/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269137370,"owners_count":24366573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-06T02:00:09.910Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automated-updates","clean-architecture","cronjob-scheduler","devto","modular","wordpress"],"created_at":"2025-08-06T19:01:58.555Z","updated_at":"2026-05-16T08:34:55.882Z","avatar_url":"https://github.com/N3XT0R.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WP-XPub\n\n[![CI](https://github.com/N3XT0R/wp-xpub/actions/workflows/ci.yml/badge.svg)](https://github.com/N3XT0R/wp-xpub/actions/workflows/ci.yml)\n[![Latest Stable Version](https://poser.pugx.org/n3xt0r/wp-xpub/v/stable)](https://packagist.org/packages/n3xt0r/wp-xpub)\n[![Code Coverage](https://qlty.sh/gh/N3XT0R/projects/WP-XPub/coverage.svg)](https://qlty.sh/gh/N3XT0R/projects/WP-XPub)\n[![Maintainability](https://qlty.sh/gh/N3XT0R/projects/WP-XPub/maintainability.svg)](https://qlty.sh/gh/N3XT0R/projects/WP-XPub)\n\n**Flexible Multi-Channel Auto Publisher for WordPress**\nPublish your blog posts to Dev.to or any custom target – automatically and without writing a single line of code.\n\n---\n\n## ✨ What is WP-XPub?\n\n**WP-XPub** is a lightweight, ready-to-use WordPress plugin that lets you automatically share your posts to multiple\nexternal platforms – either instantly or via scheduled jobs.\n\n✅ **No technical knowledge needed** – just install, activate, connect your accounts and you're done.  \n🛠️ **Developers welcome** – WP-XPub is modular, PSR-compliant, and follows a clean hexagonal architecture.\n\n---\n\n## 🚀 Features\n\n- 🔁 Auto-publish WordPress posts to external platforms\n- 🔌 Built-in Dev.to, Mastodon and linkedIn driver – extendable via plugin drivers\n- 🧩 Modular client driver system (easily extend to new platforms)\n- ⏱️ Publish immediately or schedule for later\n- 🧵 Custom pre- and post-publish hooks\n- 📦 Composer-ready (PSR-4 autoloading, modern structure)\n- ⚛️ React-based admin interface bundled with Vite for fast builds\n- 🐘 Local logging via Monolog – no external tracking or APIs\n- 🔄 GitHub update integration with custom updater hooks\n\n---\n\n## 📦 Installation\n\n1. Clone or download the plugin into your `wp-content/plugins` directory.\n2. Activate it via the WordPress admin panel.\n3. Go to **Settings \u003e XPUB** and connect your desired platforms.\n\nor\n\n```bash\ncomposer require n3xt0r/wp-xpub\n```\n\nIf you're using [Bedrock](https://roots.io/bedrock/) or similar Composer-managed WP setups, you're ready to go.\n\n📄 See the full [installation guide](docs/installation.md) for details.\n\n\u003e ⚠️ **Note:** WP-XPub is *not* listed on the official WordPress Plugin Directory.  \n\u003e This is by design: WordPress.org enforces legacy coding patterns that conflict with modern PSR standards and clean\n\u003e architecture.  \n\u003e WP-XPub prioritizes maintainability and extensibility over legacy compatibility.\n\u003e\n\u003e 🛠️ **Why this deviation?**  \n\u003e WP-XPub follows a hexagonal (ports \u0026 adapters) architecture to enforce separation of concerns, testability, and\n\u003e long-term maintainability.  \n\u003e The WordPress Plugin Directory imposes structural constraints that prevent clean software design, including:\n\u003e\n\u003e - Reliance on `functions.php` and global functions instead of DI and modular bootstrapping\n\u003e - Static hook registration without lifecycle encapsulation\n\u003e - No support for PSR-4, namespaces, or autoloading\n\u003e - **A legacy translation system** (`gettext`) that requires **literal strings** for all translatable text – making\n    dynamic or domain-driven I18n impossible\n\u003e - No support for application-layer abstractions (e.g. service containers, middleware, or event buses)\n\u003e\n\u003e ❌ These constraints hinder composability, reusability, and testability.\n\u003e\n\u003e ✅ WP-XPub deliberately separates domain logic, infrastructure, and framework adapters – allowing modern PHP practices\n\u003e like:\n\u003e\n\u003e - **Constructor-based dependency injection**\n\u003e - **PSR-compliant, autoloaded class structure**\n\u003e - **Dynamic, context-aware translations via service-based I18n**\n\u003e - **Full test coverage of application and domain code – independent from WordPress internals**\n\u003e\n\u003e WP-XPub is designed for developers who want to **integrate WordPress without being constrained by it**.\n\n---\n\n## ✅ Requirements\n\n- PHP 8.2+\n- WordPress 6.0+ (tested with 6.8.2)\n- Composer (optional, for development or extensions)\n\n---\n\n## 🧠 For Developers\n\nWP-XPub is built with a clear separation of concerns and is easy to extend:\n\n- 🧱 Hexagonal architecture (Ports \u0026 Adapters)\n- 🧩 Create your own publisher drivers with minimal boilerplate\n- 📦 Fully PSR-4 compliant, Composer-ready\n- 🧪 CI integration and code coverage metrics\n- 🐘 Monolog-based logging system\n- 🔄 GitHub update workflow with changelog diffing\n\nSee the [developer docs](docs/index.md) for more:\n\n- [Creating Custom Publishers](docs/creating-publishers.md)\n- [Architecture Overview](docs/architecture.md)\n- [Hooks \u0026 Filters](docs/hooks.md)\n- [Translations](docs/translations.md)\n- [Development Guide](docs/development.md)\n\n---\n\n## 📚 Full Documentation\n\nAll documentation is available in the `docs/` folder:\n\n- [Overview \u0026 Index](docs/index.md)\n- [Installation](docs/installation.md)\n- [Update](docs/update.md)\n- [Creating Publishers](docs/creating-publishers.md)\n- [Architecture](docs/architecture.md)\n- [Hooks \u0026 Filters](docs/hooks.md)\n- [Languages](docs/translations.md)\n- [Development Guide](docs/development.md)\n\n---\n\n## 📃 License\n\n[MIT License](LICENSE)\n\n---\n\n## 💬 Credits\n\nMade with ❤️ by [@N3XT0R](https://github.com/n3xt0r) – Contributions welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fn3xt0r%2Fwp-xpub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fn3xt0r%2Fwp-xpub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fn3xt0r%2Fwp-xpub/lists"}