PluginProbe
Bogo / 2.7
Bogo v2.7
3.9.3 trunk 1.0 1.1 2.0 2.0.1 2.1 2.1.1 2.1.2 2.1.3 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6 2.6.1 2.7 2.8 2.8.1 2.9 3.0 3.0.1 All 52 releases
bogo / includes / post.php

post.php in Bogo 2.7, at includes/post.php

200 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /* Post Template */
4
5 add_filter( 'body_class', 'bogo_body_class', 10, 2 );
6
7 function bogo_body_class( $classes, $class ) {
8 $locale = bogo_language_tag( get_locale() );
9 $locale = esc_attr( $locale );
10
11 if ( $locale && ! in_array( $locale, $classes ) )
12 $classes[] = $locale;
13
14 return $classes;
15 }
16
17 add_filter( 'post_class', 'bogo_post_class', 10, 3 );
18
19 function bogo_post_class( $classes, $class, $post_id ) {
20 $locale = bogo_get_post_locale( $post_id );
21 $locale = bogo_language_tag( $locale );
22 $locale = esc_attr( $locale );
23
24 if ( $locale && ! in_array( $locale, $classes ) )
25 $classes[] = $locale;
26
27 return $classes;
28 }
29
30 function bogo_get_post_locale( $post_id ) {
31 $locale = get_post_meta( $post_id, '_locale', true );
32
33 if ( empty( $locale ) ) {
34 $locale = bogo_get_default_locale();
35 }
36
37 return $locale;
38 }
39
40 function bogo_localizable_post_types() {
41 $localizable = array( 'post', 'page' );
42
43 return apply_filters( 'bogo_localizable_post_types', $localizable );
44 }
45
46 function bogo_is_localizable_post_type( $post_type ) {
47 return ! empty( $post_type ) && in_array( $post_type, bogo_localizable_post_types() );
48 }
49
50 function bogo_get_post_translations( $post_id = 0 ) {
51 $post = get_post( $post_id );
52
53 if ( ! $post )
54 return false;
55
56 if ( 'auto-draft' == $post->post_status ) {
57 if ( ! empty( $_REQUEST['original_post'] ) ) {
58 $original = get_post_meta( $_REQUEST['original_post'], '_original_post', true );
59
60 if ( empty( $original ) )
61 $original = (int) $_REQUEST['original_post'];
62 } else {
63 return false;
64 }
65 } else {
66 $original = get_post_meta( $post->ID, '_original_post', true );
67 }
68
69 if ( empty( $original ) )
70 $original = $post->ID;
71
72 $args = array(
73 'bogo_suppress_locale_query' => true,
74 'posts_per_page' => -1,
75 'post_status' => 'any',
76 'post_type' => $post->post_type,
77 'meta_key' => '_original_post',
78 'meta_value' => $original );
79
80 $q = new WP_Query();
81 $posts = $q->query( $args );
82
83 $translations = array();
84
85 $original_post_status = get_post_status( $original );
86
87 if ( $original != $post->ID && $original_post_status && 'trash' != $original_post_status ) {
88 $locale = bogo_get_post_locale( $original );
89 $translations[$locale] = get_post( $original );
90 }
91
92 foreach ( $posts as $p ) {
93 if ( $p->ID == $post->ID )
94 continue;
95
96 $locale = bogo_get_post_locale( $p->ID );
97
98 if ( ! bogo_is_available_locale( $locale ) )
99 continue;
100
101 if ( ! isset( $translations[$locale] ) )
102 $translations[$locale] = $p;
103 }
104
105 return array_filter( $translations );
106 }
107
108 function bogo_get_page_by_path( $page_path, $locale = null, $post_type = 'page' ) {
109 global $wpdb;
110
111 if ( ! bogo_is_available_locale( $locale ) )
112 $locale = bogo_get_default_locale();
113
114 $page_path = rawurlencode( urldecode( $page_path ) );
115 $page_path = str_replace( '%2F', '/', $page_path );
116 $page_path = str_replace( '%20', ' ', $page_path );
117
118 $parts = explode( '/', trim( $page_path, '/' ) );
119 $parts = array_map( 'esc_sql', $parts );
120 $parts = array_map( 'sanitize_title_for_query', $parts );
121
122 $in_string = "'" . implode( "','", $parts ) . "'";
123 $post_type_sql = $post_type;
124 $wpdb->escape_by_ref( $post_type_sql );
125
126 $q = "SELECT ID, post_name, post_parent FROM $wpdb->posts";
127 $q .= " LEFT JOIN $wpdb->postmeta ON ID = $wpdb->postmeta.post_id AND meta_key = '_locale'";
128 $q .= " WHERE 1=1";
129 $q .= " AND post_name IN ($in_string)";
130 $q .= " AND (post_type = '$post_type_sql' OR post_type = 'attachment')";
131 $q .= " AND (1=0";
132 $q .= $wpdb->prepare( " OR meta_value LIKE %s", $locale );
133 $q .= bogo_is_default_locale( $locale ) ? " OR meta_id IS NULL" : "";
134 $q .= ")";
135
136 $pages = $wpdb->get_results( $q, OBJECT_K );
137
138 $revparts = array_reverse( $parts );
139
140 $foundid = 0;
141
142 foreach ( (array) $pages as $page ) {
143 if ( $page->post_name != $revparts[0] )
144 continue;
145
146 $count = 0;
147 $p = $page;
148
149 while ( $p->post_parent != 0 && isset( $pages[$p->post_parent] ) ) {
150 $count++;
151 $parent = $pages[$p->post_parent];
152
153 if ( ! isset( $revparts[$count] ) || $parent->post_name != $revparts[$count] )
154 break;
155
156 $p = $parent;
157 }
158
159 if ( $p->post_parent == 0
160 && $count + 1 == count( $revparts )
161 && $p->post_name == $revparts[$count] ) {
162 $foundid = $page->ID;
163 break;
164 }
165 }
166
167 if ( $foundid )
168 return get_page( $foundid );
169
170 return null;
171 }
172
173 add_filter( 'get_pages', 'bogo_get_pages', 10, 2 );
174
175 function bogo_get_pages( $pages, $args ) {
176 if ( is_admin()
177 || ! bogo_is_localizable_post_type( $args['post_type'] )
178 || ! empty( $args['bogo_suppress_locale_query'] ) ) {
179 return $pages;
180 }
181
182 $locale = isset( $args['lang'] ) ? $args['lang'] : get_locale();
183
184 if ( ! bogo_is_available_locale( $locale ) ) {
185 return $pages;
186 }
187
188 $new_pages = array();
189
190 foreach ( (array) $pages as $page ) {
191 $post_locale = bogo_get_post_locale( $page->ID );
192
193 if ( $post_locale == $locale ) {
194 $new_pages[] = $page;
195 }
196 }
197
198 return $new_pages;
199 }
200