【发布时间】:2014-12-19 13:00:43
【问题描述】:
我目前正在使用JSON REST API (WP API) 插件来获取我的帖子和页面数据。
我注意到json中没有返回我的自定义字段数据,并且查看路由,我认为我无法获取这些。
通过当前插件有什么想法,或者我如何才能做到这一点?
【问题讨论】:
我目前正在使用JSON REST API (WP API) 插件来获取我的帖子和页面数据。
我注意到json中没有返回我的自定义字段数据,并且查看路由,我认为我无法获取这些。
通过当前插件有什么想法,或者我如何才能做到这一点?
【问题讨论】:
如果您正在使用“高级自定义字段” - 在决定更正式的内容之前,您可以使用此插件:https://github.com/times/acf-to-wp-api(现在也在标准 wp 插件区域的架子上。)
它将在您的 json 结构中包含 acf: [], 下的自定义字段。
【讨论】:
要仅使用原生 WP 函数获取自定义字段值,请将以下内容添加到您的 functions.php
function my_rest_prepare_post( $data, $post, $request ) {
$_data = $data->data;
$_data[$field] = get_post_meta( $post->ID, 'my_custom_field_key', true );
$data->data = $_data;
return $data;
}
add_filter( 'rest_prepare_post', 'my_rest_prepare_post', 10, 3 );
将'my_custom_field_key' 替换为您的自定义字段键名。
对于多个字段:
function my_rest_prepare_post( $data, $post, $request ) {
$_data = $data->data;
// My custom fields that I want to include in the WP API v2 responce
$fields = ['writer', 'publisher', 'year', 'youtube_link'];
foreach ( $fields as $field ) {
$_data[$field] = get_post_meta( $post->ID, $field, true );
}
$data->data = $_data;
return $data;
}
add_filter( 'rest_prepare_post', 'my_rest_prepare_post', 10, 3 );
【讨论】:
您需要创建此文件,其中包含以下代码
wp-content\themes\name\inc\functions
<?php
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
/*
* init function
*/
if ( ! function_exists( 'mnu_rest_init' ) ) {
function mnu_rest_init() {
register_rest_route( 'guider/v1', '/booking', array(
'methods' => 'GET',
'callback' => 'handle_get_all',
'permission_callback' => function () {
return current_user_can( 'edit_others_posts' );
}
) );
register_rest_route( 'guider/v1', '/booking', array(
'methods' => 'POST',
'callback' => 'handle_post_booking',
'permission_callback' => function () {
return current_user_can( 'edit_others_posts' );
}
) );
}
}
//GET QUERY PARMS
function handle_get_all( $request_data) {
$parameters = $request_data->get_params();
$userId = $parameters["Id"];
global $wpdb;
$query = "SELECT * FROM `wp_trav_tour_bookings` WHERE `user_id` = $userId";
$list = $wpdb->get_results($query);
return $list;
}
// GET BODY PARMS
function handle_post_booking( $request_data) {
$parameters = $request_data->get_body();
$params = json_decode( $parameters , true );
// $userId = $parameters["Id"];
// global $wpdb;
// $query = "SELECT * FROM `wp_trav_tour_bookings` WHERE `user_id` = $userId";
// $list = $wpdb->get_results($query);
return $params ;
}
那么你需要添加
//actions
add_action( 'rest_api_init', 'mnu_rest_init');
到你的 main.php 中
wp-content\themes\name\inc\functions
要做到这一点,你需要将这个文件引入 main.php
require_once dirname( __FILE__ ) . '/filename.php';
【讨论】:
您可以操纵响应并将自定义字段添加到 JSON。我在示例中使用了高级自定义字段,但您可以在返回数据对象之前将任何键/值对添加到数据对象中。
// In functions.php
function modify_rest_post( $data, $post, $request ) {
if (is_admin()) {
return $data;
}
$data->my_favorite_data = get_field('my_custom_field', $post->ID);
return $data;
}
add_filter( 'rest_prepare_post', 'modify_rest_post', 10, 3 );
【讨论】: