Skip to content

Instantly share code, notes, and snippets.

@kaskad88
Created June 23, 2020 09:23
Show Gist options
  • Save kaskad88/3655b81cf3780d645cb2ad229227182a to your computer and use it in GitHub Desktop.
Save kaskad88/3655b81cf3780d645cb2ad229227182a to your computer and use it in GitHub Desktop.
function __prefix__add_relation_meta( $post_id, $meta_key, $related_posts = array() ) {
$relation = jet_engine()->relations->get_relation_info( $meta_key );
if ( ! $relation ) {
return;
}
if ( empty( $related_posts ) ) {
jet_engine()->relations->data->delete_all_related_meta( $meta_key, $post_id );
}
if ( ! is_array( $related_posts ) ) {
$related_posts = array( $related_posts );
}
$prev_related = get_post_meta( $post_id, $meta_key );
$saved_post_type = get_post_type( $post_id );
$type = explode( '_to_', $relation['type'] );
if ( $relation['post_type_1'] === $saved_post_type ) {
$current_type = $type[0];
$related_type = $type[1];
} elseif ( $relation['post_type_2'] === $saved_post_type ) {
$current_type = $type[1];
$related_type = $type[0];
} else {
return;
}
foreach ( $related_posts as $related_post_id ) {
if ( $related_post_id && ! in_array( $related_post_id, $prev_related ) ) {
add_post_meta( $post_id, $meta_key, $related_post_id, false );
}
$stored = get_post_meta( $related_post_id, $meta_key, false );
if ( ! is_array( $stored ) ) {
$stored = array( $stored );
$stored = array_filter( $stored );
}
if ( 'one' === $current_type ) {
foreach ( $stored as $stored_id ) {
if ( absint( $stored_id ) !== $post_id ) {
delete_post_meta( $related_post_id, $meta_key );
delete_post_meta( $stored_id, $meta_key, $related_post_id );
}
}
}
if ( $post_id && ! in_array( $post_id, $stored ) ) {
add_post_meta( $related_post_id, $meta_key, $post_id, false );
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment