Cum să folosești div-ids în URL pentru a sări la postări specifice... Este slash-ul la sfârșit problema?
Unele link-uri de pe site-ul meu duc utilizatorul la o postare specifică în contextul unei pagini de categorie.
Pe site-urile non-WP, acest lucru se realizează ușor incluzând #example-div-id
în URL astfel:
http://www.example.com#example-div-id
Dar într-un mediu WordPress, acest URL nu funcționează:
http://www.example.com/?cat=15#post-170
Aceasta face (incorect) ca fereastra browserului să sară la sfârșitul paginii.
Dar aceasta funcționează... eliminând manual slash-ul final după încărcarea paginii și reîncărcând pagina. Fereastra browserului sare la div-ul sau postarea corespunzătoare.
http://www.example.com?cat=15#post-170
.
Știe cineva de ce se întâmplă asta? Sau cum să faci WordPress să elimine slash-ul final? Este sigur să elimini slash-ul final?
Actualizare
Am încercat să folosesc soluția lui EAMann de mai jos, implementând permalink-uri frumoase pentru a facilita saltul ancorei. Rezultatele obținute îmi strică complet ordinea postărilor și excluderea categoriilor copil. Navigarea mea este bazată pe categorii. Nu folosesc pagini, ci folosesc nume de categorii în navigare. Fiecare 'pagină' este de fapt o arhivă de categorie care arată postări din categoria respectivă. Din ce am citit despre permalink-uri care încep cu %category%, ajung să evit complet permalink-urile. Cu siguranță nu vreau să încep permalink-ul cu anul sau ID-ul postării. Nu are sens pe site-ul meu.
http://www.example.com/category/my-category
arată mai profesional și mai "normal" decât http://www.example.com/2009/my-category
când iluzia intenționată este că numele categoriilor sunt de fapt pagini pe acest site de business.
Așa că aș aprecia orice alte explicații despre de ce nu funcționează saltul ancorei.
Actualizare #2
(ca răspuns la comentariul lui EAMann direct pe OP)
Site-ul meu este un website de business care în mare parte afișează conținut static. Câteva zone au lucrări de portofoliu prezentate și există o secțiune de blog. Site-ul folosește o navigare bazată pe categorii. Tot conținutul site-ului este scris ca postări. Fiecare postare este asociată cu o categorie care determină unde este afișată postarea. Meniul de navigare al site-ului este creat cu wp_list_categories()
. Când dai click pe o categorie se deschide o arhivă de categorie care prezintă toate postările din categoria respectivă.
În prezent folosesc structura de permalink implicită.
http://www.example.com/?cat=15
arată o pagină de categorie.
Actualizare #3
După mai multă investigație, se pare că plugin-ul jQuery "innerfade" pe care îl folosesc pentru a afișa un slideshow în partea de sus a paginii este de vină. Nu are nimic de-a face cu slash-ul final. Îmi cer scuze că am mers pe o pistă greșită.
Dacă comentez php-ul care include fișierul js al plugin-ului, saltul ancorei funcționează perfect. Aș presupune că o manipulare JavaScript a conținutului paginii strică saltul. Am rezolvat problema folosind $(window).scrollTo();
.
Apreciez timpul tuturor.

În primul rând, aș recomanda utilizarea "pretty permalinks" în locul structurii implicite bazate pe query-string. Acest lucru va elimina majoritatea problemelor dvs. de la bun început. Va transforma URL-urile de tipul http://www.example.com/?cat=15#post-170
în http://www.example.com/category/category-slug/#post-170
, iar browserul se va deplasa corect la poziția postării în pagină.
Cu toate acestea... Da, puteți elimina slash-ul de la sfârșit. Trucul constă în adăugarea unei reguli în fișierul .htaccess
:
# elimină slash-urile de la sfârșit
RewriteCond %{HTTP_HOST} ^(www.)?yourdomain\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
(Această regulă este preluată dintr-un tutorial Drupal care face același lucru...)

mulțumesc EAMann. Am avut probleme ciudate înainte cu permalink-urile frumoase, dar am încercat să le implementez la sugestia ta. Le-am făcut să funcționeze bine odată ce am setat .htaccess la 777. Înainte de a testa pe deplin soluția ta, (nu partea de rescriere) trebuie să modific niște cod condițional dependent de categorie, astfel încât postările corecte să fie afișate. O să te anunț...

Mulțumesc pentru regulile .htaccess, dar nu au eliminat slash-ul. Am urmat link-ul către tutorialul Drupal, și se pare că autorul menționează că regulile sugerate de tine nu funcționează și să folosești un al doilea set pe care le postează. Le-am încercat și pe acelea fără rezultate. Nu știu dacă e de la mine sau de la WP.

După cum am menționat în actualizările la întrebarea mea... alte scripturi JavaScript care funcționează pe pagină intră în conflict cu saltul la ancoră. Am implementat mai mult JavaScript pentru a rezolva conflictul. URL-ul arată aproape la fel ca înainte, dar cu un nume de parametru inserat înainte de simbolul diez,
http://www.example.com/?cat=15&hi=#post-170
dar folosesc 'plugin-ul' de la jQuery-Howto pentru a obține parametrii din 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];
}
});
Prelucrez numărul postului atribuit parametrului URL 'hi' și derulez la 20px deasupra postului cu același id.
//variabila 'hi' folosită pentru a sări la ancoră
var hi = $.getUrlVar('hi');
if ( hi ) {
//derulează la link sau la rezultatele căutării dacă variabila URL 'hi' este prezentă
$(window).scrollTop($(hi).position().top-20);
codul plugin-ului jQuery și codul meu personalizat de mai sus se află în fișierul meu JavaScript care este inclus în header.php
