Editor: In `_WP_Editors::wp_link_query`, allow filtering empty results.

Previously, it was not possible to hook into the `wp_link_query` filter to add custom entries when the 
query returned no posts.

Props mitraval192, msebel.
Fixes #41825.


git-svn-id: https://develop.svn.wordpress.org/trunk@41346 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Pascal Birchler 2017-09-08 14:02:43 +00:00
parent 5c3d713beb
commit 804fc41181
2 changed files with 85 additions and 4 deletions

View File

@ -1623,9 +1623,6 @@ final class _WP_Editors {
// Do main query.
$get_posts = new WP_Query;
$posts = $get_posts->query( $query );
// Check if any posts were found.
if ( ! $get_posts->post_count )
return false;
// Build results.
$results = array();
@ -1665,7 +1662,9 @@ final class _WP_Editors {
* }
* @param array $query An array of WP_Query arguments.
*/
return apply_filters( 'wp_link_query', $results, $query );
$results = apply_filters( 'wp_link_query', $results, $query );
return ! empty( $results ) ? $results : false;
}
/**

View File

@ -0,0 +1,82 @@
<?php
if ( ! class_exists( '_WP_Editors', false ) ) {
require_once ABSPATH . WPINC . '/class-wp-editor.php';
}
/**
* @group editor
*/
class Tests_WP_Editors extends WP_UnitTestCase {
public function wp_link_query_callback( $results ) {
return array_merge( $results, array(
array(
'ID' => 123,
'title' => 'foo',
'permalink' => 'bar',
'info' => 'baz',
),
) );
}
public function test_wp_link_query_returns_false_when_nothing_found() {
$actual = _WP_Editors::wp_link_query( array( 's' => 'foobarbaz' ) );
$this->assertFalse( $actual );
}
public function test_wp_link_query_returns_search_results() {
$post = self::factory()->post->create_and_get( array( 'post_status' => 'publish' ) );
$actual = _WP_Editors::wp_link_query( array( 's' => $post->post_title ) );
$this->assertEqualSets( array(
array(
'ID' => $post->ID,
'title' => $post->post_title,
'permalink' => get_permalink( $post->ID ),
'info' => mysql2date( __( 'Y/m/d' ), $post->post_date ),
),
), $actual );
}
/**
* @ticket 41825
*/
public function test_wp_link_query_returns_filtered_result_when_nothing_found() {
add_filter( 'wp_link_query', array( $this, 'wp_link_query_callback' ) );
$actual = _WP_Editors::wp_link_query( array( 's' => 'foobarbaz' ) );
remove_filter( 'wp_link_query', array( $this, 'wp_link_query_callback' ) );
$this->assertEqualSets( array(
array(
'ID' => 123,
'title' => 'foo',
'permalink' => 'bar',
'info' => 'baz',
),
), $actual );
}
public function test_wp_link_query_returns_filtered_search_results() {
$post = self::factory()->post->create_and_get( array( 'post_status' => 'publish' ) );
add_filter( 'wp_link_query', array( $this, 'wp_link_query_callback' ) );
$actual = _WP_Editors::wp_link_query( array( 's' => $post->post_title ) );
remove_filter( 'wp_link_query', array( $this, 'wp_link_query_callback' ) );
$this->assertEqualSets( array(
array(
'ID' => $post->ID,
'title' => $post->post_title,
'permalink' => get_permalink( $post->ID ),
'info' => mysql2date( __( 'Y/m/d' ), $post->post_date ),
),
array(
'ID' => 123,
'title' => 'foo',
'permalink' => 'bar',
'info' => 'baz',
),
), $actual );
}
}