Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Helper function, check password + extra passwords
- */
- function wpsolucje_post_password_required( $post = null )
- {
- $post = get_post($post);
- if ( empty( $post->post_password ) )
- return false;
- if ( ! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
- return true;
- require_once ABSPATH . WPINC . '/class-phpass.php';
- $hasher = new PasswordHash( 8, true );
- $hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
- if ( 0 !== strpos( $hash, '$P$B' ) )
- return true;
- // Check the current password
- if( $hasher->CheckPassword( $post->post_password, $hash ) )
- return false;
- // Fetch extra passwords
- if( ! $extra_passwords = get_post_meta( $post->ID, 'wpsolucje_extra_passwords', true ) )
- return true;
- // Check these extra passwords
- $extra = explode( ',', $extra_passwords );
- foreach( (array) $extra as $password )
- {
- $password = trim( $password );
- if( ! empty( $password ) && $hasher->CheckPassword( $password, $hash ) )
- return false;
- }
- return true;
- }
- /**
- * Support extra post passwords for single posts in the main loop
- */
- add_filter( 'the_password_form', function( $output )
- {
- if( ! is_single() || ! in_the_loop() || did_action( 'the_password_form' ) )
- return $output;
- $post = get_post();
- // Display password form if none of the passwords matches:
- if( wpsolucje_post_password_required( $post ) )
- return $output;
- // Get the current password
- $password = $post->post_password;
- // Temporary remove it
- $post->post_password = '';
- // Fetch the content
- $content = get_the_content();
- // Set the password back
- $post->post_password = $password;
- return $content;
- } );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement