私は投稿を取得するためのカスタムREST APIを作成します
add_action( 'rest_api_init', 'custom_api_get_all_posts' );
function custom_api_get_all_posts() {
register_rest_route( 'custom/v1', '/all-posts', array(
'methods' => 'GET',
'callback' => 'custom_api_get_all_posts_callback'
));
}
function custom_api_get_all_posts_callback( $request ) {
// Initialize the array that will receive the posts' data.
$posts_data = array();
// Receive and set the page parameter from the $request for pagination purposes
$paged = $request->get_param( 'page' );
$paged = ( isset( $paged ) || ! ( empty( $paged ) ) ) ? $paged : 1;
// Get the posts using the 'post' and 'news' post types
$posts = get_posts( array(
'paged' => $paged,
'post__not_in' => get_option( 'sticky_posts' ),
'posts_per_page' => 10,
'post_type' => listing,
'tax_query' => array(
array (
'taxonomy' => 'flux_rss',
'field' => 'slug',
'terms' => 'oui',
)
),
)
);
// Loop through the posts and Push the desired data to the array we've initialized earlier in the form of an object
foreach( $posts as $post ) {
$id = $post->ID;
$post_thumbnail = ( has_post_thumbnail( $id ) ) ? get_the_post_thumbnail_url( $id ) : null;
$posts_data[] = (object) array(
'id' => $id,
'title' => $post->post_title,
'excerpt' => wp_json_encode($post->post_excerpt),
'link' => $post->guid,
'featured_img_src' => $post_thumbnail
);
}
return $posts_data;
}
しかし、私はどのように私はutf8にJSON応答を変換することができますので、応答でいくつかの特別な文字を得る
[{
"id": 2087,
"title": "Avec l\u2019ONPA",
"excerpt": "\"Avec cette association cr\\u00e9\\u00e9e en 1971, les s\\u00e9niors de 55 ans et plus, en activit\\u00e9 professionnelle ou non, et vivant \\u00e0 domicile, m\\u00e8nent une vie active...\"",
"link": "http:\/\/localhost\/focus\/?post_type=listing&p=2087",
"featured_img_src": "http:\/\/localhost\/focus\/wp-content\/uploads\/2018\/05\/avec-lonpa.jpg"
},
問題はここにあります:
'excerpt' => wp_json_encode($post->post_excerpt),
その配列はREST APIによってwp_json_encode
を通過するので、二重にエンコードされます。したがって、ここでwp_json_encode
を削除してください。これはうまくエンコードされ、文字通りの人間読み取り可能な値ではありません。
例えば。それをあなたのブラウザの開発コンソールに入れて結果を出力すれば、問題ないことがわかります。
ご覧のとおり、’
は\u2019O
のUnicode文字コードであるため、20190
は’
としてエンコードされています。HTMLでは、何らかの形式のエンコードなしでこれらの文字をネイティブに使用することはできません。 HTMLを調べると&
が表示されますが、ブラウザで表示すると&
が表示されるのと同じことがここで行われています。