Fix PHP deprecation and missing federation when replying to remote Fediverse posts#291
Merged
Fix PHP deprecation and missing federation when replying to remote Fediverse posts#291
Conversation
…diverse posts When replying to a remote post (resolved via search), the in_reply_to_id filter maps the numeric ID back to the original URL. api_submit_comment was blindly setting comment_post_ID to that URL string and calling wp_insert_comment() with invalid data, triggering: preg_match(): Passing null to parameter #2 ($subject) The reply was also never federated since no proper post was created. Fix api_submit_comment to skip comment creation when comment_post_ID doesn't correspond to a real local post, falling through to api_submit_post. Fix prepare_post_data to handle a URL-based in_reply_to_id by prepending an activitypub/reply block to the post content (rather than setting an invalid post_parent), so the ActivityPub plugin can federate the reply to the correct remote URL.
…or remote replies Instead of embedding an activitypub/reply Gutenberg block into post content (which also renders as a visible embed on the frontend), store the remote URL cleanly as activitypub_in_reply_to post meta — the same approach the Friends plugin uses for its reply UI. Add an activitypub_activity_object_array filter to inject inReplyTo into the ActivityPub object from the meta at federation time.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the issue reported at https://wordpress.org/support/topic/latest-1-5-1-still-provides-errors-when-remotely-replying-to-fediverse-posts/
Problem
When replying to a remote Fediverse post (one resolved via the search endpoint), the
mastodon_api_in_reply_to_idfilter converts the numeric ID back to the original remote URL (e.g.https://social.thelab.uno/@ggrey/116312656735329169).api_submit_commentthen received this URL string as$in_reply_to_id, couldn't find a matching comment, and setcomment_post_IDto the URL string. Callingwp_insert_comment()with a URL ascomment_post_IDtriggered:The reply also never federated to the Fediverse because no proper post was created.
Replying to local posts and to followed remote users worked fine; only unfollowed remote posts were affected.
Fix
api_submit_comment: Added a guard — ifcomment_post_IDdoesn't resolve to a real local post, return early and fall through toapi_submit_post. This prevents the invalidwp_insert_comment()call.prepare_post_data: When$in_reply_to_idis a URL (non-numeric), store it asactivitypub_in_reply_topost meta — the same pattern the Friends plugin uses for its reply UI — rather than embedding it as a Gutenberg block in the post content (which would also render as a visible embed on the frontend).activitypub_in_reply_to_object_array: New filter callback onactivitypub_activity_object_arraythat injectsinReplyTointo the ActivityPub object from theactivitypub_in_reply_tometa at federation time.Test
Added
test_submit_status_reply_to_remote_postverifying that:activitypub_in_reply_tometa is set to the remote URLactivitypub/replyblock