| @@ 525-597 (lines=73) @@ | ||
| 522 | $this->parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ); |
|
| 523 | } |
|
| 524 | ||
| 525 | if ( ! empty( $metadata ) ) { |
|
| 526 | foreach ( (array) $metadata as $meta ) { |
|
| 527 | ||
| 528 | $meta = (object) $meta; |
|
| 529 | ||
| 530 | $existing_meta_item = new stdClass; |
|
| 531 | ||
| 532 | if ( empty( $meta->operation ) ) |
|
| 533 | $meta->operation = 'update'; |
|
| 534 | ||
| 535 | if ( ! empty( $meta->value ) ) { |
|
| 536 | if ( 'true' == $meta->value ) |
|
| 537 | $meta->value = true; |
|
| 538 | if ( 'false' == $meta->value ) |
|
| 539 | $meta->value = false; |
|
| 540 | } |
|
| 541 | ||
| 542 | if ( ! empty( $meta->id ) ) { |
|
| 543 | $meta->id = absint( $meta->id ); |
|
| 544 | $existing_meta_item = get_metadata_by_mid( 'post', $meta->id ); |
|
| 545 | } |
|
| 546 | ||
| 547 | $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be |
|
| 548 | $meta->key = wp_slash( $meta->key ); |
|
| 549 | $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key ); |
|
| 550 | $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key ); |
|
| 551 | ||
| 552 | // make sure that the meta id passed matches the existing meta key |
|
| 553 | if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) { |
|
| 554 | $meta_by_id = get_metadata_by_mid( 'post', $meta->id ); |
|
| 555 | if ( $meta_by_id->meta_key !== $meta->key ) { |
|
| 556 | continue; // skip this meta |
|
| 557 | } |
|
| 558 | } |
|
| 559 | ||
| 560 | switch ( $meta->operation ) { |
|
| 561 | case 'delete': |
|
| 562 | ||
| 563 | if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) { |
|
| 564 | delete_metadata_by_mid( 'post', $meta->id ); |
|
| 565 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 566 | delete_post_meta( $post_id, $meta->key, $meta->previous_value ); |
|
| 567 | } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 568 | delete_post_meta( $post_id, $meta->key ); |
|
| 569 | } |
|
| 570 | ||
| 571 | break; |
|
| 572 | case 'add': |
|
| 573 | ||
| 574 | if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) { |
|
| 575 | continue; |
|
| 576 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) { |
|
| 577 | add_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 578 | } |
|
| 579 | ||
| 580 | break; |
|
| 581 | case 'update': |
|
| 582 | ||
| 583 | if ( ! isset( $meta->value ) ) { |
|
| 584 | continue; |
|
| 585 | } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 586 | update_metadata_by_mid( 'post', $meta->id, $meta->value ); |
|
| 587 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 588 | update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value ); |
|
| 589 | } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 590 | update_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 591 | } |
|
| 592 | ||
| 593 | break; |
|
| 594 | } |
|
| 595 | ||
| 596 | } |
|
| 597 | } |
|
| 598 | ||
| 599 | /** This action is documented in json-endpoints/class.wpcom-json-api-update-post-endpoint.php */ |
|
| 600 | do_action( 'rest_api_inserted_post', $post_id, $insert, $new ); |
|
| @@ 511-583 (lines=73) @@ | ||
| 508 | $this->parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ); |
|
| 509 | } |
|
| 510 | ||
| 511 | if ( ! empty( $metadata ) ) { |
|
| 512 | foreach ( (array) $metadata as $meta ) { |
|
| 513 | ||
| 514 | $meta = (object) $meta; |
|
| 515 | ||
| 516 | $existing_meta_item = new stdClass; |
|
| 517 | ||
| 518 | if ( empty( $meta->operation ) ) |
|
| 519 | $meta->operation = 'update'; |
|
| 520 | ||
| 521 | if ( ! empty( $meta->value ) ) { |
|
| 522 | if ( 'true' == $meta->value ) |
|
| 523 | $meta->value = true; |
|
| 524 | if ( 'false' == $meta->value ) |
|
| 525 | $meta->value = false; |
|
| 526 | } |
|
| 527 | ||
| 528 | if ( ! empty( $meta->id ) ) { |
|
| 529 | $meta->id = absint( $meta->id ); |
|
| 530 | $existing_meta_item = get_metadata_by_mid( 'post', $meta->id ); |
|
| 531 | } |
|
| 532 | ||
| 533 | $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be |
|
| 534 | $meta->key = wp_slash( $meta->key ); |
|
| 535 | $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key ); |
|
| 536 | $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key ); |
|
| 537 | ||
| 538 | // make sure that the meta id passed matches the existing meta key |
|
| 539 | if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) { |
|
| 540 | $meta_by_id = get_metadata_by_mid( 'post', $meta->id ); |
|
| 541 | if ( $meta_by_id->meta_key !== $meta->key ) { |
|
| 542 | continue; // skip this meta |
|
| 543 | } |
|
| 544 | } |
|
| 545 | ||
| 546 | switch ( $meta->operation ) { |
|
| 547 | case 'delete': |
|
| 548 | ||
| 549 | if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) { |
|
| 550 | delete_metadata_by_mid( 'post', $meta->id ); |
|
| 551 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 552 | delete_post_meta( $post_id, $meta->key, $meta->previous_value ); |
|
| 553 | } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 554 | delete_post_meta( $post_id, $meta->key ); |
|
| 555 | } |
|
| 556 | ||
| 557 | break; |
|
| 558 | case 'add': |
|
| 559 | ||
| 560 | if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) { |
|
| 561 | continue; |
|
| 562 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) { |
|
| 563 | add_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 564 | } |
|
| 565 | ||
| 566 | break; |
|
| 567 | case 'update': |
|
| 568 | ||
| 569 | if ( ! isset( $meta->value ) ) { |
|
| 570 | continue; |
|
| 571 | } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 572 | update_metadata_by_mid( 'post', $meta->id, $meta->value ); |
|
| 573 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 574 | update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value ); |
|
| 575 | } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 576 | update_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 577 | } |
|
| 578 | ||
| 579 | break; |
|
| 580 | } |
|
| 581 | ||
| 582 | } |
|
| 583 | } |
|
| 584 | ||
| 585 | /** |
|
| 586 | * Fires when a post is created via the REST API. |
|
| @@ 525-597 (lines=73) @@ | ||
| 522 | parent::parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ); |
|
| 523 | } |
|
| 524 | ||
| 525 | if ( ! empty( $metadata ) ) { |
|
| 526 | foreach ( (array) $metadata as $meta ) { |
|
| 527 | ||
| 528 | $meta = (object) $meta; |
|
| 529 | ||
| 530 | $existing_meta_item = new stdClass; |
|
| 531 | ||
| 532 | if ( empty( $meta->operation ) ) |
|
| 533 | $meta->operation = 'update'; |
|
| 534 | ||
| 535 | if ( ! empty( $meta->value ) ) { |
|
| 536 | if ( 'true' == $meta->value ) |
|
| 537 | $meta->value = true; |
|
| 538 | if ( 'false' == $meta->value ) |
|
| 539 | $meta->value = false; |
|
| 540 | } |
|
| 541 | ||
| 542 | if ( ! empty( $meta->id ) ) { |
|
| 543 | $meta->id = absint( $meta->id ); |
|
| 544 | $existing_meta_item = get_metadata_by_mid( 'post', $meta->id ); |
|
| 545 | } |
|
| 546 | ||
| 547 | $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be |
|
| 548 | $meta->key = wp_slash( $meta->key ); |
|
| 549 | $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key ); |
|
| 550 | $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key ); |
|
| 551 | ||
| 552 | // make sure that the meta id passed matches the existing meta key |
|
| 553 | if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) { |
|
| 554 | $meta_by_id = get_metadata_by_mid( 'post', $meta->id ); |
|
| 555 | if ( $meta_by_id->meta_key !== $meta->key ) { |
|
| 556 | continue; // skip this meta |
|
| 557 | } |
|
| 558 | } |
|
| 559 | ||
| 560 | switch ( $meta->operation ) { |
|
| 561 | case 'delete': |
|
| 562 | ||
| 563 | if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) { |
|
| 564 | delete_metadata_by_mid( 'post', $meta->id ); |
|
| 565 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 566 | delete_post_meta( $post_id, $meta->key, $meta->previous_value ); |
|
| 567 | } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 568 | delete_post_meta( $post_id, $meta->key ); |
|
| 569 | } |
|
| 570 | ||
| 571 | break; |
|
| 572 | case 'add': |
|
| 573 | ||
| 574 | if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) { |
|
| 575 | continue; |
|
| 576 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || $this->is_metadata_public( $meta->key ) ) { |
|
| 577 | add_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 578 | } |
|
| 579 | ||
| 580 | break; |
|
| 581 | case 'update': |
|
| 582 | ||
| 583 | if ( ! isset( $meta->value ) ) { |
|
| 584 | continue; |
|
| 585 | } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 586 | update_metadata_by_mid( 'post', $meta->id, $meta->value ); |
|
| 587 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 588 | update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value ); |
|
| 589 | } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || $this->is_metadata_public( $meta->key ) ) ) { |
|
| 590 | update_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 591 | } |
|
| 592 | ||
| 593 | break; |
|
| 594 | } |
|
| 595 | ||
| 596 | } |
|
| 597 | } |
|
| 598 | ||
| 599 | /** This action is documented in json-endpoints/class.wpcom-json-api-update-post-endpoint.php */ |
|
| 600 | do_action( 'rest_api_inserted_post', $post_id, $insert, $new ); |
|