WordPress.org

Make WordPress Core

Ticket #36765: 36765.7.diff

File 36765.7.diff, 2.2 KB (added by dshanske, 4 years ago)

Update based on feedback

  • src/wp-includes/class-wp-xmlrpc-server.php

    diff --git src/wp-includes/class-wp-xmlrpc-server.php src/wp-includes/class-wp-xmlrpc-server.php
    index 48b18a4..2b49a07 100644
    class wp_xmlrpc_server extends IXR_Server { 
    62346234                        return $this->pingback_error( 0, __( 'Is there no link to us?' ) );
    62356235
    62366236                // let's find which post is linked to
    6237                 // FIXME: does url_to_postid() cover all these cases already?
    6238                 //        if so, then let's use it and drop the old code.
    6239                 $urltest = parse_url($pagelinkedto);
    6240                 if ( $post_ID = url_to_postid($pagelinkedto) ) {
    6241                         // $way
    6242                 } elseif ( isset( $urltest['path'] ) && preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) {
    6243                         // the path defines the post_ID (archives/p/XXXX)
    6244                         $blah = explode('/', $match[0]);
    6245                         $post_ID = (int) $blah[1];
    6246                 } elseif ( isset( $urltest['query'] ) && preg_match('#p=[0-9]{1,}#', $urltest['query'], $match) ) {
    6247                         // the querystring defines the post_ID (?p=XXXX)
    6248                         $blah = explode('=', $match[0]);
    6249                         $post_ID = (int) $blah[1];
    6250                 } elseif ( isset($urltest['fragment']) ) {
    6251                         // an #anchor is there, it's either...
    6252                         if ( intval($urltest['fragment']) ) {
    6253                                 // ...an integer #XXXX (simplest case)
    6254                                 $post_ID = (int) $urltest['fragment'];
    6255                         } elseif ( preg_match('/post-[0-9]+/',$urltest['fragment']) ) {
    6256                                 // ...a post id in the form 'post-###'
    6257                                 $post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']);
    6258                         } elseif ( is_string($urltest['fragment']) ) {
    6259                                 // ...or a string #title, a little more complicated
    6260                                 $title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
    6261                                 $sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", $title );
    6262                                 if (! ($post_ID = $wpdb->get_var($sql)) ) {
    6263                                         // returning unknown error '0' is better than die()ing
    6264                                         return $this->pingback_error( 0, '' );
    6265                                 }
    6266                         }
    6267                 } else {
    6268                         // TODO: Attempt to extract a post ID from the given URL
    6269                         return $this->pingback_error( 33, __('The specified target URL cannot be used as a target. It either doesn’t exist, or it is not a pingback-enabled resource.' ) );
    6270                 }
     6237                $post_ID = url_to_postid( $pagelinkedto );
    62716238                $post_ID = (int) $post_ID;
    62726239
    62736240                $post = get_post($post_ID);