kevtrout
  • 0
Эксперт

Как использовать div -id в URL-адресе для перехода к определенному сообщению… Является ли виновником косая черта?

  • 0

Некоторые ссылки на моем сайте ведут пользователя к определенному сообщению в контексте страницы категории.

На сайтах, отличных от WP, это легко сделать, включив #example-div-id в URL-адрес следующее:

http://www.example.com#example-div-id

Но в среде WP этот URL-адрес не работает :

http://www.example.com/?cat=15#post-170

Это (неправильно) перемещает окно браузера в конец страницы.

Но это работает… удаление косой черты вручную после загрузки страницы и перезагрузка страницы. Окно браузера переходит к соответствующему разделу или записи.

http://www.example.com?cat=15#post-170 .

Кто-нибудь знает, почему это так? Или как заставить WP убрать косую черту? Безопасно ли удалять завершающую косую черту?

Обновлять

Я попытался использовать приведенное ниже решение EAMann, внедрив красивые постоянные ссылки, чтобы облегчить переход привязки. Достигнутые результаты полностью нарушают мой почтовый порядок и исключают дочерние категории. Моя навигация основана на категориях. Я не использую страницы, но использую названия категорий в навигации. Каждая «страница» на самом деле представляет собой архив категории, показывающий сообщения из категории. То, что я читал о постоянных ссылках, начинающихся с %category%, привело меня к тому, что я вообще избегал постоянных ссылок. Я, конечно, не хочу начинать постоянную ссылку с годом или идентификатором сообщения. На моем сайте это не имеет смысла.

http://www.example.com/category/my-category выглядит более профессионально и «нормально», чем http://www.example.com/2009/my-category когда предполагаемая иллюзия состоит в том, что названия категорий на самом деле являются страницами на этом бизнес-сайте.

Поэтому я был бы признателен за любые другие объяснения, почему прыжки с якоря не работают.

Обновление №2

(в ответ на комментарий EAMann непосредственно к OP) Мой сайт — это бизнес-сайт, который по большей части отображает статический контент. В нескольких областях представлены портфолио, а также есть раздел блога. На сайте используется навигация по категориям. Весь контент сайта написан в виде постов. Каждое сообщение связано с категорией, которая определяет, где сообщение отображается. Меню навигации по сайту создается с помощью wp_list_categories() . При нажатии на категорию открывается архив категорий, в котором представлены все сообщения из категории.

В настоящее время я использую структуру постоянных ссылок по умолчанию.

http://www.example.com/?cat=15 показывает страницу категории.

Обновление №3

После дальнейшего расследования выяснилось, что виновником является плагин jQuery «innerfade», который я использую для отображения слайд-шоу в верхней части страницы. Это не имеет ничего общего с косой чертой в конце. Извините, что пошел по ложному пути.

Если я закомментирую php, который включает в себя js-файл плагина, переход привязки будет работать нормально. Я предполагаю, что некоторые манипуляции с содержимым страницы с помощью javascript мешают прыжку. Я работал над проблемой, используя $(window).scrollTo(); .

Я ценю время каждого.

Share
  1. Какой браузер вы используете? У меня проблемы с воспроизведением того, что вы описываете, поэтому я предполагаю, что это какой-то побочный эффект. URL-адреса в примерах мне кажутся действительными, с косой чертой или без нее.

    • 0
    • Используя файрфокс. Прыжки с якоря работали в какой-то момент и, кажется, остановились. Я предполагаю, что это не поможет мне здесь, то есть я, вероятно, сделал что-то глупое во время разработки, чтобы сломать его. Я ищу идеи о том, почему прыжок привязки не будет работать с указанным выше URL-адресом. Спасибо

      • 0
    • Не могли бы вы немного подробнее объяснить, как построена ваша структура постоянных ссылок и навигация? В противном случае все решения, которые вы получаете, которые работают на стандартных установках WP, могут не работать на ваших…

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

      • 0
    • спасибо EAMann. Раньше у меня были странности с красивыми постоянными ссылками, но я попытался реализовать их по вашему предложению. Я заставил их работать нормально, как только я 777’d.htaccess. Прежде чем полностью протестировать ваше решение (а не часть перезаписи), мне нужно изменить некоторый условный код, зависящий от категории, чтобы получать правильные сообщения. Я дам Вам знать…

      • 0
    • Спасибо за правила.htaccess, но косую черту они не убрали. Я перешел по ссылке на учебник по drupal, и кажется, что автор заявляет, что предложенное вами правило не работает, и он публикует второй набор. Я тоже пробовал их, но безрезультатно. Я не знаю, я это или WP.

      • 0
  2. Во- первых, я бы рекомендовал использовать « красивые постоянные ссылки » вместо структуры строки запроса по умолчанию. Это устранит большинство ваших проблем с самого начала. Он превратит ваши http://www.example.com/?cat=15#post-170 URL-адреса в http://www.example.com/category/category-slug/#post-170 и браузер правильно переместится к позиции сообщения на странице.

    Тем не менее… Да, вы можете удалить косую черту. Хитрость заключается в том, чтобы добавить правило в ваш .htaccess файл:

    #remove trailing slashes
    RewriteCond %{HTTP_HOST} ^(www.)?yourdomain\.com$ [NC]
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
    

    (Это взято из учебника Drupal, который делает то же самое…)

    • 0
  3. Как я уже говорил в обновлении моего вопроса… другой javascript, работающий на странице, конфликтует с переходом привязки. Я внедрил больше js, чтобы обойти конфликт. URL-адрес выглядит почти так же, как и раньше, но с именем параметра, вставленным перед символом фунта,

    http://www.example.com/?cat=15&hi=#post-170

    но я использую «плагин» jQuery-Howto для получения параметров URL.

    $.extend({
        getUrlVars: function(){
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
    
        return vars;
    },
    getUrlVar: function(name){
                return $.getUrlVars()[name];
            }
    });
    

    Я получаю номер сообщения, назначенный параметру URL-адреса «привет», и прокручиваю до 20 пикселей над сообщением с тем же идентификатором.

     //'hi' var used to jump to anchor          
        var hi = $.getUrlVar('hi');
    
        if  ( hi ) {
            //scroll to link or search results if url var 'hi' is present
            $(window).scrollTop($(hi).position().top-20); 
    

    код плагина jquery и мой собственный код выше входят в мой файл javascript, который включен в header.php

    • 0

Оставить ответ

You must login to add an answer.