Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function save_index( $post_id ) {
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
- return;
- }
- $slug = 'post';
- $letter = '';
- // only run for posts
- if ( isset( $_POST['post_type'] ) && ( $slug != $_POST['post_type'] ) ) {
- return;
- }
- // Check user capabilities
- if ( ! current_user_can( 'edit_post', $post_id ) ) {
- return;
- }
- $taxonomy = 'index'; // our custom taxonomy
- if ( isset( $_POST['post_type'] ) ) {
- // Get the title of the post
- $title = strtolower( $_POST['post_title'] );
- // The next few lines remove A, An, or The from the start of the title
- $splitTitle = explode( ' ', $title );
- $blacklist = [ 'an ', 'a ', 'the ' ];
- $splitTitle[0] = str_replace( $blacklist, '', strtolower( $splitTitle[0] ) );
- $title = implode( ' ', $splitTitle );
- // Get the first letter of the title
- $letter = substr( $title, 0, 1 );
- // Set to 0-9 if it's a number
- if ( is_numeric( $letter ) ) {
- $letter = '0-9';
- }
- }
- // set term as first letter of post title, lower case
- wp_set_post_terms( $post_id, $letter, $taxonomy );
- }
- add_action( 'save_post', 'save_index' );
- add_action( 'init', function () {
- add_rewrite_tag( '%filter%', '([^&]+)' );
- add_rewrite_rule( 'member/filter/([a-zA-Z0-9-]{1,3})[/]?$', 'index.php?post_type=mbe-members&filter=$matches[1]', 'top' );
- } );
- $filter = get_query_var( 'filter' );
- $filter_start = null;
- $filter_end = null;
- if ( strpos( $filter, '-' ) !== false ) {
- if ( $pieces = explode( '-', $filter ) ) {
- if ( isset( $pieces[0] ) ) {
- $filter_start = $pieces[0];
- }
- if ( isset( $pieces[1] ) ) {
- $filter_end = $pieces[1];
- }
- }
- } else {
- $filter_start = substr( $filter, 0, 1 );
- }
- global $wpdb;
- $post_ids = array();
- if ( ! is_null( $filter_start ) && ! is_null( $filter_end ) ) {
- $range = range( $filter_start, $filter_end );
- foreach ( $range as $value ) {
- $query_args = array(
- 'SELECT' => 'ID',
- 'FROM' => $wpdb->posts,
- 'WHERE' => 'post_title'
- );
- if ( is_numeric( $value ) ) {
- $query_args['LIKE'] = '%d';
- } else {
- $query_args['LIKE'] = '%s';
- }
- if ( $query = $wpdb->get_results( $wpdb->prepare( "
- SELECT {$query_args['SELECT']}
- FROM {$query_args['FROM']}
- WHERE {$query_args['WHERE']}
- LIKE {$query_args['LIKE']}
- ", "{$value}%" ) ) ) {
- foreach ( $query as $result ) {
- $post_ids[] = $result->ID;
- }
- }
- }
- } else {
- if ( ! is_null( $filter_start ) ) {
- $value = $filter_start;
- $query_args = array(
- 'SELECT' => 'ID',
- 'FROM' => $wpdb->posts,
- 'WHERE' => 'post_title',
- );
- if ( is_numeric( $value ) ) {
- $query_args['LIKE'] = '%d';
- } else {
- $query_args['LIKE'] = '%s';
- }
- if ( $query = $wpdb->get_results( $wpdb->prepare( "
- SELECT {$query_args['SELECT']}
- FROM {$query_args['FROM']}
- WHERE {$query_args['WHERE']}
- LIKE {$query_args['LIKE']}
- ", "{$value}%" ) ) ) {
- foreach ( $query as $result ) {
- $post_ids[] = $result->ID;
- }
- }
- }
- }
- $content = '';
- if ( ! empty( $post_ids ) ) {
- $query = new WP_Query( array(
- 'post_type' => 'mbe-members',
- 'posts_per_page' => 100,
- 'post_status' => 'publish',
- 'orderby' => 'post_title',
- 'order' => 'ASC',
- 'update_post_meta_cache' => false,
- 'update_post_term_cache' => false,
- 'suppress_filters' => true,
- 'post__in' => $post_ids
- ) );
- if ( $query->have_posts() ) {
- foreach ( $query->posts as $post ) {
- $content .= $post->post_title . '<br />';
- }
- }
- }
- echo '<div>' . PHP_EOL;
- echo '<ul class="nav nav-tabs" role="tablist">' . PHP_EOL;
- $class = '';
- if ( $filter == '0-9' ) {
- $class = 'active';
- }
- 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;
- foreach ( range( 'a', 'z' ) as $letter ) {
- $class = '';
- if ( $letter == $filter_start ) {
- $class = 'active';
- }
- echo '<li role="presentation" class="' . $class . '"><a href="' . site_url( '/member/filter/' . $letter . '/' ) . '" aria-controls="' . $letter . '" role="tab">' . $letter . '</a></li>' . PHP_EOL;
- }
- echo '</ul>' . PHP_EOL;
- echo '<div class="tab-content">' . PHP_EOL;
- $class = '';
- if ( $filter == '0-9' ) {
- $class = 'active';
- }
- echo '<div role="tabpanel" class="tab-pane ' . $class . '" id="0-9">' . PHP_EOL;
- if ( $filter == '0-9' ) {
- echo $content;
- }
- echo '</div>' . PHP_EOL;
- foreach ( range( 'a', 'z' ) as $letter ) {
- $class = '';
- if ( $letter == $filter_start ) {
- $class = 'active';
- }
- echo '<div role="tabpanel" class="tab-pane ' . $class . '" id="' . $letter . '">' . PHP_EOL;
- if ( $letter == $filter_start ) {
- echo $content;
- }
- echo '</div>' . PHP_EOL;
- }
- echo '</div>' . PHP_EOL;
- echo '</div>' . PHP_EOL;
Add Comment
Please, Sign In to add comment