web-dev-qa-db-fra.com

Filtrer le contenu du message dans REST API

J'essaie de permettre à un plug-in de modifier le contenu affiché des articles avant son affichage pour l'API WP, ou du moins de l'enregistrer en tant que propriété distincte sur cette réponse JSON.

Par exemple, imaginez un plugin qui modifie le contenu d’un message de

Voici du contenu: foo

à

Voici du contenu: bar

Il est configuré pour utiliser le filtre the_post pour apporter ses modifications à l'interface. Mais le REST api n'est pas affecté. J'ai essayé d'utiliser le filtre rest_prepare_post mais c'est (a) apparemment une mauvaise pratique pour modifier directement le contenu rendu, donc je le mettrais comme une propriété supplémentaire? et (b) difficile de travailler avec - si j'essaye d'assigner $ data -> $ data ['content'] ['render'] à une variable, je reçois le message que j'essaie de convertir un WP Reste l'objet réponse à une chaîne. Pourtant, si je produis cette même variable dans mon journal des erreurs, cela fonctionne correctement.

add_filter( 'rest_prepare_post', array( __CLASS__, 'beforeFilterRest' ), 0, 2 );

public static function beforeFilterRest( $data, $post ){

            $old_rendered_content = $data->$data['content']['rendered'];
            $data->$data['content']['rendered'] = preg_replace_callback(
                "/\s*<pre(?:lang=[\"']([\w-]+)[\"']|line=[\"'](\d*)[\"']|escaped=[\"'](true|false)?[\"']|highlight=[\"']((?:\d+[,-])*\d+)[\"']|src=[\"']([^\"']+)[\"']|\s)+>(.*)<\/pre>\s*/siU",
                array( __CLASS__, 'substituteToken' ),
                $old_rendered_content
            ); 
            return $data;
    }

Je reçois une erreur juste à la première ligne de cette fonction. Qu'est-ce que je rate?

1
tmdesigned

Il me semble que vous avez écrit $data->$data[...] où vous voulez avoir $data->data[...]. L'erreur de conversion "object to string" est probablement due au second $data, où PHP s'attend à un nom de propriété d'objet mais obtient une autre référence à l'objet $data.

2
Pat J