ap_insert_qameta( int $post_id, array $args, bool $wp_error = false )
Description #
Insert post meta
Parameters #
- $post_idint (Required) Post ID.
- $argsarray (Required) Arguments.
- $wp_errorbool (Optional) Return wp_error on fail. Default value: false
Source #
File: includes/qameta.php
function ap_insert_qameta( $post_id, $args, $wp_error = false ) {
if ( empty( $post_id ) ) {
return $wp_error ? new WP_Error( 'empty_post_id', __( 'Post ID is required', 'anspress-question-answer' ) ) : false;
}
$_post = get_post( $post_id );
$exists = ap_get_qameta( $post_id );
if ( ! is_object( $_post ) || ! isset( $_post->post_type ) || ! in_array( $_post->post_type, array( 'question', 'answer' ), true ) ) {
return false;
}
$args = wp_unslash(
wp_parse_args(
$args,
array(
'ptype' => $_post->post_type,
)
)
);
$sanitized_values = array();
$formats = array();
// Include and sanitize valid fields.
foreach ( (array) ap_qameta_fields() as $field => $type ) {
if ( isset( $args[ $field ] ) ) {
$value = $args[ $field ];
if ( 'fields' === $field ) {
$value = maybe_serialize( array_merge( (array) $exists->$field, (array) $value ) );
$formats[] = '%s';
} elseif ( 'activities' === $field ) {
$value = maybe_serialize( $value );
$formats[] = '%s';
} elseif ( 'terms' === $field || 'attach' === $field ) {
$value = is_array( $value ) ? sanitize_comma_delimited( $value ) : (int) $value;
$formats[] = '%s';
} elseif ( in_array( $field, array( 'selected', 'featured', 'closed' ), true ) ) {
$value = (bool) $value;
$formats[] = '%d';
} elseif ( in_array( $field, array( 'selected_id', 'comments', 'answers', 'views', 'votes_up', 'votes_down', 'subscribers', 'flags' ), true ) ) {
$value = (int) $value;
$formats[] = '%d';
} else {
$value = sanitize_text_field( $value );
$formats[] = '%s';
}
$sanitized_values[ $field ] = $value;
}
}
global $wpdb;
// Don't insert or update if not AnsPress CPT.
// This check will also prevent inserting qameta for deleted post.
if ( ! isset( $exists->ptype ) || ! in_array( $exists->ptype, array( 'question', 'answer' ), true ) ) {
return $wp_error ? new WP_Error( 'invalid_post_type', __( 'Not question or answer CPT', 'anspress-question-answer' ) ) : false;
}
if ( $exists->is_new ) {
$sanitized_values['post_id'] = (int) $post_id;
if ( ! empty( $_post->post_author ) ) {
$sanitized_values['roles'] = $_post->post_author;
}
$inserted = $wpdb->insert( $wpdb->ap_qameta, $sanitized_values, $formats ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
} else {
$inserted = $wpdb->update( $wpdb->ap_qameta, $sanitized_values, array( 'post_id' => $post_id ), $formats ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery
}
if ( false !== $inserted ) {
return $post_id;
}
return $wp_error ? new WP_Error( 'qameta_insert_failed', __( 'Unable to insert AnsPress qameta', 'anspress-question-answer' ) ) : false;
}
Expand full source code Collapse full source code View on GitHub: includes/qameta.php:54
Add your comment