【问题标题】:wordpress json rest API to get custom field datawordpress json rest API 获取自定义字段数据
【发布时间】:2014-12-19 13:00:43
【问题描述】:

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

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

通过当前插件有什么想法,或者我如何才能做到这一点?

【问题讨论】:

    标签: json wordpress api


    【解决方案1】:

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

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

    【讨论】:

    • acf数组总是空的,请指导一下。
    • @Riz - 您必须将自定义帖子类型设置为“在 json 中显示”或其他内容。检查一下,会的。
    【解决方案2】:

    要仅使用原生 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 );
    

    【讨论】:

    【解决方案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';
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 2021-10-31
        • 1970-01-01
        • 2021-03-01
        • 2017-04-02
        • 2014-05-06
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        相关资源
        最近更新 更多