Benutzerdefinierte Beitragstypdaten können nicht über die REST-API mit get_post() abgerufen werden

Lesezeit: 2 Minuten

Ich versuche, Daten von einem benutzerdefinierten Posttyp Single Post Through abzurufen REST API. Mit get_posts() es funktioniert gut:

function single_project($data) {
  $args = array(
    'post_type' => 'project',
    'posts_per_page'=> 1,
    'p' => $data
  );  
  return get_posts($args);
}

add_action('rest_api_init', function () {
  register_rest_route( 'project/v1', 'post/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'single_project',
    'args' => [
      'id'
    ]
  ));
});

Aber in meinem Front-End erhalte ich ein Array und ich muss die Daten aus dem ersten und einzigen Element dieses Arrays abrufen, was nicht schön ist.

get_post() klingt wie die Lösung, aber aus irgendeinem Grund funktioniert es nicht: Die ID wird nicht durch die REST-API weitergegeben und ich kann nicht sehen, warum.

function single_project($data) {
  return get_post($data);
}

Das add_action() { ... } Code ist identisch.

Irgendeine Idee, warum es nicht funktioniert?

Benutzer-Avatar
cabrerahektor

Wenn Sie die Dokumentation überprüfen (Hinzufügen benutzerdefinierter Endpunkte | WordPress-REST-API) das merkt man $data eigentlich ein Array ist und Ihr Code daher nicht das tut, was Sie erwarten, weil Sie ein Array an übergeben get_post() Funktion, die entweder eine Ganzzahl (die Beitrags-ID) oder eine erwartet WP_Post Objekt statt.

So:

function single_project($data) {
  $post_ID = $data['id'];
  return get_post($post_ID);
}

add_action('rest_api_init', function () {
  register_rest_route( 'project/v1', 'post/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'single_project',
    'args' => [
      'id'
    ]
  ));
});

Versuchen Sie es auf diese Weise

add_action( 'rest_api_init', 'my_register_route');
function my_register_route() {

      register_rest_route( 'my-route', 'my-posts/(?P<id>\d+)', array(
            'methods' => 'GET',
            'callback' => 'my_posts',
            'args' => array(
                    'id' => array( 
                        'validate_callback' => function( $param, $request, $key ) {
                            return is_numeric( $param );
                        }
                    ),
                ),
            'permission_callback' => function() {
                return current_user_can( 'edit_others_posts' );
                }, 
        );
}

function my_posts( $data ) {

    // default the author list to all
    $post_author="all";

    // if ID is set
    if( isset( $data[ 'id' ] ) ) {
          $post_author = $data[ 'id' ];
    }

    // get the posts
    $posts_list = get_posts( array( 'type' => 'post', 'author' => $post_author ) );
    $post_data = array();

    foreach( $posts_list as $posts) {
        $post_id = $posts->ID;
        $post_author = $posts->post_author;
        $post_title = $posts->post_title;
        $post_content = $posts->post_content;

        $post_data[ $post_id ][ 'author' ] = $post_author;
        $post_data[ $post_id ][ 'title' ] = $post_title;
        $post_data[ $post_id ][ 'content' ] = $post_content;
    }

    wp_reset_postdata();

    return rest_ensure_response( $post_data );
}

1137230cookie-checkBenutzerdefinierte Beitragstypdaten können nicht über die REST-API mit get_post() abgerufen werden

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

Privacy policy