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

Add autofocus[section] param to Customize admin bar link when is_singular #236

Merged
merged 1 commit into from
Sep 1, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions php/class-customize-posts-plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public function __construct() {
add_action( 'wp_default_scripts', array( $this, 'register_scripts' ), 11 );
add_action( 'wp_default_styles', array( $this, 'register_styles' ), 11 );
add_action( 'init', array( $this, 'register_customize_draft' ) );
add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_customize_link_queried_object_autofocus' ), 41 );
add_filter( 'user_has_cap', array( $this, 'grant_customize_capability' ), 10, 3 );
add_filter( 'customize_loaded_components', array( $this, 'add_posts_to_customize_loaded_components' ), 0, 1 );
add_filter( 'customize_loaded_components', array( $this, 'filter_customize_loaded_components' ), 100, 2 );
Expand Down Expand Up @@ -105,6 +106,30 @@ public function register_customize_draft() {
) );
}

/**
* Add autofocus[section] query param to the Customize link in the admin bar when there is a post queried object.
*
* @param \WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance.
* @returns bool Whether the param was added.
*/
public function add_admin_bar_customize_link_queried_object_autofocus( $wp_admin_bar ) {

$customize_node = $wp_admin_bar->get_node( 'customize' );
$queried_object = get_queried_object();
if ( empty( $customize_node ) || ! ( $queried_object instanceof WP_Post ) ) {
return false;
}

$section_id = sprintf( 'post[%s][%d]', $queried_object->post_type, $queried_object->ID );
$customize_node->href = add_query_arg(
array( 'autofocus[section]' => $section_id ),
$customize_node->href
);

$wp_admin_bar->add_menu( (array) $customize_node );
return true;
}

/**
* Let users who can edit posts also access the Customizer because there is something for them there.
*
Expand Down
32 changes: 32 additions & 0 deletions tests/php/test-class-customize-posts-plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public function test_construct() {
$this->assertEquals( $plugin->version, $plugin_data['Version'] );
$this->assertInstanceOf( 'Edit_Post_Preview', $plugin->edit_post_preview );
$this->assertEquals( 11, has_action( 'wp_default_scripts', array( $plugin, 'register_scripts' ) ) );
$this->assertEquals( 41, has_action( 'admin_bar_menu', array( $plugin, 'add_admin_bar_customize_link_queried_object_autofocus' ) ) );
$this->assertEquals( 11, has_action( 'wp_default_styles', array( $plugin, 'register_styles' ) ) );
$this->assertEquals( 10, has_action( 'user_has_cap', array( $plugin, 'grant_customize_capability' ) ) );
$this->assertEquals( 100, has_action( 'customize_loaded_components', array( $plugin, 'filter_customize_loaded_components' ) ) );
Expand Down Expand Up @@ -103,6 +104,37 @@ public function test_register_customize_draft() {
$this->assertArrayHasKey( 'customize-draft', $wp_post_statuses );
}

/**
* Test add_admin_bar_customize_link_queried_object_autofocus method.
*
* @covers Customize_Posts_Plugin::add_admin_bar_customize_link_queried_object_autofocus()
*/
public function test_add_admin_bar_customize_link_queried_object_autofocus() {
global $wp_admin_bar;
set_current_screen( 'front' );

$post_id = $this->factory()->post->create();
$this->go_to( get_permalink( $post_id ) );

require_once ABSPATH . WPINC . '/class-wp-admin-bar.php';
remove_all_actions( 'admin_bar_menu' );

wp_set_current_user( $this->factory()->user->create( array( 'role' => 'administrator' ) ) );
$wp_admin_bar = new \WP_Admin_Bar(); // WPCS: Override OK.
$wp_admin_bar->initialize();
$wp_admin_bar->add_menus();
do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) );
$this->assertTrue( $this->plugin->add_admin_bar_customize_link_queried_object_autofocus( $wp_admin_bar ) );
$node = $wp_admin_bar->get_node( 'customize' );
$this->assertTrue( is_object( $node ) );
$parsed_url = wp_parse_url( $node->href );
$query_params = array();
parse_str( $parsed_url['query'], $query_params );
$this->assertArrayHasKey( 'autofocus', $query_params );
$this->assertArrayHasKey( 'section', $query_params['autofocus'] );
$this->assertEquals( sprintf( 'post[%s][%d]', get_post_type( $post_id ), $post_id ), $query_params['autofocus']['section'] );
}

/**
* Test that the user caps are modified.
*
Expand Down