Guest User

Untitled

a guest
Mar 18th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. function save_index( $post_id ) {
  2. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
  3. return;
  4. }
  5.  
  6. $slug = 'post';
  7. $letter = '';
  8.  
  9. // only run for posts
  10. if ( isset( $_POST['post_type'] ) && ( $slug != $_POST['post_type'] ) ) {
  11. return;
  12. }
  13.  
  14. // Check user capabilities
  15. if ( ! current_user_can( 'edit_post', $post_id ) ) {
  16. return;
  17. }
  18.  
  19. $taxonomy = 'index'; // our custom taxonomy
  20.  
  21. if ( isset( $_POST['post_type'] ) ) {
  22.  
  23. // Get the title of the post
  24. $title = strtolower( $_POST['post_title'] );
  25.  
  26. // The next few lines remove A, An, or The from the start of the title
  27. $splitTitle = explode( ' ', $title );
  28. $blacklist = [ 'an ', 'a ', 'the ' ];
  29. $splitTitle[0] = str_replace( $blacklist, '', strtolower( $splitTitle[0] ) );
  30. $title = implode( ' ', $splitTitle );
  31.  
  32. // Get the first letter of the title
  33. $letter = substr( $title, 0, 1 );
  34.  
  35. // Set to 0-9 if it's a number
  36. if ( is_numeric( $letter ) ) {
  37. $letter = '0-9';
  38. }
  39. }
  40.  
  41. // set term as first letter of post title, lower case
  42. wp_set_post_terms( $post_id, $letter, $taxonomy );
  43. }
  44.  
  45. add_action( 'save_post', 'save_index' );
  46.  
  47. add_action( 'init', function () {
  48.  
  49. add_rewrite_tag( '%filter%', '([^&]+)' );
  50. add_rewrite_rule( 'member/filter/([a-zA-Z0-9-]{1,3})[/]?$', 'index.php?post_type=mbe-members&filter=$matches[1]', 'top' );
  51.  
  52. } );
  53.  
  54. $filter = get_query_var( 'filter' );
  55. $filter_start = null;
  56. $filter_end = null;
  57.  
  58. if ( strpos( $filter, '-' ) !== false ) {
  59.  
  60. if ( $pieces = explode( '-', $filter ) ) {
  61.  
  62. if ( isset( $pieces[0] ) ) {
  63. $filter_start = $pieces[0];
  64. }
  65.  
  66. if ( isset( $pieces[1] ) ) {
  67. $filter_end = $pieces[1];
  68. }
  69.  
  70. }
  71.  
  72. } else {
  73. $filter_start = substr( $filter, 0, 1 );
  74. }
  75.  
  76. global $wpdb;
  77.  
  78. $post_ids = array();
  79.  
  80. if ( ! is_null( $filter_start ) && ! is_null( $filter_end ) ) {
  81.  
  82. $range = range( $filter_start, $filter_end );
  83.  
  84. foreach ( $range as $value ) {
  85.  
  86. $query_args = array(
  87. 'SELECT' => 'ID',
  88. 'FROM' => $wpdb->posts,
  89. 'WHERE' => 'post_title'
  90. );
  91.  
  92. if ( is_numeric( $value ) ) {
  93. $query_args['LIKE'] = '%d';
  94. } else {
  95. $query_args['LIKE'] = '%s';
  96. }
  97.  
  98. if ( $query = $wpdb->get_results( $wpdb->prepare( "
  99. SELECT {$query_args['SELECT']}
  100. FROM {$query_args['FROM']}
  101. WHERE {$query_args['WHERE']}
  102. LIKE {$query_args['LIKE']}
  103. ", "{$value}%" ) ) ) {
  104.  
  105. foreach ( $query as $result ) {
  106. $post_ids[] = $result->ID;
  107. }
  108.  
  109. }
  110.  
  111. }
  112.  
  113. } else {
  114.  
  115. if ( ! is_null( $filter_start ) ) {
  116.  
  117. $value = $filter_start;
  118.  
  119. $query_args = array(
  120. 'SELECT' => 'ID',
  121. 'FROM' => $wpdb->posts,
  122. 'WHERE' => 'post_title',
  123. );
  124.  
  125. if ( is_numeric( $value ) ) {
  126. $query_args['LIKE'] = '%d';
  127. } else {
  128. $query_args['LIKE'] = '%s';
  129. }
  130.  
  131. if ( $query = $wpdb->get_results( $wpdb->prepare( "
  132. SELECT {$query_args['SELECT']}
  133. FROM {$query_args['FROM']}
  134. WHERE {$query_args['WHERE']}
  135. LIKE {$query_args['LIKE']}
  136. ", "{$value}%" ) ) ) {
  137.  
  138. foreach ( $query as $result ) {
  139. $post_ids[] = $result->ID;
  140. }
  141.  
  142. }
  143.  
  144. }
  145.  
  146. }
  147.  
  148. $content = '';
  149.  
  150. if ( ! empty( $post_ids ) ) {
  151.  
  152. $query = new WP_Query( array(
  153. 'post_type' => 'mbe-members',
  154. 'posts_per_page' => 100,
  155. 'post_status' => 'publish',
  156. 'orderby' => 'post_title',
  157. 'order' => 'ASC',
  158. 'update_post_meta_cache' => false,
  159. 'update_post_term_cache' => false,
  160. 'suppress_filters' => true,
  161. 'post__in' => $post_ids
  162. ) );
  163.  
  164. if ( $query->have_posts() ) {
  165.  
  166. foreach ( $query->posts as $post ) {
  167. $content .= $post->post_title . '<br />';
  168. }
  169.  
  170. }
  171.  
  172. }
  173.  
  174. echo '<div>' . PHP_EOL;
  175.  
  176. echo '<ul class="nav nav-tabs" role="tablist">' . PHP_EOL;
  177.  
  178. $class = '';
  179.  
  180. if ( $filter == '0-9' ) {
  181. $class = 'active';
  182. }
  183.  
  184. echo '<li role="presentation" class="' . $class . '"><a href="' . site_url( '/member/filter/0-9/' ) . '" aria-controls="0-9" role="tab">0-9</a></li>' . PHP_EOL;
  185.  
  186. foreach ( range( 'a', 'z' ) as $letter ) {
  187.  
  188. $class = '';
  189.  
  190. if ( $letter == $filter_start ) {
  191. $class = 'active';
  192. }
  193.  
  194. echo '<li role="presentation" class="' . $class . '"><a href="' . site_url( '/member/filter/' . $letter . '/' ) . '" aria-controls="' . $letter . '" role="tab">' . $letter . '</a></li>' . PHP_EOL;
  195.  
  196. }
  197.  
  198. echo '</ul>' . PHP_EOL;
  199.  
  200. echo '<div class="tab-content">' . PHP_EOL;
  201.  
  202. $class = '';
  203.  
  204. if ( $filter == '0-9' ) {
  205. $class = 'active';
  206. }
  207.  
  208. echo '<div role="tabpanel" class="tab-pane ' . $class . '" id="0-9">' . PHP_EOL;
  209.  
  210. if ( $filter == '0-9' ) {
  211. echo $content;
  212. }
  213.  
  214. echo '</div>' . PHP_EOL;
  215.  
  216. foreach ( range( 'a', 'z' ) as $letter ) {
  217.  
  218. $class = '';
  219.  
  220. if ( $letter == $filter_start ) {
  221. $class = 'active';
  222. }
  223.  
  224. echo '<div role="tabpanel" class="tab-pane ' . $class . '" id="' . $letter . '">' . PHP_EOL;
  225.  
  226. if ( $letter == $filter_start ) {
  227. echo $content;
  228. }
  229.  
  230. echo '</div>' . PHP_EOL;
  231.  
  232. }
  233.  
  234. echo '</div>' . PHP_EOL;
  235.  
  236. echo '</div>' . PHP_EOL;
Add Comment
Please, Sign In to add comment