|
1
|
|
|
<?php |
|
|
|
|
|
|
2
|
|
|
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly |
|
3
|
|
|
/** |
|
4
|
|
|
* |
|
5
|
|
|
* Renders the [sensei_lesson_page] shortcode. Display a single lesson based on the ID parameter given. |
|
6
|
|
|
* |
|
7
|
|
|
* This class is loaded int WP by the shortcode loader class. |
|
8
|
|
|
* |
|
9
|
|
|
* @class Sensei_Shortcode_Lesson_Page |
|
10
|
|
|
* |
|
11
|
|
|
* @package Content |
|
12
|
|
|
* @subpackage Shortcode |
|
13
|
|
|
* @author Automattic |
|
14
|
|
|
* |
|
15
|
|
|
* @since 1.9.0 |
|
16
|
|
|
*/ |
|
17
|
|
|
class Sensei_Shortcode_Lesson_Page implements Sensei_Shortcode_Interface { |
|
18
|
|
|
|
|
19
|
|
|
/** |
|
20
|
|
|
* @var array $lesson_page_query { |
|
21
|
|
|
* @type WP_Post |
|
22
|
|
|
* } |
|
23
|
|
|
* The lessons query |
|
24
|
|
|
*/ |
|
25
|
|
|
protected $lesson_page_query; |
|
26
|
|
|
|
|
27
|
|
|
/** |
|
28
|
|
|
* Setup the shortcode object |
|
29
|
|
|
* |
|
30
|
|
|
* @since 1.9.0 |
|
31
|
|
|
* @param array $attributes |
|
32
|
|
|
* @param string $content |
|
33
|
|
|
* @param string $shortcode the shortcode that was called for this instance |
|
34
|
|
|
*/ |
|
35
|
|
|
public function __construct( $attributes, $content, $shortcode ){ |
|
36
|
|
|
|
|
37
|
|
|
$this->id = isset( $attributes['id'] ) ? $attributes['id'] : ''; |
|
38
|
|
|
$this->setup_lesson_query(); |
|
39
|
|
|
|
|
40
|
|
|
} |
|
41
|
|
|
|
|
42
|
|
|
/** |
|
43
|
|
|
* create the lessons query . |
|
44
|
|
|
* |
|
45
|
|
|
* @return mixed |
|
46
|
|
|
*/ |
|
47
|
|
View Code Duplication |
public function setup_lesson_query(){ |
|
|
|
|
|
|
48
|
|
|
|
|
49
|
|
|
if( empty( $this->id ) ){ |
|
50
|
|
|
return; |
|
51
|
|
|
} |
|
52
|
|
|
|
|
53
|
|
|
$args = array( |
|
54
|
|
|
'post_type' => 'lesson', |
|
55
|
|
|
'posts_per_page' => 1, |
|
56
|
|
|
'post_status' => 'publish', |
|
57
|
|
|
'post__in' => array( $this->id ), |
|
58
|
|
|
); |
|
59
|
|
|
|
|
60
|
|
|
$this->lesson_page_query = new WP_Query( $args ); |
|
|
|
|
|
|
61
|
|
|
|
|
62
|
|
|
} |
|
63
|
|
|
|
|
64
|
|
|
/** |
|
65
|
|
|
* Rendering the shortcode this class is responsible for. |
|
66
|
|
|
* |
|
67
|
|
|
* @return string $content |
|
68
|
|
|
*/ |
|
69
|
|
|
public function render(){ |
|
70
|
|
|
|
|
71
|
|
|
if( empty( $this->id ) ){ |
|
72
|
|
|
|
|
73
|
|
|
return __( 'Please supply a lesson ID for this shortcode.', 'woothemes-sensei' ); |
|
74
|
|
|
|
|
75
|
|
|
} |
|
76
|
|
|
|
|
77
|
|
|
//set the wp_query to the current lessons query |
|
78
|
|
|
global $wp_query; |
|
79
|
|
|
$wp_query = $this->lesson_page_query; |
|
80
|
|
|
|
|
81
|
|
|
if( have_posts() ){ |
|
82
|
|
|
|
|
83
|
|
|
the_post(); |
|
84
|
|
|
|
|
85
|
|
|
}else{ |
|
86
|
|
|
|
|
87
|
|
|
return __('No posts found.', 'woothemes-sensei'); |
|
88
|
|
|
|
|
89
|
|
|
} |
|
90
|
|
|
|
|
91
|
|
|
ob_start(); |
|
92
|
|
|
Sensei_Templates::get_template('content-single-lesson.php'); |
|
93
|
|
|
$shortcode_output = ob_get_clean(); |
|
94
|
|
|
|
|
95
|
|
|
// set back the global query |
|
96
|
|
|
wp_reset_query(); |
|
97
|
|
|
|
|
98
|
|
|
return $shortcode_output; |
|
99
|
|
|
|
|
100
|
|
|
}// end render |
|
101
|
|
|
|
|
102
|
|
|
}// end class |
|
103
|
|
|
|
|
104
|
|
|
|
The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.
The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.
To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.