WordPress.org

Make WordPress Core

Changeset 38603


Ignore:
Timestamp:
09/14/16 21:27:16 (8 months ago)
Author:
jorbin
Message:

Posts: Add filter to allow overriding post_password_required return

Post Passwords are incredibly inflexible. One Password per site at a time and other limitations that can't really be changed without a backwards compatibility break. This adds the ability for sites to change the password behavior such as doing per post passwords or allowing multiple passwords to be set in a browser. The possibilities are YUGE.

Additionally, it allows for a behavior other than returning a html form when a password is needed. This is important for non website use cases (such as in a restful API).

Fixes #38056. See #16483.
Props rmccue.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post-template.php

    r38574 r38603  
    780780    $post = get_post($post); 
    781781 
    782     if ( empty( $post->post_password ) ) 
    783         return false; 
    784  
    785     if ( ! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) ) 
    786         return true; 
     782    if ( empty( $post->post_password ) ) { 
     783        /** This filter is documented in wp-includes/post.php */ 
     784        return apply_filters( 'post_password_required', false, $post ); 
     785    } 
     786 
     787    if ( ! isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) { 
     788        /** This filter is documented in wp-includes/post.php */ 
     789        return apply_filters( 'post_password_required', true, $post ); 
     790    } 
    787791 
    788792    $hasher = new PasswordHash( 8, true ); 
    789793 
    790794    $hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ); 
    791     if ( 0 !== strpos( $hash, '$P$B' ) ) 
    792         return true; 
    793  
    794     return ! $hasher->CheckPassword( $post->post_password, $hash ); 
     795    if ( 0 !== strpos( $hash, '$P$B' ) ) { 
     796        $required = true; 
     797    } else { 
     798        $required = ! $hasher->CheckPassword( $post->post_password, $hash ); 
     799    } 
     800 
     801    /** 
     802     * Filter whether a post requires the user to supply a password. 
     803     * 
     804     * @param bool    $required Whether the user needs to supply a password. True if password has not been 
     805     *                          provided or is incorrect, false if password has been supplied or is not required. 
     806     * @param WP_Post $post Post data. 
     807     */ 
     808    return apply_filters( 'post_password_required', $required, $post ); 
    795809} 
    796810 
Note: See TracChangeset for help on using the changeset viewer.