wordpress json rest API获取自定义字段数据

时间:2014-12-19 13:00:44

标签: json wordpress api

我目前正在使用JSON REST API (WP API)插件来获取我的帖子和页面数据。

我注意到我的自定义字段数据都没有在json中返回,并且查看路径,我认为我无法获得这些数据。

通过当前插件的任何想法,或者我怎么能做到这一点呢?

4 个答案:

答案 0 :(得分:1)

如果您使用的是“高级自定义字段” - 在确定更正式的字段之前,您可以使用此插件:https://github.com/times/acf-to-wp-api(现在也可以在标准的wp插件区域中使用。)

它将在json结构中包含acf: [],下的自定义字段。

答案 1 :(得分:1)

您需要在

中创建此文件包含以下代码
  

可湿性粉剂内容\主题\名\ INC \功能

   <?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
  

可湿性粉剂内容\主题\名\ INC \功能

要做到这一点,你需要将此文件发送到main.php

require_once dirname( __FILE__ ) . '/filename.php';

答案 2 :(得分:0)

您可以操作响应并将自定义字段添加到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 );

答案 3 :(得分:0)

要仅使用本机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 );