Intereting Posts
Несколько сайтов WordPress с докере Редактирование исходного кода в WordPress пользовательский тип сообщения и нестандартная галерея Как создать столбец post_id для списка сообщений администратора? Должны ли файлы плагинов следовать конкретному соглашению, которое будет «подхвачено» WordPress? Закрепление скриптов и стилей в пользовательских плагинах Как активировать или установить виджет галереи? Как использовать только скрипты из новой темы? Заполнить пользовательские поля в пользовательском типе сообщений? Ссылка автора url ссылка не так? Как перейти от авторов / к автору / Как SQL-запросы отправляют идентификаторы по категориям и авторам? Добавить заголовки меню в подменю WordPress Страница «Пустое пользовательское сообщение типа» возвращает 404 в WP 3.1 Как заказать отдельные результаты пользовательского поиска У вас возникли проблемы с значком the_post_thumbnail для отображения миниатюр с нестандартным размером

Получение алфавитного списка сообщений с двумя буквами onclick on letter

У меня есть веб-сайт в WordPress и страница со списком с такими буквами:

 ABCDEFGHI ... 

Это показывает мне все сообщения с буквой А, например. Это хорошо, но я хочу, чтобы это стало проще для моих пользователей, поэтому я хочу получить Ab и все сообщения, начиная с Ab, если я нажму на A , под этим списком. Другой пример: я хочу получить Dc и все сообщения, начинающиеся с букв Dc, если я нажму D Я знаю, что это возможно, делая 26 страниц, содержащих буквы и функции, но должен быть более простой способ сделать это.

Кроме того, я не хочу 26 страниц для такой простой вещи. Это повлияет на SEO .

Может ли кто-нибудь помочь мне с этим?

Solutions Collecting From Web of "Получение алфавитного списка сообщений с двумя буквами onclick on letter"

Возможно, я не понимаю ваш вопрос, в этом случае извините , мой английский далеко не идеален.

Я понимаю, что у вас есть шаблон страницы, который показывает список букв, и когда вы нажимаете на букву, на той же странице отображается список сообщений, в которых «post_title» начинается с этого письма.

Теперь вы хотите, чтобы при отображении этого списка можно было фильтровать сообщения, используя 2 буквы вместо одной, где первая буква выбрана раньше.

Это правильно? Если это так, это должно работать:

 <?php /** * Template Name: Capital Template */ get_header(); the_post(); $page_link = get_permalink(); $letter = isset($_GET['letter']) ? $_GET['letter'] : null; // limit the 'letter' param to 2 chars if ( $letter && strlen($_GET['letter'])>2 ) $letter = substr($letter, 0, 2); ?> <?php // PAGE FILTERS PART $letters = array('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N', 'O','P','Q','R','S','T','U','V','W','X','W','Z'); if ( ! $letter ) { // adjust the query args to fit your needs $args = array('posts_per_page' => 50, 'orderby' => 'post_title', 'order' => 'ASC'); $posts = get_posts($args); } else { global $wpdb; // adjust the query to fit your needs $posts = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_title LIKE %s ORDER BY post_title ASC", $letter . '%' ) ); } echo '<ul>'; foreach ( $letters as $l) { $param = $letter ? $letter.$l : $l; printf('<li><a href="%s?letter=%s">%s</a></li>',$page_link, $param, $param); } echo '</ul>'; if ($letter) { printf('<p id="#filter-remover"><a href="%s?letter=%s">%s</a>', $page_link, $letter, __('Back to capital letter &quot;' . $letter . '&quot; filter') ); printf(', <a href="%s">%s</a><p>', $page_link, __('or remove capital letter filter at all.') ); } ?> <?php // PAGE CONTENT PART global $post; if ( ! empty($posts) ) : foreach ($posts as $post) { setup_postdata($post); ?> <?php /* YOUR LOOP CODE HERE */ ?> <p><?php the_title(); ?></p> <?php } else : echo '<p>'; _e('Sorry, no posts match your criteria.'); if ( $letter ) { printf('<br /><a href="%s">%s</a>', $page_link, __('Try to remove the capital letter filter.') ); } echo '</p>'; endif; wp_reset_postdata(); get_footer(); 

Изменить: jquery trick

Одна из ошибок моего кода выше заключается в том, что фильтр показывает всю заглавную букву, даже если для этого нет сообщений: если у фильтра «A» нет сообщения, также «AB», «AC» и т. Д., есть сообщения, поэтому, почему их показывать? Используя php, вы можете зацикливать сообщения и помещать только фильтр, у которого есть шанс получить некоторые результаты, но это означает, что цикл 2 раза. Я думаю, что есть лучшее решение: jQuery.

Примечание: это работает только в том случае, если в запросе отображаются все сообщения или, лучше, все сообщения, которые вы хотите отфильтровать (т. LIMIT Предложение LIMIT в sql-запросе)

Прежде всего, в разделе «ФИЛЬТР» измените цикл foreach в этом:

 echo '<ul class="letter-filters">'; foreach ( $letters as $l) { $param = $letter ? $letter.$l : $l; printf('<li><a href="%s?letter=%s" class="letter-filter">%s</a></li>', $page_link, $param, $param ); } echo '</ul>'; 

Затем в части кода цикла используйте что-то вроде этого:

 <?php echo '<div id="posts-container" data-letter="' . $letter. '">'; if ( ! empty($posts) ) : foreach ($posts as $post) { setup_postdata($post); /* YOUR LOOP CODE */ $datacapital = $letter ? strtoupper( substr(get_the_title(), 0, strlen($letter)+1 ) ) : ''; ?> <div class="post" id="post-<?php the_ID()?>" data-capital="<?php echo $datacapital; ?>"> <p><?php the_title(); ?></p> </div> ... endif; echo '</div>'; wp_reset_postdata(); 

Наконец, код jQuery:

 <script> // please, do not use jquery like so, // register and enqueue it like every WP developer should do :) // this is for semplicity of answer jQuery().ready(function($) { if ( $('#posts-container').data('letter') != '' ) { var oldcapital = null; $('ul.letter-filters li').hide(); $('.post').each(function() { var capital = $(this).data('capital'); if ( ! oldcapital || (oldcapital != capital) ) { oldcapital = capital; $('a.letter-filter').each(function() { if ( $(this).text() == capital ) $(this).parent().show(); }); } }); } }); </script> 

Обратите внимание, что я не разработчик js / jquery, возможно, есть более элегантный / эффективный способ сделать то же самое …

Конечно, это не полный код страницы, а только соответствующая часть.

Надеюсь, поможет.