WordPress.org

Make WordPress Core

Ticket #43850: 43850.diff

File 43850.diff, 7.8 KB (added by birgire, 22 months ago)
  • src/wp-includes/link-template.php

    diff --git src/wp-includes/link-template.php src/wp-includes/link-template.php
    index 9db1065..eb5679a 100644
    function get_parent_theme_file_path( $file = '' ) { 
    42824282 * @return string The URL to the privacy policy page. Empty string if it doesn't exist.
    42834283 */
    42844284function get_privacy_policy_url() {
     4285        $url            = '';
    42854286        $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
    42864287
    42874288        if ( ! empty( $policy_page_id ) && get_post_status( $policy_page_id ) === 'publish' ) {
    4288                 return get_permalink( $policy_page_id );
     4289                $url = (string) get_permalink( $policy_page_id );
    42894290        }
    42904291
     4292        /**
     4293         * Filters the URL of the privacy policy page.
     4294         *
     4295         * @since 4.9.6
     4296         *
     4297         * @param string $url  The URL to the privacy policy page. Empty string if it
     4298         *                     doesn't exist.
     4299         * @param int    $file The ID of privacy policy page.
     4300         */
     4301        return apply_filters( 'privacy_policy_url', $url, $policy_page_id );
     4302}
     4303
     4304/**
     4305 * Displays the privacy policy link with formatting, when applicable.
     4306 *
     4307 * @since 4.9.6
     4308 *
     4309 * @param string $before Optional. Display before privacy policy link. Default empty.
     4310 * @param string $after  Optional. Display after privacy policy link. Default empty.
     4311 */
     4312function the_privacy_policy_link( $before = '', $after = '' ) {
     4313        echo get_the_privacy_policy_link( $before, $after );
     4314}
     4315
     4316/**
     4317 * Returns the privacy policy link with formatting, when applicable.
     4318 *
     4319 * @since 4.9.6
     4320 *
     4321 * @param string $before Optional. Display before privacy policy link. Default empty.
     4322 * @param string $after  Optional. Display after privacy policy link. Default empty.
     4323 *
     4324 * @return string Markup for the link and surrounding elements. Empty string if it
     4325 *                doesn't exist.
     4326 */
     4327function get_the_privacy_policy_link( $before = '', $after = '' ) {
     4328        $link               = '';
     4329        $privacy_policy_url = get_privacy_policy_url();
     4330
     4331        if ( $privacy_policy_url ) {
     4332                $link = sprintf(
     4333                        '<a class="privacy-policy-link" href="%1$s">%2$s</a>',
     4334                        esc_url( $privacy_policy_url ),
     4335                        __( 'Privacy Policy' )
     4336                );
     4337        }
     4338
     4339        /**
     4340         * Filters the privacy policy link.
     4341         *
     4342         * @since 4.9.6
     4343         *
     4344         * @param string $link               The privacy policy link. Empty string if it
     4345         *                                   doesn't exist.
     4346         * @param string $privacy_policy_url The URL of the privacy policy. Empty string
     4347         *                                   if it doesn't exist.
     4348         */
     4349        $link = apply_filters( 'the_privacy_policy_link', $link, $privacy_policy_url );
     4350
     4351        if ( $link ) {
     4352                return $before . $link . $after;
     4353        }
     4354       
    42914355        return '';
    42924356}
  • new file tests/phpunit/tests/link/get-privacy-policy-url.php

    diff --git tests/phpunit/tests/link/get-privacy-policy-url.php tests/phpunit/tests/link/get-privacy-policy-url.php
    new file mode 100644
    index 0000000..b4239d5
    - +  
     1<?php
     2/**
     3 * Testing the `get_privacy_policy_url` function.
     4 *
     5 * @package WordPress
     6 */
     7
     8/**
     9 * Tests for the Tests_Link_GetPrivacyPolicyUrl class.
     10 *
     11 * @group link
     12 * @since 4.9.6
     13 */
     14class Tests_Link_GetPrivacyPolicyUrl extends WP_UnitTestCase {
     15
     16        /**
     17         * The get_privacy_policy_url() function should return the privacy policy URL.
     18         *
     19         * @ticket 43620
     20         */
     21        public function test_get_privacy_policy_url() {
     22                $page_id = self::factory()->post->create( array( 'post_type' => 'page' ) );
     23                update_option( 'wp_page_for_privacy_policy', $page_id );
     24
     25                $expected = get_permalink( $page_id );
     26                $actual   = get_privacy_policy_url();
     27
     28                $this->assertSame( $expected, $actual );
     29        }
     30
     31        /**
     32         * The get_privacy_policy_url() function should return empty for non-existing page.
     33         *
     34         * @ticket 43620
     35         */
     36        public function test_get_privacy_policy_url_should_return_empty_for_non_existing_page() {
     37                update_option( 'wp_page_for_privacy_policy', PHP_INT_MAX );
     38
     39                $this->assertEmpty( get_privacy_policy_url() );
     40        }
     41
     42        /**
     43         * The get_privacy_policy_url() function should return empty when privacy policy page is not set.
     44         *
     45         * @ticket 43620
     46         */
     47        public function test_get_privacy_policy_url_should_return_empty_when_privacy_policy_page_not_set() {
     48                delete_option( 'wp_page_for_privacy_policy' );
     49
     50                $this->assertEmpty( get_privacy_policy_url() );
     51        }
     52
     53        /**
     54         * The output of the get_privacy_policy_url() function should be filterable with the 'privacy_policy_url' filter.
     55         *
     56         * @ticket 43620
     57         */
     58        public function test_get_privacy_policy_url_should_be_filterable() {
     59                $page_id = self::factory()->post->create( array( 'post_type' => 'page' ) );
     60                update_option( 'wp_page_for_privacy_policy', $page_id );
     61
     62                add_filter( 'privacy_policy_url', '__return_empty_string' );
     63                $actual = get_privacy_policy_url();
     64                remove_filter( 'privacy_policy_url', '__return_empty_string' );
     65
     66                $this->assertEmpty( $actual );
     67        }
     68
     69}
  • new file tests/phpunit/tests/link/get-the-privacy-policy-link.php

    diff --git tests/phpunit/tests/link/get-the-privacy-policy-link.php tests/phpunit/tests/link/get-the-privacy-policy-link.php
    new file mode 100644
    index 0000000..1d39816
    - +  
     1<?php
     2/**
     3 * Testing the `get_the_privacy_policy_link` function.
     4 *
     5 * @package WordPress
     6 */
     7
     8/**
     9 * Tests for the Tests_Link_GetThePrivacyPolicyLink class.
     10 *
     11 * @group link
     12 * @since 4.9.6
     13 */
     14class Tests_Link_GetThePrivacyPolicyLink extends WP_UnitTestCase {
     15
     16        /**
     17         * The get_the_privacy_policy_link() function should return the privacy policy link.
     18         *
     19         * @ticket 43620
     20         */
     21        public function test_get_the_privacy_policy_link() {
     22                $page_id = self::factory()->post->create( array( 'post_type' => 'page' ) );
     23                update_option( 'wp_page_for_privacy_policy', $page_id );
     24
     25                $expected = sprintf(
     26                        '<a class="privacy-policy-link" href="%s">Privacy Policy</a>',
     27                        esc_url( get_permalink( $page_id ) )
     28                );
     29                $actual   = get_the_privacy_policy_link();
     30
     31                $this->assertSame( $expected, $actual );
     32        }
     33
     34        /**
     35         * The get_the_privacy_policy_link() function should support output pre- and appending.
     36         *
     37         * @ticket 43620
     38         */
     39        public function test_get_the_privacy_policy_link_should_support_pre_and_appending() {
     40                $page_id = self::factory()->post->create( array( 'post_type' => 'page' ) );
     41                update_option( 'wp_page_for_privacy_policy', $page_id );
     42
     43                $expected = sprintf(
     44                        '<span><a class="privacy-policy-link" href="%s">Privacy Policy</a></span>',
     45                        esc_url( get_permalink( $page_id ) )
     46                );
     47                $actual   = get_the_privacy_policy_link( '<span>', '</span>' );
     48
     49                $this->assertSame( $expected, $actual );
     50        }
     51
     52        /**
     53         * The get_the_privacy_policy_link() function should not pre- and append when privacy policy page isn't set.
     54         *
     55         * @ticket 43620
     56         */
     57        public function test_get_the_privacy_policy_link_should_not_pre_and_append_when_privacy_policy_page_not_set() {
     58                delete_option( 'wp_page_for_privacy_policy' );
     59
     60                $this->assertEmpty( get_the_privacy_policy_link( '<span>', '</span>' ) );
     61        }
     62
     63        /**
     64         * The get_privacy_policy_url() function should return empty when privacy policy page isn't set.
     65         *
     66         * @ticket 43620
     67         */
     68        public function test_get_the_privacy_policy_link_should_return_empty_when_privacy_policy_page_not_set() {
     69                delete_option( 'wp_page_for_privacy_policy' );
     70
     71                $this->assertEmpty( get_the_privacy_policy_link() );
     72        }
     73
     74        /**
     75         * The get_the_privacy_policy_link() function should be filterable with the 'the_privacy_policy_link' filter.
     76         *
     77         * @ticket 43620
     78         */
     79        public function test_get_the_privacy_policy_link_should_be_filterable() {
     80                $page_id = self::factory()->post->create( array( 'post_type' => 'page' ) );
     81                update_option( 'wp_page_for_privacy_policy', $page_id );
     82
     83                add_filter( 'the_privacy_policy_link', '__return_empty_string' );
     84                $actual = get_the_privacy_policy_link();
     85                remove_filter( 'the_privacy_policy_link', '__return_empty_string' );
     86
     87                $this->assertEmpty( $actual );
     88        }
     89
     90}