当前位置: 首页 > 知识库问答 >
问题:

用元字段创建帖子WP REST API

楚健
2023-03-14

我刚刚开始使用REST API,并使用它从前端创建帖子。我设法发表了一篇有标题、摘录和内容的文章。我还想添加一个自定义元字段值,非常感谢任何示例或帮助。

这是我的Ajax代码,所有其他字段都正常工作,除了元值没有在post中添加

jQuery( document ).ready( function ( $ ) {
$( '#post-submission-form' ).on( 'submit', function(e) {
    e.preventDefault();
    var title = $( '#post-submission-title' ).val();
    var excerpt = $( '#post-submission-excerpt' ).val();
    var content = $( '#post-submission-content' ).val();
    var status = 'draft';

    var data = {
        title: title,
        excerpt: excerpt,
        content: content,
        status: status,
        meta: {
            'video_url_url' : 'abc',
        }

    };

    $.ajax({
        method: "POST",
        url: POST_SUBMITTER.root + 'wp/v2/posts',
        data: data,
        beforeSend: function ( xhr ) {
            xhr.setRequestHeader( 'X-WP-Nonce', POST_SUBMITTER.nonce );
        },
        success : function( response ) {
            console.log( response );
            alert( POST_SUBMITTER.success );
        },
        fail : function( response ) {
            console.log( response );
            alert( POST_SUBMITTER.failure );
        }

    });

});

} );

共有3个答案

罗昊空
2023-03-14

我正在尝试将<code>phy_marks。

我的JSON数据:

{ "title": "Why not working finally","content": "Test", "status": "publish" ,"post_type": "candidates", "meta": {
  "phy_marks": 66 } }

我的代码:

add_action( 'rest_api_init', 'foo_register_meta_api' );

function foo_register_meta_api() {
    // Meta Fields to add to the API
    $meta_fields = array(
        'phy_marks'
    );
    // Loop all fields and register each of them to the API
    foreach ($meta_fields as $field) {
        register_rest_field( 'candidates',
            $field,
            array(
                'get_callback'    => function ($params) use ($field) {
                    return \get_post_meta($params['id'], $field);
                },
                'update_callback' => function ($value, $object, $fieldName){
                    return \update_post_meta($object->ID, $fieldName, $value);
                },
                'schema' => null
            )
        );
    }
}
苏阳州
2023-03-14

我今天正在研究这个问题,并提出了以下解决方案,该解决方案运行良好并添加了多个字段。

希望这能帮助那些可能被困在这上面的人。

    add_action( 'rest_api_init', 'foo_register_meta_api' );

    function foo_register_meta_api() {
        // Meta Fields to add to the API
        $meta_fields = array(
            'field_1',
            'foo_bar',
            'foobar',
            'another_field'
        );
        // Loop all fields and register each of them to the API
        foreach ($meta_fields as $field) {
            register_rest_field( 'my-post-type',
                $field,
                array(
                    'get_callback'    => function ($params) use ($field) {
                        return \get_post_meta($params['id'], $field);
                    },
                    'update_callback' => function ($value, $object, $fieldName){
                        return \update_post_meta($object->ID, $fieldName, $value);
                    },
                    'schema' => null
                )
            );
        }
    }
拓拔阎宝
2023-03-14

将此添加到您的functions.php:

/**
 * Add the meta fields to REST API responses for posts read and write
 * Read and write a post meta fields in post responses
 */
function mg_register_meta_api() {
    //Meta Fields that should be added to the API 
    $meta_fields = array(
        'video_url_url',
        'another_meta_key'
    );
    //Iterate through all fields and add register each of them to the API
    foreach ($meta_fields as $field) {
        register_rest_field( 'ring',
            $field,
            array(
                'get_callback'    => array( $this, 'mg_fw_get_meta'),
                'update_callback' => array( $this, 'mg_fw_update_meta'),
                'schema'          => null,
            )
        );
    }
}
add_action( 'rest_api_init', 'mg_register_meta_api' );

/**
 * Handler for getting custom field data.
 *
 * @since 0.1.0
 * 
 * @param array $object The object from the response
 * @param string $field_name Name of field
 *
 * @return mixed
 */
function mg_get_meta( $object, $field_name ) {
    return get_post_meta( $object[ 'id' ], $field_name );
}

/**
 * Handler for updating custom field data.
 *
 * @since 0.1.0
 * @link  http://manual.unyson.io/en/latest/helpers/php.html#database
 * @param mixed $value The value of the field
 * @param object $object The object from the response
 * @param string $field_name Name of field
 *
 * @return bool|int
 */
function mg_update_meta( $value, $object, $field_name ) {
    if ( ! $value || ! is_string( $value ) ) {
        return;
    }

    return update_post_meta( $object->ID, $field_name, maybe_serialize( strip_tags( $value ) ) );
}

现在,您应该能够使用api读取和写入元“video_url_url”。

 类似资料:
  • 我们曾经轻松地通过控制台去使用 Posts.insert 来创建帖子并插入到数据库。但我们不可能指望用户去打开控制台来创建一个新的帖子吧? 所以我们需要在用户界面上创建一些表单控件,让用户在我们的 App 上发布一些新的帖子。 构建新帖子的提交页面 我们首先为新帖子的提交页面定义一个路由: Router.configure({ layoutTemplate: 'layout', loadi

  • 我正在做一个离子应用程序,该项目需要通过Wordpress API创建带有自定义字段的帖子(我使用ACF Pro和Aires ACF to REST API),我可以使用REST API创建一个普通帖子,即使没有创建或设置ACF字段,但只有在WordPres斯管理界面中创建帖子时,它们才会为帖子创建。 我正在阅读ACF to REST API的文档,但是我只看到了编辑和显示功能。这是否意味着后元必

  • 我正在react和react中创建一个带有创建者姓名的帖子列表 https://jsonplaceholder.typicode.com用户和帖子API 我的操作文件 我的组件 减速机 使用该组件的父组件 我收到此错误消息,请检查 EThttps://jsonplaceholder.typicode.com/users/undefined404 2创建错误。js:17未捕获(promise中)错误

  • 我有一个自定义后类型设置称为艺术家。每个单个艺术家是一个页面(艺术家个人资料,如果你愿意),有一个通过高级自定义字段(ACF)的关系字段类型与该艺术家相关联的产品列表。我需要产品在艺术家页面上显示在他们的类别中。因此,在Elementor中,我需要指定一个查询筛选器ID,以简单地将产品划分为类别。 到目前为止我所尝试的 我试图通过自定义查询仅显示列表中特定类别的产品,因为我需要生成查询ID。 我一

  • 如何创建计算字段以及怎么样从应用程序中使用别名。 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式,例如: 显示两个信息,但不是在用一个表 不同列中,但程序需要把他们作为一个格式的字段检索出来 列数据是大小混合,但程序需要把所以数据按大写表示。 物品订单表存储的物品的价格和数量,但没有存储物品的总价,打印时,需要物品的总价格。 根据需要表的数据进行总数,平均数等计算。 上面的情况都我们

  • 另外,是否可以共享一个页面的url,而不是使用页面上的开放图形标签来共享位置细节,以便在Facebook Post中使用? JavaScript代码用于创建只带有文本消息的post: 文档中的一个例子说: 这是否意味着不能使用Graph API为用户的提要创建位置帖子? 参考资料: null