Должны ли постоянные ссылки всегда указывать на отдельные страницы?

Предположим, что у меня есть блог с несколькими сообщениями в месяц, без комментариев, и я не хочу показывать сообщения на отдельных страницах, но всегда «в контексте» (скажем, вместе с сообщениями в месяце – или, возможно, неделю?). Чтобы достичь этого, мне нужно было бы использовать дополнительные ссылки с идентификаторами фрагментов (#), среди прочего. Интересно, поддерживается ли это, или кто-то может указать мне на какой-то ресурс или обсуждение.

Отредактировано : Я написал в своем ответе подробности моей реализации.

Solutions Collecting From Web of "Должны ли постоянные ссылки всегда указывать на отдельные страницы?"

Есть два крючка с именем 'pre_post_link' и 'post_link' . Их первый аргумент, который вы можете изменить, – это постоянная ссылка. Так …

 add_filter( 'pre_post_link', 'wpse_42406_change_permalink', 10, 2 ); function wpse_42406_change_permalink( $permalink, $post ) { // change the permalink, let it point to an archive etc. return $permalink; } 

… изменит выход.

В вашей петле вы, вероятно, используете что-то вроде …

 <li id="post-<?php the_ID(); ?>"> 

Ваша постоянная ссылка может указывать на страницу архива по вашему выбору плюс #post-$post->ID . Например:

 http://example.com/2012/04/#post-42 

Просто откройте свои файлы тем и удалите теги из заголовка.

Пример. В вашем файле index.php, если у вас есть:

 <h2> <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"> <?php the_title(); ?></a> </h2> 

это станет следующим:

 <h2 class="entry-title"><?php the_title(); ?></h2> 

На всякий случай, когда посетитель найдет эту информацию полезной, я публикую свою рабочую версию. Для этого требуется небольшой плагин.

В этой реализации постоянные ссылки будут отображать ежемесячный архив, но URL-адрес все равно будет «полным», т. Е. Включает заголовок сообщения. Таким образом, 1) у меня больше свободы, если я хочу изменить эту схему позже, не нарушая постоянные ссылки и 2) у меня есть значимая статистика для моих посещений (я могу узнать, какие отдельные сообщения были посещены из моих журналов).

На странице администрирования я указываю эту структуру постоянных ссылок:

 /%year%/%monthnum%/%postname% eg: http://example.com/myblog/2012/01/sample_post 

Но последняя постоянная ссылка будет иметь вид:

 http://example.com/myblog/2012/01/sample_post#post-234 

Идентификатор фрагмента добавляется следующим подключением в плагине:

 /* adds hash */ function hjg_change_permalink( $permalink, $post ) { //if(strpos($permalink,'#')) return $permalink; return $permalink . "#post-" . $post->ID; } add_filter( 'post_link', 'hjg_change_permalink', 100, 2 ); 

Я также запустил следующее в плагине, так что постоянные ссылки, несмотря на то, что они выглядят как индивидуальные сообщения, интерпретируются как архивы:

 function hjg_parse_request( $wp ) { if(! isset($wp->query_vars)) return; if(! isset($wp->query_vars['year'])) return; $wp->query_vars['name']=''; // remove post name } add_action( 'parse_request', 'hjg_parse_request'); 

Моя тема унаследована от стандарта twenty-eleven , который уже объявляет идентификатор «пост-NNN» каждому сообщению, в content.php :

  <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> 

если вы используете другую тему, вам нужно добавить или адаптировать это.

Помните, что для того, чтобы это работало, ваши ежемесячные архивы не должны быть выгружены: вам нужно иметь максимальное количество сообщений в месяц и устанавливать это значение в «сообщениях за страницу» на странице администратора. (Я также изменил файл index.php в своей теме, чтобы на первой странице отображалось меньшее количество сообщений).