TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

Customizing WordPress API data

July 8, 2019

Ziel

WP REST API Responses erweitern oder aufraeumen:

  • Felder entfernen
  • Extra Daten hinzufuegen (z.B. Featured Image URLs)
  • Excerpts anpassen

Filter Hook: rest_prepare_post

Der Filter wird aufgerufen, bevor ein Post als JSON ausgegeben wird:

code
add_filter('rest_prepare_post', 'my_rest_modifier', 10, 3);

Parameter:

  • $data (WP_REST_Response)
  • $post (WP_Post)
  • $context (string)

Beispiel: Featured Image URLs

code
function add_featured_image_url($data, $post, $context) {
  $id = $data->data['featured_media'];

  if (!$id) {
    return $data;
  }

  $full = wp_get_attachment_image_src($id, 'full');
  $thumb = image_get_intermediate_size($id, 'thumbnail');
  $medium = image_get_intermediate_size($id, 'medium');

  if ($thumb) {
    $data->data['featured_image_url']['thumbnail'] = $thumb['url'];
  }
  if ($medium) {
    $data->data['featured_image_url']['medium'] = $medium['url'];
  }
  if ($full) {
    $data->data['featured_image_url']['full'] = $full[0];
  }

  return $data;
}
add_filter('rest_prepare_post', 'add_featured_image_url', 10, 3);

Beispiel: Comment Count

code
function add_comment_count($data, $post, $context) {
  $count = get_comments([
    'post_id' => $post->ID,
    'count' => true,
    'status' => 'approve',
  ]);

  $data->data['comment_count'] = $count;
  return $data;
}
add_filter('rest_prepare_post', 'add_comment_count', 10, 3);

Beispiel: Excerpt bereinigen

code
function custom_excerpt($data, $post, $context) {
  if (!has_excerpt($post->ID)) {
    $data->data['excerpt']['raw'] = wp_trim_words($post->post_content, 55, ' ... ');
  }
  return $data;
}
add_filter('rest_prepare_post', 'custom_excerpt', 10, 3);

Links