it-swarm.com.de

So erhalten Sie benutzerdefinierte Post-Metas mit REST API

Ich versuche, eine REST -API für meine WordPress-Website zu erstellen, die mit dem WordPress-Job-Manager-Plugin für die Auflistung von Einrichtungen verwendet wird.

Ich habe meinen benutzerdefinierten Post Taxonomies in\plugins\rest-api\plugin.php registriert.

die folgende API gibt mir alle Listen mit Standardantwort.

http: // localhost/sports/wp-json/wp/v2/joblisting/

Ich wollte der JSON-Antwort Post-Meta mit dem folgenden Code hinzufügen.

function slug_register_phone_number() {
            register_rest_field( 'job_listing',
                'phone',
            array(
                'get_callback' => 'slug_get_phone_number',
                'update_callback' => null,
                'schema' => null,
            )
        );
    }

    function slug_get_phone_number($post, $field_name, $request) {
        return get_post_meta($post->id, '_phone' );
    }
}

Unter Verwendung des obigen Codes kann ich "phone" als REST Antwort hinzufügen, aber ich erhalte immer phone = false als Antwort. Es werden nicht die korrekten Daten aus der Tabelle wp_postmeta angezeigt.

Ich habe unten genannten Links als Referenz gefolgt.

http://v2.wp-api.org/extending/modifying/

Stecken Sie Details ein. 1. WP Jobmanager 2. rest-api

Jede Hilfe wird sehr hilfreich sein.

9
Hari Soni

$post in der Rückruffunktion ist ein Array, kein Objekt. Sie können also $post->id nicht verwenden. Ändern Sie es in $post['id'] und es sollte funktionieren:

function slug_get_phone_number($post, $field_name, $request)
{
    return get_post_meta($post['id'], '_phone', true);
}

Ich empfehle, _phone in phone_number oder etwas anderes ohne Unterstreichungspräfix zu ändern. Weil _ oft mit privaten Metaschlüsseln verwendet wird. Versuchen Sie, ein benutzerdefiniertes Feld mit einem Metaschlüssel mit dem Präfix _ direkt zu Ihrem Beitrag hinzuzufügen. Sie werden sehen, was ich damit gemeint habe.

5
MinhTri

Die WP-API verfügt über einen rest_prepare_post-Filter (oder rest_prepare_CPT, wenn Sie mit benutzerdefinierten Posts arbeiten), mit dem Sie die JSON-Antwort ändern können. In Ihrem Fall ist es rest_prepare_joblisting.

function filter_joblisting_json( $data, $post, $context ) {
$phone = get_post_meta( $post->ID, '_phone', true );

if( $phone ) {
    $data->data['phone'] = $phone;
}

return $data;
}
add_filter( 'rest_prepare_joblisting', 'filter_joblisting_json', 10, 3 );

Mit demselben Filter können Sie auch Felder/Daten aus der Antwort entfernen und die Daten bearbeiten. Hier finden Sie einige Beispiele für die Verwendung des Filters, die nützlich sein können, und erfahren Sie, wie es funktioniert.

16
Boris Kuzmanov

Füge diese Methode einfach zu function.php hinzu

add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {

 // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
 register_rest_field( 'tour', 'metaval', array(
 'get_callback' => 'get_post_meta_for_api',
 'schema' => null,
 )
 );
}

function get_post_meta_for_api( $object ) {
 //get the id of the post object array
 $post_id = $object['id'];

 //return the post meta
 return get_post_meta( $post_id );
}
1
Nuwan