POST-Anforderung des benutzerdefinierten Wp-Rest-API-Endpunkts

Lesezeit: 5 Minuten

Ich versuche, einige Daten an einen benutzerdefinierten API-Endpunkt zu senden, den ich erstellt habe.

Dies ist mein benutzerdefinierter WordPress-Endpunktcode.

register_rest_route( 'api/v1', '/cities', array(
    'methods' => 'POST',
    'callback' => 'create_city_from_data'
));

Und zum Testen versuche ich, die Anfrage so zurückzugeben

function create_city_from_data($req) {
  return ['req' => $req];
}

aber ich erhalte immer ein leeres Objekt als Antwort, was auch immer ich als Nutzlast sende, ich habe nichts erhalten.

Meine Nutzlast ist ungefähr so

{ name: 'Hello', population: 565656 }

Dies ist, was von der Anfrage empfangen wird

{"req":{}}

Mit dem folgenden Code können Sie Ihre Nutzlast anzeigen.

    add_action('rest_api_init', function () {
        register_rest_route( 'api/v1', '/cities', array(
            'methods' => 'POST',
            'callback' => 'create_city_from_data'
        ));
    });
    function create_city_from_data($req) {
        $response['name'] = $req['name'];
        $response['population'] = $req['population'];

        $res = new WP_REST_Response($response);
        $res->set_status(200);

        return ['req' => $res];
    }

Ich habe Postman verwendet, um den POST-Parameter anzuzeigen

Benutzeravatar von Dipak Mahajan
Dipak Mahajan

Mit dieser Funktion können Sie alle Beiträge Ihres benutzerdefinierten Beitragstyps in der API sehen …
Erhalten Sie alle Beiträge in Ihrem API-Viewer.
Schriftsteller URL auf Ihrem API-Viewer (z. B. habe ich Postman json api view, google chrome adon verwendet)

Domain-name/wp-json/showFavorites/v2?post_type=hotel

Hier ist „Hotel“ der benutzerdefinierte Beitragstyp.

Fügen Sie diese Funktion in Ihre functions.php ein

add_action( 'rest_api_init', 'wp_api_show_favorites_endpoints' );
function wp_api_show_favorites_endpoints() {
  register_rest_route( 'showFavorites', '/v2', array(
        'methods' => 'GET',
        'callback' => 'showFavorites_callback',
    ));
}
function showFavorites_callback( $request_data ) {
  global $wpdb;
    $data = array();

    $table="wp_posts";
  $parameters = $request_data->get_params();
  $post_type = $parameters['post_type'];

  if($post_type!=''){
      $re_query     = "SELECT * FROM $table where post_type="$post_type"";
      $pre_results  = $wpdb->get_results($re_query,ARRAY_A);   
      return $pre_results;

  }else{
      $data['status']=' false ';
      return $data;

  } 
}

Und damit können Sie Ihre Inhalte von der API aus posten

        // POST All Posts using API
