PluginProbe
ActivityPub / 9.3.0
ActivityPub v9.3.0
9.3.1 9.3.0 9.2.2 9.2.1 9.2.0 9.1.0 9.0.2 9.0.1 9.0.0 8.3.0 8.2.1 8.2.0 8.1.1 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.2.0 1.3.0 2.0.0 2.0.1 2.1.0 2.1.1 All 160 releases
activitypub / integration / README.md

README.md in ActivityPub 9.3.0, at integration/README.md

75 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 # Integrations
2
3 This folder holds the plugin's **third-party compatibility layer** — small classes that make ActivityPub cooperate with other plugins and hosting features, without any of them having to know about each other.
4
5 ## How they load
6
7 `load.php` runs on `plugins_loaded` (`plugin_init()`; BuddyPress hooks `bp_include` instead, because it loads later). For each integration it first checks that the companion plugin is present — a `defined()`, `class_exists()`, or `function_exists()` probe — and only then wires it up:
8
9 ```php
10 if ( \defined( 'JETPACK__VERSION' ) ) {
11 Jetpack::init();
12 }
13 ```
14
15 A few integrations are always initialized (`Nodeinfo`, `Webfinger`, `Surge`, `Litespeed_Cache`, `Stream`) because they either target an always-available surface or do their own detection inside `init()`.
16
17 ## Two patterns
18
19 1. **`::init()` classes** (most of them). A static `init()` registers the WordPress hooks the integration needs. Files are named `class-{name}.php`, namespaced `Activitypub\Integration`.
20
21 2. **Transformer swaps** (`Podlove Podcast Publisher`, `Seriously Simple Podcasting`). These hook the `activitypub_transformer` filter in `load.php` to return a subclass of `Activitypub\Transformer\Post` that overrides `get_attachment()`, so an episode federates with its audio enclosure and cover art.
22
23 ## The integrations
24
25 ### Federation standards
26
27 | Integration | What it does |
28 |---|---|
29 | **WebFinger** | Adds ActivityPub actor links to the [](https://wordpress.org/plugins/webfinger/WebFinger](https://wordpress.org/plugins/webfinger/](https://wordpress.org/plugins/webfinger/) plugin's responses. |
30 | **NodeInfo** | Advertises ActivityPub in the [](https://wordpress.org/plugins/nodeinfo/NodeInfo](https://wordpress.org/plugins/nodeinfo/](https://wordpress.org/plugins/nodeinfo/) / NodeInfo2 server metadata. |
31 | **OpenGraph** | Coordinates Open Graph output with the [](https://wordpress.org/plugins/opengraph/OpenGraph](https://wordpress.org/plugins/opengraph/](https://wordpress.org/plugins/opengraph/) plugin so tags aren't duplicated. |
32
33 ### Fediverse & reader surfaces
34
35 | Integration | What it does |
36 |---|---|
37 | **Jetpack** | Syncs ActivityPub options and follower/following meta to WordPress.com, adds a Reader link on the Following screen, enables the Following UI, adapts the "share to reply" flow, and federates podcast episodes from both Posts to Podcast and Jetpack Podcast with their audio and cover art. |
38 | **Enable Mastodon Apps** | Feeds ActivityPub account, follower, post, and notification data to [](https://wordpress.org/plugins/enable-mastodon-apps/Enable Mastodon Apps](https://wordpress.org/plugins/enable-mastodon-apps/](https://wordpress.org/plugins/enable-mastodon-apps/) so native Mastodon client apps work against the site. |
39 | **BuddyPress** | Maps BuddyPress member profiles into ActivityPub actors and adapts the Followers/Following blocks. |
40
41 ### Content & publishing
42
43 | Integration | What it does |
44 |---|---|
45 | **Classic Editor** | Provides attachment/media extraction and editor UI for sites without the block editor. |
46 | **Podlove Podcast Publisher** | Federates Podlove episodes with their audio enclosure and cover art *(transformer)*. |
47 | **Seriously Simple Podcasting** | Federates Seriously Simple Podcasting episodes with their audio enclosure *(transformer)*. |
48
49 ### Caching
50
51 | Integration | What it does |
52 |---|---|
53 | **LiteSpeed Cache** | Keeps the html and ActivityPub (JSON) responses in separate cache buckets, with a Site Health check. |
54 | **Surge** | Keeps the html and ActivityPub (JSON) responses in separate cache buckets, with a Site Health check. |
55
56 ### Internationalization
57
58 | Integration | What it does |
59 |---|---|
60 | **WPML** | Supplies the correct per-object locale for federated content under WPML. |
61 | **Multisite Language Switcher** | Keeps ActivityPub data consistent across MSLS post translations. |
62
63 ### Other
64
65 | Integration | What it does |
66 |---|---|
67 | **Akismet** | Keeps Akismet's comment handling sensible for federated interactions (likes, reposts, replies). |
68 | **Yoast SEO** | Adds a Site Health check for Yoast settings that can interfere with federation. |
69
70 ## Adding an integration
71
72 1. Create `class-{name}.php` in this folder, namespaced `Activitypub\Integration`, with a static `init()` (or, for a content transformer, a `Post` subclass).
73 2. In `load.php`, add a guarded call — detect the companion plugin with `defined()` / `class_exists()` / `function_exists()`, then `init()` it (or register the transformer via the `activitypub_transformer` filter).
74 3. Add tests under `tests/phpunit/tests/integration/`.
75