Skip to content
This repository has been archived by the owner on Dec 16, 2022. It is now read-only.

Commit

Permalink
Add all postmeta settings for registered types not just the ones actu…
Browse files Browse the repository at this point in the history
…ally referenced
  • Loading branch information
westonruter committed May 19, 2016
1 parent 66f02c9 commit 2363925
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 42 deletions.
34 changes: 5 additions & 29 deletions php/class-wp-customize-posts-preview.php
Expand Up @@ -66,7 +66,7 @@ public function customize_preview_init() {
add_filter( 'the_posts', array( $this, 'filter_the_posts_to_add_dynamic_post_settings_and_sections' ), 1000 );
add_filter( 'comments_open', array( $this, 'filter_preview_comments_open' ), 10, 2 );
add_filter( 'pings_open', array( $this, 'filter_preview_pings_open' ), 10, 2 );
add_filter( 'get_post_metadata', array( $this, 'filter_get_post_meta_to_add_dynamic_postmeta_settings' ), 1000, 4 );
add_filter( 'get_post_metadata', array( $this, 'filter_get_post_meta_to_add_dynamic_postmeta_settings' ), 1000, 2 );
add_action( 'wp_footer', array( $this, 'export_preview_data' ), 10 );
add_filter( 'edit_post_link', array( $this, 'filter_edit_post_link' ), 10, 2 );
add_filter( 'get_edit_post_link', array( $this, 'filter_get_edit_post_link' ), 10, 2 );
Expand Down Expand Up @@ -125,7 +125,7 @@ public function preview_setup_postdata( WP_Post $post ) {
}

/**
* Create dynamic post settings and sections for posts queried in the page.
* Create dynamic post/postmeta settings and sections for posts queried in the page.
*
* @param array $posts Posts.
* @return array
Expand All @@ -142,6 +142,7 @@ public function filter_the_posts_to_add_dynamic_post_settings_and_sections( arra
) );
$this->component->manager->add_section( $section );
}
$this->component->register_post_type_meta_settings( $post->ID );
}
return $posts;
}
Expand Down Expand Up @@ -204,35 +205,10 @@ public function filter_preview_pings_open( $open, $post ) {
*
* @param null|array|string $value The value get_metadata() should return - a single metadata value, or an array of values.
* @param int $object_id Object ID.
* @param string $meta_key Meta key.
* @return mixed Value.
*/
public function filter_get_post_meta_to_add_dynamic_postmeta_settings( $value, $object_id, $meta_key ) {
$post = get_post( $object_id );
if ( ! $post || ! isset( $this->component->registered_post_meta[ $post->post_type ] ) ) {
return $value;
}

if ( '' === $meta_key ) {
if ( null !== $value ) {
$meta_keys = array_keys( $value );
} else {
$meta_keys = array();
}
} else {
$meta_keys = array( $meta_key );
}

$setting_ids = array();
if ( ! empty( $meta_keys ) ) {
foreach ( $meta_keys as $key ) {
if ( isset( $this->component->registered_post_meta[ $post->post_type ][ $key ] ) ) {
$setting_ids[] = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, $key );
}
}
}
$this->component->manager->add_dynamic_settings( $setting_ids );

public function filter_get_post_meta_to_add_dynamic_postmeta_settings( $value, $object_id ) {
$this->component->register_post_type_meta_settings( $object_id );
return $value;
}

Expand Down
16 changes: 16 additions & 0 deletions php/class-wp-customize-posts.php
Expand Up @@ -365,6 +365,22 @@ public function filter_customize_dynamic_setting_class( $class, $setting_id, $ar
return $class;
}

/**
* Add all postmeta settings for all registered postmeta for a given post type instance.
*
* @param int $post_id Post ID.
*/
public function register_post_type_meta_settings( $post_id ) {
$post = get_post( $post_id );
$setting_ids = array();
if ( isset( $this->registered_post_meta[ $post->post_type ] ) ) {
foreach ( array_keys( $this->registered_post_meta[ $post->post_type ] ) as $key ) {
$setting_ids[] = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, $key );
}
}
$this->manager->add_dynamic_settings( $setting_ids );
}

/**
* When loading the customizer from a post, get the post.
*
Expand Down
37 changes: 24 additions & 13 deletions tests/php/test-class-wp-customize-posts-preview.php
Expand Up @@ -199,6 +199,11 @@ public function filter_the_posts_to_add_dynamic_post_settings_and_sections() {
$input_posts = array( $post );
$preview = new WP_Customize_Posts_Preview( $this->posts_component );

$this->posts_component->register_post_type_meta( 'post', 'foo' );
$foo_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, 'foo' );
$this->posts_component->register_post_type_meta( 'post', 'bar' );
$bar_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, 'bar' );

$setting_id = WP_Customize_Post_Setting::get_post_setting_id( $post );
$this->do_customize_boot_actions( array(
$setting_id => array_merge(
Expand All @@ -221,6 +226,11 @@ public function filter_the_posts_to_add_dynamic_post_settings_and_sections() {
$section = $this->posts_component->manager->get_section( $section_id );
$this->assertNotEmpty( $section );
$this->assertNotEquals( $original_post_content, $filtered_posts[0]->post_content );

$foo_setting = $this->posts_component->manager->get_setting( $foo_setting_id );
$bar_setting = $this->posts_component->manager->get_setting( $bar_setting_id );
$this->assertInstanceOf( 'WP_Customize_Postmeta_Setting', $foo_setting );
$this->assertInstanceOf( 'WP_Customize_Postmeta_Setting', $bar_setting );
}

/**
Expand Down Expand Up @@ -252,24 +262,25 @@ public function test_filter_preview_pings_open() {
}

/**
* Test filter_get_post_meta_to_add_dynamic_postmeta_settings().
* Test filter_get_post_meta_to_add_dynamic_postmeta_settings() and register_post_type_meta_settings().
*
* @see WP_Customize_Posts_Preview::register_post_type_meta_settings()
* @see WP_Customize_Posts_Preview::filter_get_post_meta_to_add_dynamic_postmeta_settings()
*/
public function test_filter_get_post_meta_to_add_dynamic_postmeta_settings() {
$preview = new WP_Customize_Posts_Preview( $this->posts_component );
$this->posts_component->register_post_type_meta( 'post', 'foo' );
$this->posts_component->register_post_type_meta( 'post', 'bar' );
$post = get_post( $this->post_id );
$foo_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, 'foo' );
$bar_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, 'bar' );