add_action( 'rest_api_init', 'wp_api_add_posts_endpoints' );
function wp_api_add_posts_endpoints() {
  register_rest_route( 'addPost', '/v2', array(
        'methods' => 'POST',
        'callback' => 'addPosts_callback',
    ));
}
function addPosts_callback( $request_data ) {
  global $wpdb;
  $data = array();
  $table="wp_posts";

  // Fetching values from API
  $parameters = $request_data->get_params();
  $user_id = $parameters['user_id'];
  $post_type = $parameters['post_type'];
  $post_title = $parameters['post_title'];
  $the_content = $parameters['the_content'];
  $cats = $parameters['cats'];
  $the_excerpt = $parameters['the_excerpt'];
  $feature_img = $parameters['featured_image'];

  // custom meta values
  $contact_no = $parameters['contact_no'];
  $email = $parameters['email'];
  $hotel_url = $parameters['hotel_url'];


  if($post_type!='' && $post_title!=''){

      // Create post object
      $my_post = array(
        'post_title' => wp_strip_all_tags( $post_title),
        'post_content' => $the_content,
        'post_author' => '',
        'post_excerpt' => $the_excerpt,
        'post_status' => 'publish',
        'post_type' => $post_type,
      );
      $new_post_id = wp_insert_post( $my_post );


      function wp_api_encode_acf($data,$post,$context){
          $customMeta = (array) get_fields($post['ID']);

           $data['meta'] = array_merge($data['meta'], $customMeta );
          return $data;
      }

      if( function_exists('get_fields') ){
          add_filter('json_prepare_post', 'wp_api_encode_acf', 10, 3);
      }


      // Set post categories
      $catss = explode(',', $cats);
      if (!empty($catss)) {
        if ($post_type == 'post') {
          wp_set_object_terms( $new_post_id, $catss, 'category', false );
        }
        else{
          wp_set_object_terms( $new_post_id, $catss, 'Categories', false );   // Executes if posttype is other
        }
      }

      // Set Custom Metabox
      if ($post_type != 'post') {
        update_post_meta($new_post_id, 'contact-no', $contact_no);
        update_post_meta($new_post_id, 'email', $email);
        update_post_meta($new_post_id, 'hotel-url', $hotel_url);
      }

      // Set featured Image
      $url = $feature_img;
      $path = parse_url($url, PHP_URL_PATH);
      $filename = basename($path);

      $uploaddir = wp_upload_dir();
      $uploadfile = $uploaddir['path'] . "https://stackoverflow.com/" . $filename;

      $contents= file_get_contents($feature_img);
      $savefile = fopen($uploadfile, 'w');
      chmod($uploadfile, 0777);
      fwrite($savefile, $contents);
      fclose($savefile);

      $wp_filetype = wp_check_filetype(basename($filename), null );

      $attachment = array(
          'post_mime_type' => $wp_filetype['type'],
          'post_title' => $filename,
          'post_content' => '',
          'post_status' => 'inherit'
      );

      $attach_id = wp_insert_attachment( $attachment, $uploadfile );

      if ($attach_id) {
        set_post_thumbnail( $new_post_id, $attach_id );
      }

      if ($new_post_id) {
          $data['status']='Post added Successfully.';  
      }
      else{
        $data['status']='post failed..';
      }

  }else{
      $data['status']=' Please provide correct post details.';
  }

  return ($data);
}

Der an die Callback-Funktion übergebene Objektparameter ist a WP_REST_REQUST Objekt und hat a get_body() Methode darauf, die die zurückgibt payload/post body des HTTP-Post-Requests.

function create_city_from_data(WP_REST_Request $req) {
  $body = $req->get_body()
  return ['req' => $body];
}

Das habe ich heute beim Lesen erfahren Dieser Artikel

Sie können den Objekttyp auch in der Methodensignatur deklarieren, falls Sie die Dokumentation danach durchsuchen müssen (wie oben).

  • Auch $req->get_body_params()

    – Max Caroll

    28. August 2019 um 9:43 Uhr


CURL-Anfrage:

$url = $your_url; // your url should like: http://host.com/wp-json/v1/'.$key
$post_string = json_encode($post_data);// make json string of post data

$ch = curl_init();   //curl initialisation                      
curl_setopt($ch, CURLOPT_URL, $url); // add url 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // get return value 
curl_setopt($ch, CURLOPT_POST, true); // false for GET request
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); // add post data
curl_setopt($crl, CURLOPT_HTTPHEADER, array(
               'Content-Type: application/json',
                'Content-Length: ' . strlen($post_string))
);// add header 
$output = curl_exec($ch);
curl_close($ch); // close curl
$error = curl_error($ch); // get error 
if(!$error){
        return json_decode($output);
 }else{
      return $error;
 } 

Für Handle Request im PLUGIN-Kontext:

public static function handle_requests(WP_REST_Request $request){
        $return_data = [];
        //get GET params
        $key = $request['key'];
        //get POST values
        $post_data = json_decode($request->get_body());
        
        //$return_data =  $post_data;
      if ( empty( $return_data ) ) {
            return new WP_Error( 'error', 'Invalid Request', array( 'status' => 404 ) );
        }else{
            return $return_data;
        } 

    }

Ihre WP-REST-API-AKTION:

add_action( 'rest_api_init', function () {
     register_rest_route( '/v1', '/(?P<key>[\w]+)', array(
    'methods' => ['GET', 'POST'],
    'callback' => 'YOUR_CLASS::handle_requests',
    'permission_callback' => '__return_true'        
    ) );
  } );
//permission_callback need to add for wordpress newer versions. 

1402620cookie-checkPOST-Anforderung des benutzerdefinierten Wp-Rest-API-Endpunkts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy