diff --git a/.github/changelog/2096-from-description b/.github/changelog/2096-from-description deleted file mode 100644 index 67b34055ef..0000000000 --- a/.github/changelog/2096-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Use wp_interactivity_config() for static values instead of wp_interactivity_state() to improve performance and code clarity diff --git a/.github/changelog/2113-from-description b/.github/changelog/2113-from-description deleted file mode 100644 index 3bca6f80ee..0000000000 --- a/.github/changelog/2113-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Improved ActivityPub compatibility by aligning with Mastodon’s Application Actor. diff --git a/.github/changelog/2114-from-description b/.github/changelog/2114-from-description deleted file mode 100644 index 8171d07675..0000000000 --- a/.github/changelog/2114-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Hide site-wide checkbox in block confirmations when accessed from ActivityPub settings page diff --git a/.github/changelog/2116-from-description b/.github/changelog/2116-from-description deleted file mode 100644 index 9a3438d4e9..0000000000 --- a/.github/changelog/2116-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Adds support for virtual deletes and restores, allowing objects to be removed from the fediverse without being deleted locally. diff --git a/.github/changelog/2117-from-description b/.github/changelog/2117-from-description deleted file mode 100644 index d8801bb987..0000000000 --- a/.github/changelog/2117-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Stopp sending follow notifications to the Application user, since system-level accounts cannot be followed. diff --git a/.github/changelog/2118-from-description b/.github/changelog/2118-from-description deleted file mode 100644 index 355cb05453..0000000000 --- a/.github/changelog/2118-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Added a new WP-CLI command to manage Actors. diff --git a/.github/changelog/2120-from-description b/.github/changelog/2120-from-description deleted file mode 100644 index 471aa894f1..0000000000 --- a/.github/changelog/2120-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix query args preservation in collection pagination links diff --git a/.github/changelog/2121-from-description b/.github/changelog/2121-from-description deleted file mode 100644 index a2ad0e0710..0000000000 --- a/.github/changelog/2121-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Add activitypub_json REST field for ap_actor posts to access raw JSON data diff --git a/.github/changelog/2129-from-description b/.github/changelog/2129-from-description deleted file mode 100644 index a1ef8591ea..0000000000 --- a/.github/changelog/2129-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Refactored Reply block to use WordPress core embed functionality for better compatibility and performance. diff --git a/.github/changelog/2132-from-description b/.github/changelog/2132-from-description deleted file mode 100644 index 3bd098c0ae..0000000000 --- a/.github/changelog/2132-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix reply block rendering inconsistency where blocks were always converted to @-mentions in ActivityPub content. Now only first reply blocks become @-mentions, others remain as regular links. diff --git a/.github/changelog/2136-from-description b/.github/changelog/2136-from-description deleted file mode 100644 index a1e2a20f07..0000000000 --- a/.github/changelog/2136-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Add Yoast SEO integration for media pages site health check diff --git a/.github/changelog/2137-from-description b/.github/changelog/2137-from-description deleted file mode 100644 index 8253c2e44f..0000000000 --- a/.github/changelog/2137-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix PHP warning when saving ActivityPub settings. diff --git a/.github/changelog/2139-from-description b/.github/changelog/2139-from-description deleted file mode 100644 index 0db385df0b..0000000000 --- a/.github/changelog/2139-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix content visibility override issue preventing authors from changing visibility on older posts. diff --git a/.github/changelog/2141-from-description b/.github/changelog/2141-from-description deleted file mode 100644 index 41a3f1a8fc..0000000000 --- a/.github/changelog/2141-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Add Delete activity support for permanently deleted federated comments. diff --git a/.github/changelog/2148-from-description b/.github/changelog/2148-from-description deleted file mode 100644 index cae20e51f9..0000000000 --- a/.github/changelog/2148-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: deprecated - -ActivityPub now defaults to automated object type selection, with the old manual option moved to Advanced settings for compatibility. diff --git a/.github/changelog/2150-from-description b/.github/changelog/2150-from-description deleted file mode 100644 index b1342ccaad..0000000000 --- a/.github/changelog/2150-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Added confirmation step for bulk removal of ActivityPub capability, asking whether to also delete users from the Fediverse. diff --git a/.github/changelog/2153-from-description b/.github/changelog/2153-from-description deleted file mode 100644 index 702878bb2f..0000000000 --- a/.github/changelog/2153-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Clarified the 'attachment' post type description to explain it refers to media library uploads and recommend disabling federation in most cases. diff --git a/.github/changelog/2160-from-description b/.github/changelog/2160-from-description deleted file mode 100644 index 31b873a94c..0000000000 --- a/.github/changelog/2160-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -It’s now possible to reply to multiple posts using multiple reply blocks. diff --git a/.github/changelog/2169-from-description b/.github/changelog/2169-from-description deleted file mode 100644 index 61d99a5ea5..0000000000 --- a/.github/changelog/2169-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Optimized WebFinger lookups by centralizing and caching account resolution for faster, more consistent handling across lists. diff --git a/.github/changelog/2171-from-description b/.github/changelog/2171-from-description deleted file mode 100644 index 50b4cb570e..0000000000 --- a/.github/changelog/2171-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix release script to catch more 'unreleased' deprecation patterns that were previously missed during version updates. diff --git a/CHANGELOG.md b/CHANGELOG.md index aea690f547..af1aa32325 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [7.4.0] - 2025-09-15 +### Added +- Add activitypub_json REST field for ap_actor posts to access raw JSON data [#2121] +- Add Delete activity support for permanently deleted federated comments. [#2141] +- Added a new WP-CLI command to manage Actors. [#2118] +- Added confirmation step for bulk removal of ActivityPub capability, asking whether to also delete users from the Fediverse. [#2150] +- Adds support for virtual deletes and restores, allowing objects to be removed from the fediverse without being deleted locally. [#2116] +- Add Yoast SEO integration for media pages site health check [#2136] +- Optimized WebFinger lookups by centralizing and caching account resolution for faster, more consistent handling across lists. [#2169] + +### Changed +- Clarified the 'attachment' post type description to explain it refers to media library uploads and recommend disabling federation in most cases. [#2153] +- Hide site-wide checkbox in block confirmations when accessed from ActivityPub settings page [#2114] +- Improved ActivityPub compatibility by aligning with Mastodon’s Application Actor. [#2113] +- It’s now possible to reply to multiple posts using multiple reply blocks. [#2160] +- Refactored Reply block to use WordPress core embed functionality for better compatibility and performance. [#2129] +- Use wp_interactivity_config() for static values instead of wp_interactivity_state() to improve performance and code clarity [#2096] + +### Deprecated +- ActivityPub now defaults to automated object type selection, with the old manual option moved to Advanced settings for compatibility. [#2148] + +### Fixed +- Fix content visibility override issue preventing authors from changing visibility on older posts. [#2139] +- Fix PHP warning when saving ActivityPub settings. [#2137] +- Fix query args preservation in collection pagination links [#2120] +- Fix release script to catch more 'unreleased' deprecation patterns that were previously missed during version updates. [#2171] +- Fix reply block rendering inconsistency where blocks were always converted to @-mentions in ActivityPub content. Now only first reply blocks become @-mentions, others remain as regular links. [#2132] +- Stop sending follow notifications to the Application user, since system-level accounts cannot be followed. [#2117] + ## [7.3.0] - 2025-08-28 ### Added - Add actor blocking functionality with list table interface for managing blocked users and site-wide blocks [#2027] @@ -1408,6 +1437,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - initial +[7.4.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.3.0...7.4.0 [7.3.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.2.0...7.3.0 [7.2.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.1.0...7.2.0 [7.1.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.0.1...7.1.0 diff --git a/activitypub.php b/activitypub.php index 568ddda259..c07103e3a3 100644 --- a/activitypub.php +++ b/activitypub.php @@ -3,7 +3,7 @@ * Plugin Name: ActivityPub * Plugin URI: https://github.com/Automattic/wordpress-activitypub * Description: The ActivityPub protocol is a decentralized social networking protocol based upon the ActivityStreams 2.0 data format. - * Version: 7.3.0 + * Version: 7.4.0 * Author: Matthias Pfefferle & Automattic * Author URI: https://automattic.com/ * License: MIT @@ -17,7 +17,7 @@ namespace Activitypub; -\define( 'ACTIVITYPUB_PLUGIN_VERSION', '7.3.0' ); +\define( 'ACTIVITYPUB_PLUGIN_VERSION', '7.4.0' ); // Plugin related constants. \define( 'ACTIVITYPUB_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); diff --git a/includes/class-signature.php b/includes/class-signature.php index 0118d0e74a..2087f31be2 100644 --- a/includes/class-signature.php +++ b/includes/class-signature.php @@ -237,14 +237,14 @@ public static function get_keypair_for( $user_id ) { /** * Get public key from key_id. * - * @deprecated unreleased Use {@see Remote_Actors::get_public_key()}. + * @deprecated 7.4.0 Use {@see Remote_Actors::get_public_key()}. * * @param string $key_id The URL to the public key. * * @return resource|\WP_Error The public key resource or WP_Error. */ public static function get_remote_key( $key_id ) { - \_deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_public_key()' ); + \_deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_public_key()' ); return Remote_Actors::get_public_key( $key_id ); } diff --git a/includes/collection/class-actors.php b/includes/collection/class-actors.php index 96b1c938d9..8d812ce49b 100644 --- a/includes/collection/class-actors.php +++ b/includes/collection/class-actors.php @@ -593,47 +593,47 @@ protected static function check_legacy_key_pair( $user_id ) { /** * Returns all Inboxes for all known remote Actors. * - * @deprecated unreleased Use {@see Remote_Actors::get_inboxes()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_inboxes()} * * @return array The list of Inboxes. */ public static function get_inboxes() { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_inboxes' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_inboxes' ); return Remote_Actors::get_inboxes(); } /** * Upsert (insert or update) a remote actor as a custom post type. * - * @deprecated unreleased Use {@see Remote_Actors::upsert()} + * @deprecated 7.4.0 Use {@see Remote_Actors::upsert()} * * @param array|Actor $actor ActivityPub actor object (array or actor, must include 'id'). * * @return int|\WP_Error Post ID on success, WP_Error on failure. */ public static function upsert( $actor ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::upsert' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::upsert' ); return Remote_Actors::upsert( $actor ); } /** * Create a remote actor as a custom post type. * - * @deprecated unreleased Use {@see Remote_Actors::create()} + * @deprecated 7.4.0 Use {@see Remote_Actors::create()} * * @param array|Actor $actor ActivityPub actor object (array or Actor, must include 'id'). * * @return int|\WP_Error Post ID on success, WP_Error on failure. */ public static function create( $actor ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::create' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::create' ); return Remote_Actors::create( $actor ); } /** * Update a remote Actor object by actor URL (guid). * - * @deprecated unreleased Use {@see Remote_Actors::update()} + * @deprecated 7.4.0 Use {@see Remote_Actors::update()} * * @param int|\WP_Post $post The post ID or object. * @param array|Actor $actor The ActivityPub actor object as associative array (must include 'id'). @@ -641,49 +641,49 @@ public static function create( $actor ) { * @return int|\WP_Error The post ID or WP_Error. */ public static function update( $post, $actor ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::update' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::update' ); return Remote_Actors::update( $post, $actor ); } /** * Delete a remote actor object by actor URL (guid). * - * @deprecated unreleased Use {@see Remote_Actors::delete()} + * @deprecated 7.4.0 Use {@see Remote_Actors::delete()} * * @param int $post_id The post ID. * * @return bool True on success, false on failure. */ public static function delete( $post_id ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::delete' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::delete' ); return Remote_Actors::delete( $post_id ); } /** * Get a remote actor post by actor URI (guid). * - * @deprecated unreleased Use {@see Remote_Actors::get_by_uri()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_by_uri()} * * @param string $actor_uri The actor URI. * * @return \WP_Post|\WP_Error Post object or WP_Error if not found. */ public static function get_remote_by_uri( $actor_uri ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_by_uri' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_by_uri' ); return Remote_Actors::get_by_uri( $actor_uri ); } /** * Lookup a remote actor post by actor URI (guid), fetching from remote if not found locally. * - * @deprecated unreleased Use {@see Remote_Actors::fetch_by_uri()} + * @deprecated 7.4.0 Use {@see Remote_Actors::fetch_by_uri()} * * @param string $actor_uri The actor URI. * * @return \WP_Post|\WP_Error Post object or WP_Error if not found. */ public static function fetch_remote_by_uri( $actor_uri ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::fetch_by_uri' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::fetch_by_uri' ); return Remote_Actors::fetch_by_uri( $actor_uri ); } @@ -692,7 +692,7 @@ public static function fetch_remote_by_uri( $actor_uri ) { * * The error will be stored in post meta. * - * @deprecated unreleased Use {@see Remote_Actors::add_error()} + * @deprecated 7.4.0 Use {@see Remote_Actors::add_error()} * * @param int $post_id The ID of the WordPress Custom-Post-Type. * @param string|\WP_Error $error The error message. @@ -700,70 +700,70 @@ public static function fetch_remote_by_uri( $actor_uri ) { * @return int|false The meta ID on success, false on failure. */ public static function add_error( $post_id, $error ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::add_error' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::add_error' ); return Remote_Actors::add_error( $post_id, $error ); } /** * Count the errors for an actor. * - * @deprecated unreleased Use {@see Remote_Actors::count_errors()} + * @deprecated 7.4.0 Use {@see Remote_Actors::count_errors()} * * @param int $post_id The ID of the WordPress Custom-Post-Type. * * @return int The number of errors. */ public static function count_errors( $post_id ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::count_errors' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::count_errors' ); return Remote_Actors::count_errors( $post_id ); } /** * Get all error messages for an actor. * - * @deprecated unreleased Use {@see Remote_Actors::get_errors()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_errors()} * * @param int $post_id The post ID. * * @return string[] Array of error messages. */ public static function get_errors( $post_id ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_errors' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_errors' ); return Remote_Actors::get_errors( $post_id ); } /** * Clear all errors for an actor. * - * @deprecated unreleased Use {@see Remote_Actors::clear_errors()} + * @deprecated 7.4.0 Use {@see Remote_Actors::clear_errors()} * * @param int $post_id The ID of the WordPress Custom-Post-Type. * * @return bool True on success, false on failure. */ public static function clear_errors( $post_id ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::clear_errors' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::clear_errors' ); return Remote_Actors::clear_errors( $post_id ); } /** * Get all remote actors (Custom Post Type) that had errors. * - * @deprecated unreleased Use {@see Remote_Actors::get_faulty()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_faulty()} * * @param int $number Optional. Number of actors to return. Default 20. * * @return \WP_Post[] Array of faulty actor posts. */ public static function get_faulty( $number = 20 ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_faulty' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_faulty' ); return Remote_Actors::get_faulty( $number ); } /** * Get all remote actor posts not updated for a given time. * - * @deprecated unreleased Use {@see Remote_Actors::get_outdated()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_outdated()} * * @param int $number Optional. Limits the result. Default 50. * @param int $older_than Optional. The time in seconds. Default DAY_IN_SECONDS. @@ -771,35 +771,35 @@ public static function get_faulty( $number = 20 ) { * @return \WP_Post[] The list of actors. */ public static function get_outdated( $number = 50, $older_than = DAY_IN_SECONDS ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_outdated' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_outdated' ); return Remote_Actors::get_outdated( $number, $older_than ); } /** * Convert a custom post type input to an Activitypub\Activity\Actor. * - * @deprecated unreleased Use {@see Remote_Actors::get_actor()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_actor()} * * @param int|\WP_Post $post The post ID or object. * * @return Actor|\WP_Error The actor object or WP_Error on failure. */ public static function get_actor( $post ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_actor' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_actor' ); return Remote_Actors::get_actor( $post ); } /** * Get public key from key_id. * - * @deprecated unreleased Use {@see Remote_Actors::get_public_key()} + * @deprecated 7.4.0 Use {@see Remote_Actors::get_public_key()} * * @param string $key_id The URL to the public key. * * @return resource|\WP_Error The public key resource or WP_Error. */ public static function get_remote_key( $key_id ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_public_key' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_public_key' ); return Remote_Actors::get_public_key( $key_id ); } @@ -808,13 +808,13 @@ public static function get_remote_key( $key_id ) { * * Handles webfinger addresses, URLs without schemes, objects, and arrays. * - * @deprecated unreleased Use {@see Remote_Actors::normalize_identifier()} + * @deprecated 7.4.0 Use {@see Remote_Actors::normalize_identifier()} * * @param string|object|array $actor Actor URI, webfinger address, actor object, or array. * @return string|null Normalized actor URI or null if unable to resolve. */ public static function normalize_identifier( $actor ) { - _deprecated_function( __METHOD__, 'unreleased', 'Remote_Actors::normalize_identifier' ); + _deprecated_function( __METHOD__, '7.4.0', 'Remote_Actors::normalize_identifier' ); return Remote_Actors::normalize_identifier( $actor ); } } diff --git a/includes/collection/class-followers.php b/includes/collection/class-followers.php index 7209492d29..0452a1ea36 100644 --- a/includes/collection/class-followers.php +++ b/includes/collection/class-followers.php @@ -156,14 +156,14 @@ public static function get_follower( $user_id, $actor ) { /** * Get a Follower by Actor independent of the User. * - * @deprecated unreleased + * @deprecated 7.4.0 * * @param string $actor The Actor URL. * * @return \WP_Post|\WP_Error The Follower object or WP_Error on failure. */ public static function get_follower_by_actor( $actor ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Collection\Remote_Actors::get_by_uri' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Collection\Remote_Actors::get_by_uri' ); return Remote_Actors::get_by_uri( $actor ); } diff --git a/includes/transformer/class-post.php b/includes/transformer/class-post.php index 61be86560b..3ba33a933c 100644 --- a/includes/transformer/class-post.php +++ b/includes/transformer/class-post.php @@ -11,7 +11,6 @@ use Activitypub\Collection\Actors; use Activitypub\Collection\Interactions; use Activitypub\Collection\Replies; -use Activitypub\Http; use Activitypub\Model\Blog; use Activitypub\Shortcodes; @@ -542,7 +541,7 @@ protected function get_content() { /** * Generate HTML @ link for reply block. * - * @deprecated unreleased Use {@see Blocks::generate_reply_link()}. + * @deprecated 7.4.0 Use {@see Blocks::generate_reply_link()}. * * @param string $block_content The block content. * @param array $block The block data. @@ -550,7 +549,7 @@ protected function get_content() { * @return string The HTML @ link. */ public function generate_reply_link( $block_content, $block ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Blocks::generate_reply_link' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Blocks::generate_reply_link' ); return Blocks::generate_reply_link( $block_content, $block ); } @@ -643,7 +642,7 @@ protected function get_mentions() { * * Remote servers will simply drop iframe elements, rendering incomplete content. * - * @deprecated unreleased Use {@see Blocks::revert_embed_links()}. + * @deprecated 7.4.0 Use {@see Blocks::revert_embed_links()}. * * @see https://www.w3.org/TR/activitypub/#security-sanitizing-content * @see https://www.w3.org/wiki/ActivityPub/Primer/HTML @@ -654,7 +653,7 @@ protected function get_mentions() { * @return string A block level link */ public function revert_embed_links( $block_content, $block ) { - _deprecated_function( __METHOD__, 'unreleased', 'Activitypub\Blocks::revert_embed_links' ); + _deprecated_function( __METHOD__, '7.4.0', 'Activitypub\Blocks::revert_embed_links' ); return Blocks::revert_embed_links( $block_content, $block ); } diff --git a/readme.txt b/readme.txt index 98f81a98b0..ebf8edb7bb 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ Contributors: automattic, pfefferle, mattwiebe, obenland, akirk, jeherve, mediaf Tags: fediverse, activitypub, indieweb, activitystream, social web Requires at least: 6.5 Tested up to: 6.8 -Stable tag: 7.3.0 +Stable tag: 7.4.0 Requires PHP: 7.2 License: MIT License URI: http://opensource.org/licenses/MIT @@ -110,6 +110,35 @@ For reasons of data protection, it is not possible to see the followers of other == Changelog == +### 7.4.0 - 2025-09-15 +#### Added +- Add activitypub_json REST field for ap_actor posts to access raw JSON data +- Add Delete activity support for permanently deleted federated comments. +- Added a new WP-CLI command to manage Actors. +- Added confirmation step for bulk removal of ActivityPub capability, asking whether to also delete users from the Fediverse. +- Adds support for virtual deletes and restores, allowing objects to be removed from the fediverse without being deleted locally. +- Add Yoast SEO integration for media pages site health check +- Optimized WebFinger lookups by centralizing and caching account resolution for faster, more consistent handling across lists. + +#### Changed +- Clarified the 'attachment' post type description to explain it refers to media library uploads and recommend disabling federation in most cases. +- Hide site-wide checkbox in block confirmations when accessed from ActivityPub settings page +- Improved ActivityPub compatibility by aligning with Mastodon’s Application Actor. +- It’s now possible to reply to multiple posts using multiple reply blocks. +- Refactored Reply block to use WordPress core embed functionality for better compatibility and performance. +- Use wp_interactivity_config() for static values instead of wp_interactivity_state() to improve performance and code clarity + +#### Deprecated +- ActivityPub now defaults to automated object type selection, with the old manual option moved to Advanced settings for compatibility. + +#### Fixed +- Fix content visibility override issue preventing authors from changing visibility on older posts. +- Fix PHP warning when saving ActivityPub settings. +- Fix query args preservation in collection pagination links +- Fix release script to catch more 'unreleased' deprecation patterns that were previously missed during version updates. +- Fix reply block rendering inconsistency where blocks were always converted to @-mentions in ActivityPub content. Now only first reply blocks become @-mentions, others remain as regular links. +- Stop sending follow notifications to the Application user, since system-level accounts cannot be followed. + ### 7.3.0 - 2025-08-28 #### Added - Add actor blocking functionality with list table interface for managing blocked users and site-wide blocks