$this->posts_component->register_post_type_meta( 'post', 'foo' );
$foo_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, 'foo' );
$this->assertEmpty( $this->posts_component->manager->get_setting( $foo_setting_id ) );
$preview->filter_get_post_meta_to_add_dynamic_postmeta_settings( '', $post->ID, 'foo' );
$preview->filter_get_post_meta_to_add_dynamic_postmeta_settings( null, $post->ID );
$this->assertNotEmpty( $this->posts_component->manager->get_setting( $foo_setting_id ) );
$this->assertEmpty( $this->posts_component->manager->get_setting( $bar_setting_id ) );

$preview->filter_get_post_meta_to_add_dynamic_postmeta_settings( array( 'bar' => array( '' ) ), $post->ID, '' );
$this->posts_component->register_post_type_meta( 'post', 'bar' );
$bar_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( $post, 'bar' );
$this->assertEmpty( $this->posts_component->manager->get_setting( $bar_setting_id ) );
$this->posts_component->register_post_type_meta_settings( $post->ID );
$this->assertNotEmpty( $this->posts_component->manager->get_setting( $bar_setting_id ) );
}

Expand All @@ -281,6 +292,10 @@ public function test_filter_get_post_meta_to_add_dynamic_postmeta_settings() {
public function test_filter_get_post_meta_to_preview() {
$preview = $this->posts_component->preview;
$meta_key = 'foo_key';
$this->posts_component->register_post_type_meta( 'post', $meta_key );
$this->posts_component->register_post_type_meta( 'post', 'other' );
$preview->filter_get_post_meta_to_add_dynamic_postmeta_settings( null, $this->post_id );

$original_meta_value = array( 'original_value' => 1 );
$preview_meta_value = array( 'override_value'=> 2 );
update_post_meta( $this->post_id, $meta_key, $original_meta_value );
Expand All @@ -292,9 +307,6 @@ public function test_filter_get_post_meta_to_preview() {
$this->assertEquals( array( maybe_serialize( $original_meta_value ) ), $meta_values[ $meta_key ] );
$setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( get_post( $this->post_id ), $meta_key );
$other_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( get_post( $this->post_id ), 'other' );
$this->posts_component->register_post_type_meta( 'post', $meta_key );
$this->posts_component->register_post_type_meta( 'post', 'other' );
$preview->filter_get_post_meta_to_add_dynamic_postmeta_settings( null, $this->post_id, 'other' );
$other_setting = $this->posts_component->manager->get_setting( $other_setting_id );
$this->assertNotEmpty( $other_setting );
$this->posts_component->manager->set_post_value( $other_setting_id, 'other' );
Expand All @@ -304,7 +316,6 @@ public function test_filter_get_post_meta_to_preview() {
$this->assertEquals( 'foo_val', $preview->filter_get_post_meta_to_preview( 'foo_val', $this->post_id, $meta_key, true ) );
$this->assertEquals( array( 'foo_val' ), $preview->filter_get_post_meta_to_preview( 'foo_val', $this->post_id, $meta_key, false ) );
$this->assertEquals( null, $preview->filter_get_post_meta_to_preview( null, $this->post_id, $meta_key, true ) );
$preview->filter_get_post_meta_to_add_dynamic_postmeta_settings( null, $this->post_id, $meta_key );

// Test non-preview without post value.
$setting = $this->posts_component->manager->get_setting( $setting_id );
Expand Down Expand Up @@ -511,9 +522,9 @@ public function test_export_registered_settings() {
$post_setting_id = WP_Customize_Post_Setting::get_post_setting_id( get_post( $this->post_id ) );
$postmeta_setting_id = WP_Customize_Postmeta_Setting::get_post_meta_setting_id( get_post( $this->post_id ), 'foo' );
$preview->customize_preview_init();
$this->posts_component->register_post_type_meta( 'post', 'foo' );
query_posts( 'p=' . $this->post_id );
update_post_meta( $this->post_id, 'foo', 'bar' );
$this->posts_component->register_post_type_meta( 'post', 'foo' );
$this->do_customize_boot_actions();
$this->assertNotEmpty( get_post_meta( $this->post_id, 'foo' ) );

Expand Down

0 comments on commit 2363925

Please sign in to comment.