Comments: In wp_xmlrpc_server::pingback_ping():

* Rename `$linea` to `$remote_source` for clarity. 
* Add `remote_source` to comment data, so it's available to `preprocess_comment` and `comment_post` filters.
* Pass the original (unfiltered) response source to the filters too (as `remote_source_original` in comment data).

Props dshanske for the original patch.
Fixes #34141.

git-svn-id: https://develop.svn.wordpress.org/trunk@36661 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2016-02-24 00:55:01 +00:00
parent 1c00dc7150
commit 822bdab3af

View File

@ -6277,35 +6277,37 @@ class wp_xmlrpc_server extends IXR_Server {
'X-Pingback-Forwarded-For' => $remote_ip,
),
);
$request = wp_safe_remote_get( $pagelinkedfrom, $http_api_args );
$linea = wp_remote_retrieve_body( $request );
if ( !$linea )
$request = wp_safe_remote_get( $pagelinkedfrom, $http_api_args );
$remote_source = $remote_source_original = wp_remote_retrieve_body( $request );
if ( ! $remote_source ) {
return $this->pingback_error( 16, __( 'The source URL does not exist.' ) );
}
/**
* Filter the pingback remote source.
*
* @since 2.5.0
*
* @param string $linea Response object for the page linked from.
* @param string $pagelinkedto URL of the page linked to.
* @param string $remote_source Response source for the page linked from.
* @param string $pagelinkedto URL of the page linked to.
*/
$linea = apply_filters( 'pre_remote_source', $linea, $pagelinkedto );
$remote_source = apply_filters( 'pre_remote_source', $remote_source, $pagelinkedto );
// Work around bug in strip_tags():
$linea = str_replace('<!DOC', '<DOC', $linea);
$linea = preg_replace( '/[\r\n\t ]+/', ' ', $linea ); // normalize spaces
$linea = preg_replace( "/<\/*(h1|h2|h3|h4|h5|h6|p|th|td|li|dt|dd|pre|caption|input|textarea|button|body)[^>]*>/", "\n\n", $linea );
$remote_source = str_replace( '<!DOC', '<DOC', $remote_source );
$remote_source = preg_replace( '/[\r\n\t ]+/', ' ', $remote_source ); // normalize spaces
$remote_source = preg_replace( "/<\/*(h1|h2|h3|h4|h5|h6|p|th|td|li|dt|dd|pre|caption|input|textarea|button|body)[^>]*>/", "\n\n", $remote_source );
preg_match('|<title>([^<]*?)</title>|is', $linea, $matchtitle);
preg_match( '|<title>([^<]*?)</title>|is', $remote_source, $matchtitle );
$title = $matchtitle[1];
if ( empty( $title ) )
return $this->pingback_error( 32, __('We cannot find a title on that page.' ) );
$linea = strip_tags( $linea, '<a>' ); // just keep the tag we need
$remote_source = strip_tags( $remote_source, '<a>' ); // just keep the tag we need
$p = explode( "\n\n", $linea );
$p = explode( "\n\n", $remote_source );
$preg_target = preg_quote($pagelinkedto, '|');
@ -6353,7 +6355,10 @@ class wp_xmlrpc_server extends IXR_Server {
$this->escape($comment_content);
$comment_type = 'pingback';
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_content', 'comment_type');
$commentdata = compact(
'comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email',
'comment_content', 'comment_type', 'remote_source', 'remote_source_original'
);
$comment_ID = wp_new_comment($commentdata);