PluginProbe
Polylang / 2.5
Polylang v2.5
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | include/links.php +29 -3 2.92.5 View file →
@@ -1,8 +1,5 @@
1 1 <?php
2 -/**
3 - * @package Polylang
4 - */
5 2
6 3 /**
7 4 * Manages links related functions
8 5 *
@@ -34,6 +31,35 @@
34 31 */
35 32 public function get_home_url( $language, $is_search = false ) {
36 33 $language = is_object( $language ) ? $language : $this->model->get_language( $language );
37 34 return $is_search ? $language->search_url : $language->home_url;
35 + }
36 +
37 + /**
38 + * Checks if the current user can read the post
39 + *
40 + * @since 1.5
41 + *
42 + * @param int $post_id
43 + * @return bool
44 + */
45 + public function current_user_can_read( $post_id ) {
46 + $post = get_post( $post_id );
47 +
48 + if ( 'inherit' === $post->post_status && $post->post_parent ) {
49 + $post = get_post( $post->post_parent );
50 + }
51 +
52 + if ( 'inherit' === $post->post_status || in_array( $post->post_status, get_post_stati( array( 'public' => true ) ) ) ) {
53 + return true;
54 + }
55 +
56 + // Follow WP practices, which shows links to private posts ( when readable ), but not for draft posts ( ex: get_adjacent_post_link() )
57 + if ( in_array( $post->post_status, get_post_stati( array( 'private' => true ) ) ) ) {
58 + $post_type_object = get_post_type_object( $post->post_type );
59 + $user = wp_get_current_user();
60 + return is_user_logged_in() && ( current_user_can( $post_type_object->cap->read_private_posts ) || $user->ID == $post->post_author ); // Comparison must not be strict!
61 + }
62 +
63 + return false;
38 64 }
39 65 }