Inventory_Presser_Plugin::save_vehicle_post_meta( int $post_id, WP_Post $post, bool $is_update )
Saves vehicle attributes into their corresponding post meta fields when the Save or Update button is clicked in the editor.
On This Page
Parameters Parameters
- $post_id
-
(int) (Required)
- $post
-
(WP_Post) (Required)
- $is_update
-
(bool) (Required)
Return Return
(void)
Source Source
File: inventory-presser.php
public function save_vehicle_post_meta( $post_id, $post, $is_update ) {
/**
* Do not continue if the post is being moved to the trash or if this is
* an auto-draft.
*/
if ( in_array( $post->post_status, array( 'trash', 'auto-draft' ), true ) ) {
return;
}
// Abort if autosave or AJAX/quick edit.
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
|| ( defined( 'DOING_AJAX' ) && DOING_AJAX )
) {
return;
}
// is this a vehicle?
if ( ! empty( $_POST['post_type'] ) && INVP::POST_TYPE !== $_POST['post_type'] ) {
// no, don't create any meta data for vehicles.
return;
}
/**
* Tick the last modified date of this vehicle since we're saving changes.
* It looks like this: Tue, 06 Sep 2016 09:26:12 -0400
*/
$offset = sprintf( '%+03d00', intval( get_option( 'gmt_offset' ) ) );
$timestamp_format = 'D, d M Y h:i:s';
// use post_modified to set last_modified.
$post_modified = DateTime::createFromFormat( 'Y-m-d H:i:s', $post->post_modified );
$timestamp = $post_modified->format( $timestamp_format ) . ' ' . $offset;
$key = apply_filters( 'invp_prefix_meta_key', 'last_modified' );
delete_post_meta( $post_id, $key );
update_post_meta( $post_id, $key, $timestamp );
/**
* If this is not an update or there is no date entered post meta value,
* set the date_entered meta value using the post_date
*/
if ( ! $is_update || empty( INVP::get_meta( 'date_entered', $post_id ) ) ) {
// use post_date to set date_entered.
$post_date = DateTime::createFromFormat( 'Y-m-d H:i:s', $post->post_date );
$timestamp = $post_date->format( $timestamp_format ) . ' ' . $offset;
$key = apply_filters( 'invp_prefix_meta_key', 'date_entered' );
delete_post_meta( $post_id, $key );
update_post_meta( $post_id, $key, $timestamp );
}
if ( empty( $_POST ) ) {
return;
}
// Clear this value that is defined by a checkbox.
update_post_meta( $post_id, apply_filters( 'invp_prefix_meta_key', 'featured' ), '0' );
/**
* Loop over the post meta keys we manage and save their values
* if we find them coming over as part of the post to save.
*/
$keys = INVP::keys();
$keys[] = 'options_array';
foreach ( $keys as $unprefixed_key ) {
$key = apply_filters( 'invp_prefix_meta_key', $unprefixed_key );
if ( isset( $_POST[ $key ] ) ) {
if ( is_array( $_POST[ $key ] ) ) {
// delete all meta, this is essentially for the options.
delete_post_meta( $post->ID, $key );
$options = array(); // collect the options to maintain a CSV field for backwards compatibility.
foreach ( $this->sanitize_array( $_POST[ $key ] ) as $value ) {
add_post_meta( $post->ID, $key, $value );
if ( 'inventory_presser_options_array' === $key ) {
$options[] = $value;
}
}
} else {
// String data.
$value = sanitize_text_field( wp_unslash( $_POST[ $key ] ) );
// Some values exist in post meta and taxonomy terms.
// Check $_POST['tax_input'] in case the user checked a term box.
if ( '' === $value && isset( $_POST['tax_input'] ) ) {
$tax_input = $_POST['tax_input'];
if ( isset( $overlapping_keys[ $unprefixed_key ] ) && isset( $tax_input[ $overlapping_keys[ $unprefixed_key ] ] ) ) {
$term_id = intval( array_values( array_filter( $tax_input[ $overlapping_keys[ $unprefixed_key ] ] ) )[0] ?? '0' );
$term = get_term_by( 'term_taxonomy_id', $term_id, $overlapping_keys[ $unprefixed_key ] );
if ( false !== $term ) {
$value = $term->name;
}
}
}
// The values for keys with overlapping taxonomies might be slugs instead of term names.
// inventory_presser_availability might arrive with a value of "for-sale" but we want to save "For Sale".
$overlapping_keys = Inventory_Presser_Taxonomy_Overlapper::overlapping_meta_keys();
if ( isset( $overlapping_keys[ $unprefixed_key ] ) ) {
$term = get_term_by( 'slug', $value, $overlapping_keys[ $unprefixed_key ] );
if ( false !== $term ) {
$value = $term->name;
}
}
update_post_meta( $post->ID, $key, sanitize_text_field( $value ) );
}
}
}
}
Expand full source codeCollapse full source codeView on Github