WordPress pods io – Rest-API zum Abrufen von Feldinformationen für benutzerdefinierte Beitragstypen

Lesezeit: 3 Minuten

Hallo, ich habe mit Pods io einen benutzerdefinierten Beitragstyp erstellt. Immer wenn ich die Rest-API für einen benutzerdefinierten Beitragstyp drücke, erhalte ich Daten für alle Beiträge, die mit diesem Beitragstyp erstellt wurden. Aber was ich von der Rest-API brauche, ist die Konfiguration dieses Beitragstyps.

Das heißt, ich muss das Label und den Feldtyp (explainer Text, Datei/Video/Bild, wysiwyg) für diesen Beitragstyp abrufen.
Geben Sie hier die Bildbeschreibung ein

Wie in der obigen Abbildung gezeigt, muss ich alle Feldinformationen für einen bestimmten benutzerdefinierten Beitragstyp abrufen.

Ist das in WordPress mit der Rest-API möglich? Oder gibt es ein Plugin, das das kann.

Meine Anforderung ist, dass ich Felder verschiedener Typen konfigurieren und Feldinformationen für diese Seite abrufen möchte. Jedes Plugin, das das kann, wäre hilfreich.

  • stackoverflow.com/a/44007869/1374538

    – Mastababa

    5. Oktober 2017 um 22:25 Uhr

Benutzer-Avatar
Sally C.J

Sie können verwenden Pods::fields() um die Details (z. B. Label und Typ) der Felder Ihres Pods zu erhalten. Zum Beispiel:

$pod = pods( 'apc_information' );

// Get all fields.
$fields = $pod->fields();
foreach ( $fields as $field ) {
    echo $field['label'] . ' (' . $field['type'] . ')<br>';
}

// Get a specific field.
$field = $pod->fields( 'apc_title' );
echo $field['label'];

Wenn Sie nun die WordPress-REST-API verwenden möchten, um die Felddetails abzurufen, können Sie eine benutzerdefinierte REST-API-Route erstellen.

Unten ist ein funktionierendes Beispiel, das auf dem Beispiel basiert hier.

  • Die benutzerdefinierte Route, die ich verwendet habe, ist /my-plugin/v1/fields/<pod> und es hat einen GET Endpunkt: prefix_get_pods_fields() Dies ist der Rückruf zum Abrufen der Felddetails eines Pods.

  • Um die Details aller Felder in einem Pod zu erhalten, stellen Sie eine Anfrage an /wp-json/my-plugin/v1/fields/<pod> wo <pod> ist die Hülse Name/Schnecke (z.B apc_information in Ihrem Fall).

  • Um nur die Details zu einem bestimmten Feld zu erhalten, stellen Sie eine Anfrage an /wp-json/my-plugin/v1/fields/<pod>?field=<name> wo <name> ist der Feldname/Slug (z. B. die apc_title für Ihr “Titel”-Feld).

    // The endpoint callback.
    function prefix_get_pods_fields( WP_REST_Request $request ) {
        // Get the pod.
        $pod = pods( $request['pod'], null, true );
    
        // Check if the pod exists and valid.
        if ( empty( $pod ) || ! $pod->valid() ) {
            return new WP_Error( 'rest_pods_invalid', 'The pod does not exist.', array( 'status' => 404 ) );
        }
    
        // Now return the fields array/data.
        $field = isset( $request['field'] ) ? $request['field'] : null;
        return rest_ensure_response( $pod->fields( $field ) );
    }
    
    // Callback for validating a parameter value.
    function prefix_data_arg_validate_callback( $value, WP_REST_Request $request, $param ) {
        if ( 'field' === $param && ! preg_match( '/^[a-z0-9\-_]+$/', $value ) ) {
            return new WP_Error( 'rest_invalid_param', 'Invalid field name.', array( 'status' => 400 ) );
        }
        return true;
    }
    
    // Callback for sanitizing a parameter value.
    function prefix_data_arg_sanitize_callback( $value, WP_REST_Request $request, $param ) {
        if ( 'field' === $param ) {
            return sanitize_text_field( $value );
        }
        return $value; // .. please make your own logic for sanitizing other fields, if any.
    }
    
    // Parameters for the /fields endpoint.
    function prefix_get_data_arguments() {
        $args = array();
    
        $args['field'] = array(
            'description'       => 'Field name.',
            'type'              => 'string',
            'validate_callback' => 'prefix_data_arg_validate_callback',
            'sanitize_callback' => 'prefix_data_arg_sanitize_callback',
        );
    
        return $args;
    }
    
    // Register our routes.
    function prefix_register_routes() {
        register_rest_route( 'my-plugin/v1', '/fields/(?P<pod>[a-z0-9\-_]+)', array(
            'method'   => WP_REST_Server::READABLE,
            'callback' => 'prefix_get_pods_fields',
            'args'     => prefix_get_data_arguments(),
        ) );
    }
    add_action( 'rest_api_init', 'prefix_register_routes' );
    

Lassen Sie mich wissen, wenn Sie Erläuterungen zu Teilen des obigen Codes benötigen. Aber im Grunde möchten Sie das Präfix ändern (prefix_) (oder der gesamte Funktionsname) und der Routennamensraum (my-plugin/v1) zu etwas Sinnvollerem..

  • PS: Diese Antwort bezieht sich auf die aktuelle Version des Pods-Plugins. Und getestet mit WordPress 5.1.

    – Sally CJ

    9. März 2019 um 17:26 Uhr

1355240cookie-checkWordPress pods io – Rest-API zum Abrufen von Feldinformationen für benutzerdefinierte Beitragstypen

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

Privacy policy