syslex Schnittstelle Anschluss #509

Open
opened 2025-09-29 07:01:57 +00:00 by joerglohrer · 0 comments
Owner

Dies ist die Weiterführung aus dem Archiv Comenius-Institut/ARCHIV-rpi-virtuell_und_FOERBICO#119

@colibri hat die Anleitung von @joachim-happel weitergegeben und wir warten noch auf Antwort:

Kurze Anweisung für eure IT:

REST-Endpoint erlauben

Im Moment blockiert WordPress alle unauthentifizierten GET-Requests auf

  1. https://syslex-online.de/wp-json/wp/v2/syslex_article/
  2. https://syslex-online.de/wp-json/wp/v2/article

und auch auf einzelne Artikel wie

  1. https://syslex-online.de/wp-json/wp/v2/syslex_article/3693 - (Fehler 401)

Zugriff freischalten

Ihr müsst im Theme-functions.php oder in einem kleinen Plugin dafür sorgen,
dass permission_callback für diese Endpoints immer true liefert und zusätzlich alle benötigten Meta- und Taxonomie-Felder registriert werden.

Beispiel-Code
Diesen kompletten PHP-Code einfügen (z.B. in ein Site-Specific-Plugin oder ins functions.php eures Child-Themes):

<?php
// 1. Custom Post Type REST-Zugriff freigeben
add_action('rest_api_init', function() {
    // Wenn ihr 'syslex_article' als CPT registriert habt:
    register_post_type('syslex_article', [
        'show_in_rest' => true,
        'rest_base'    => 'syslex_article',
        'rest_controller_class' => 'WP_REST_Posts_Controller',
        'public'       => true,
        // Erlaubt allen Gästen Lesezugriff
        'capability_type' => 'post',
        'map_meta_cap'    => true,
    ]);
    // Falls ihr das CPT 'article' nutzt:
    register_post_type('article', [
        'show_in_rest' => true,
        'rest_base'    => 'article',
        'rest_controller_class' => 'WP_REST_Posts_Controller',
        'public'       => true,
        'capability_type' => 'post',
        'map_meta_cap'    => true,
    ]);
});

// 2. Alle Postmeta-Felder und Taxonomien zum REST-Response hinzufügen
add_action('rest_api_init', function() {
    // Beispiel für alle Meta-Felder eures CPT
    register_rest_field('syslex_article', 'meta', [
        'get_callback'    => function($object) {
            return get_post_meta($object['id']);
        },
        'update_callback' => null,
        'schema'          => null,
    ]);

    // Beispiel: Taxonomie 'category' hinzufügen
    register_rest_field('syslex_article', 'categories', [
        'get_callback' => function($object) {
            return wp_get_post_terms($object['id'], 'category', ['fields' => 'all']);
        },
        'schema' => null,
    ]);

    // Für CPT 'article' analog:
    register_rest_field('article', 'meta', [
        'get_callback' => function($object) {
            return get_post_meta($object['id']);
        },
        'schema' => null,
    ]);
    register_rest_field('article', 'categories', [
        'get_callback' => function($object) {
            return wp_get_post_terms($object['id'], 'category', ['fields' => 'all']);
        },
        'schema' => null,
    ]);
});

// 3. Optional: permission_callback für einzelne Endpoints sicherstellen
add_filter('rest_endpoints', function($endpoints) {
    foreach ($endpoints as $route => $handlers) {
        if (strpos($route, '/wp/v2/syslex_article') === 0 || strpos($route, '/wp/v2/article') === 0) {
            foreach ($handlers as &$handler) {
                // Nur für GET-Methoden
                if (in_array('GET', $handler['methods'])) {
                    $handler['permission_callback'] = '__return_true';
                }
            }
        }
    }
    return $endpoints;
});

Was das macht:

show_in_rest => true und rest_base öffnen den Endpoint.
register_rest_field holt alle Postmeta und Taxonomie-Daten.
Der Filter auf rest_endpoints sorgt dafür, dass keine Authentifizierung nötig ist.

Mit diesem Code könnt ihr anschließend:

  • Liste aller Artikel abrufen: GET https://syslex-online.de/wp-json/wp/v2/syslex_article/
  • Einzelnen Artikel abrufen: GET https://syslex-online.de/wp-json/wp/v2/syslex_article/{ID}
    Danach sollten keine 401-Fehler mehr kommen und alle Meta-/Feld-Daten mitgeliefert werden.
