Title: wp_xmlrpc_server::set_custom_fields
Published: April 25, 2014
Last modified: August 20, 2026

---

# wp_xmlrpc_server::set_custom_fields( int $post_id, array $fields )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#wp--skip-link--target)

Sets custom fields for post.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#parameters)󠁿

 `$post_id`intrequired

Post ID.

`$fields`arrayrequired

Custom fields.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#source)󠁿

    ```php
    public function set_custom_fields( $post_id, $fields ) {
    	$post_id = (int) $post_id;

    	foreach ( (array) $fields as $meta ) {
    		if ( isset( $meta['id'] ) ) {
    			$meta['id'] = (int) $meta['id'];
    			$pmeta      = get_metadata_by_mid( 'post', $meta['id'] );

    			if ( ! $pmeta || (int) $pmeta->post_id !== $post_id ) {
    				continue;
    			}

    			if ( isset( $meta['key'] ) ) {
    				$meta['key'] = wp_unslash( $meta['key'] );
    				if ( $meta['key'] !== $pmeta->meta_key ) {
    					continue;
    				}
    				$meta['value'] = wp_unslash( $meta['value'] );
    				if ( current_user_can( 'edit_post_meta', $post_id, $meta['key'] ) ) {
    					update_metadata_by_mid( 'post', $meta['id'], $meta['value'] );
    				}
    			} elseif ( current_user_can( 'delete_post_meta', $post_id, $pmeta->meta_key ) ) {
    				delete_metadata_by_mid( 'post', $meta['id'] );
    			}
    		} elseif ( current_user_can( 'add_post_meta', $post_id, wp_unslash( $meta['key'] ) ) ) {
    			add_post_meta( $post_id, $meta['key'], $meta['value'] );
    		}
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-xmlrpc-server.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/class-wp-xmlrpc-server.php#L437)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/class-wp-xmlrpc-server.php#L437-L465)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#related)󠁿

| Uses | Description | 
| [add_post_meta()](https://developer.wordpress.org/reference/functions/add_post_meta/)`wp-includes/post.php` |

Adds a meta field to the given post.

  | 
| [get_metadata_by_mid()](https://developer.wordpress.org/reference/functions/get_metadata_by_mid/)`wp-includes/meta.php` |

Retrieves metadata by meta ID.

  | 
| [update_metadata_by_mid()](https://developer.wordpress.org/reference/functions/update_metadata_by_mid/)`wp-includes/meta.php` |

Updates metadata by meta ID.

  | 
| [delete_metadata_by_mid()](https://developer.wordpress.org/reference/functions/delete_metadata_by_mid/)`wp-includes/meta.php` |

Deletes metadata by meta ID.

  | 
| [current_user_can()](https://developer.wordpress.org/reference/functions/current_user_can/)`wp-includes/capabilities.php` |

Returns whether the current user has the specified capability.

  | 
| [wp_unslash()](https://developer.wordpress.org/reference/functions/wp_unslash/)`wp-includes/formatting.php` |

Removes slashes from a string or recursively removes slashes from strings within an array.

  |

[Show 2 more](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#)

| Used by | Description | 
| [wp_xmlrpc_server::mw_editPost()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/mw_editpost/)`wp-includes/class-wp-xmlrpc-server.php` |

Edits a post.

  | 
| [wp_xmlrpc_server::mw_newPost()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/mw_newpost/)`wp-includes/class-wp-xmlrpc-server.php` |

Creates a new post.

  | 
| [wp_xmlrpc_server::_insert_post()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/_insert_post/)`wp-includes/class-wp-xmlrpc-server.php` |

Helper method for wp_newPost() and wp_editPost(), containing shared logic.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/set_custom_fields/?output_format=md#changelog)󠁿

| Version | Description | 
| [2.5.0](https://developer.wordpress.org/reference/since/2.5.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_xmlrpc_server%2Fset_custom_fields%2F)
before being able to contribute a note or feedback.