syslex Schnittstelle Anschluss #119

Closed
opened 2025-07-07 07:22:13 +00:00 by colibri · 3 comments
Owner

Anfrage von Syslex an rpi virtuell:

@joachim-happel hast du denen geantwortet per Mail?
https://syslex-online.de/
Magst du uns vielleicht ein Mal das technische Problem schildern, dass einen Datentransfer von SysLex in eure Datenbank problematisch macht und euch zum händischen Einpflegen nötigt? Wir könnten mit unserer Technikerin dann ein Mal besprechen, ob es dafür vielleicht einen Workaround gibt oder ob eine Schnittstelle programmiert werden könnte.

Anfrage von Syslex an rpi virtuell: @joachim-happel hast du denen geantwortet per Mail? https://syslex-online.de/ Magst du uns vielleicht ein Mal das technische Problem schildern, dass einen Datentransfer von SysLex in eure Datenbank problematisch macht und euch zum händischen Einpflegen nötigt? Wir könnten mit unserer Technikerin dann ein Mal besprechen, ob es dafür vielleicht einen Workaround gibt oder ob eine Schnittstelle programmiert werden könnte.
colibri added this to the ARCHIV: Montagsmeeting rpi-virtuell und FOERBICO project 2025-07-07 07:22:13 +00:00
colibri changed title from Syntax Schnittstelle Anschluss to syslex Schnittstelle Anschluss 2025-07-07 07:23:00 +00:00
Author
Owner

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.
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.
Owner

@colibri wartet noch auf Antwort

@colibri wartet noch auf Antwort
Owner
umgezogen nach https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO_und_rpi-virtuell/issues/509
Sign in to join this conversation.
No milestone
No assignees
2 participants
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/ARCHIV-rpi-virtuell_und_FOERBICO#119
No description provided.