Dies ist die Weiterführung aus dem Archiv https://git.rpi-virtuell.de/Comenius-Institut/ARCHIV-rpi-virtuell_und_FOERBICO/issues/119 @colibri hat die Anleitung von @joachim-happel weitergegeben und wir warten noch auf Antwort: Kurze Anweisung für eure IT: #### REST-Endpoint erlauben Im Moment blockiert WordPress alle unauthentifizierten GET-Requests auf 1. https://syslex-online.de/wp-json/wp/v2/syslex_article/ 2. https://syslex-online.de/wp-json/wp/v2/article und auch auf einzelne Artikel wie 1. https://syslex-online.de/wp-json/wp/v2/syslex_article/3693 - (Fehler 401) #### Zugriff freischalten Ihr müsst im Theme-functions.php oder in einem kleinen Plugin dafür sorgen, dass `permission_callback` für diese Endpoints immer `true` liefert und zusätzlich alle benötigten Meta- und Taxonomie-Felder registriert werden. **Beispiel-Code** Diesen kompletten PHP-Code einfügen (z.B. in ein Site-Specific-Plugin oder ins functions.php eures Child-Themes): ``` <?php // 1. Custom Post Type REST-Zugriff freigeben add_action('rest_api_init', function() { // Wenn ihr 'syslex_article' als CPT registriert habt: register_post_type('syslex_article', [ 'show_in_rest' => true, 'rest_base' => 'syslex_article', 'rest_controller_class' => 'WP_REST_Posts_Controller', 'public' => true, // Erlaubt allen Gästen Lesezugriff 'capability_type' => 'post', 'map_meta_cap' => true, ]); // Falls ihr das CPT 'article' nutzt: register_post_type('article', [ 'show_in_rest' => true, 'rest_base' => 'article', 'rest_controller_class' => 'WP_REST_Posts_Controller', 'public' => true, 'capability_type' => 'post', 'map_meta_cap' => true, ]); }); // 2. Alle Postmeta-Felder und Taxonomien zum REST-Response hinzufügen add_action('rest_api_init', function() { // Beispiel für alle Meta-Felder eures CPT register_rest_field('syslex_article', 'meta', [ 'get_callback' => function($object) { return get_post_meta($object['id']); }, 'update_callback' => null, 'schema' => null, ]); // Beispiel: Taxonomie 'category' hinzufügen register_rest_field('syslex_article', 'categories', [ 'get_callback' => function($object) { return wp_get_post_terms($object['id'], 'category', ['fields' => 'all']); }, 'schema' => null, ]); // Für CPT 'article' analog: register_rest_field('article', 'meta', [ 'get_callback' => function($object) { return get_post_meta($object['id']); }, 'schema' => null, ]); register_rest_field('article', 'categories', [ 'get_callback' => function($object) { return wp_get_post_terms($object['id'], 'category', ['fields' => 'all']); }, 'schema' => null, ]); }); // 3. Optional: permission_callback für einzelne Endpoints sicherstellen add_filter('rest_endpoints', function($endpoints) { foreach ($endpoints as $route => $handlers) { if (strpos($route, '/wp/v2/syslex_article') === 0 || strpos($route, '/wp/v2/article') === 0) { foreach ($handlers as &$handler) { // Nur für GET-Methoden if (in_array('GET', $handler['methods'])) { $handler['permission_callback'] = '__return_true'; } } } } return $endpoints; }); ``` Was das macht: `show_in_rest => true` und `rest_base` öffnen den Endpoint. `register_rest_field` holt alle Postmeta und Taxonomie-Daten. Der Filter auf `rest_endpoints` sorgt dafür, dass keine Authentifizierung nötig ist. Mit diesem Code könnt ihr anschließend: - Liste aller Artikel abrufen: `GET https://syslex-online.de/wp-json/wp/v2/syslex_article/` - Einzelnen Artikel abrufen: `GET https://syslex-online.de/wp-json/wp/v2/syslex_article/{ID}` Danach sollten keine 401-Fehler mehr kommen und alle Meta-/Feld-Daten mitgeliefert werden.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Comenius-Institut/FOERBICO_und_rpi-virtuell#509
No description provided.