Dotaz na strankovani

Zvolené téma obsahuje celkem 9 odpovědí. Do diskuze (5 účastníků) se naposledy zapojil uživatel  admin a poslední změna je stará 11 let, 12 měsíců.

Aktuálně je na stránce zobrazeno 10 příspěvků - 1. až 10. (z celkem 10)
  • Autor
    Příspěvky
  • #872

    Jirka84
    Participant

    Zdravím, píši ohledně problému, s nímž si nevím rady – neovládám PHP. Využívám plugin: WP-PageNavi, který normálně zobrazuje na konci hlavní stránky s nejnovějšími příspěvky navigaci. Návštěvník se tak může dostat na starší články.

    Bohužel jsem si na hlavní stránce nechal zobrazovat pouze příspěvky, které jsou umístěny v kategorii “A”. Všechny ostatní nejsou na hlavní stránce vidět. Pokud ale chci na konci hl. stránky jít třeba na starší články na stránce 2, najede má url http://www.web.cz/page/2/. Já bych ale potřeboval url ve tvaru http://www.web.cz/category/clanky/page/2/. Nemohl byste mi někdo poradit, jak toho docílit? Stačilo by to jistě připsat někam do PHP, ale raději jsem se v tom nemontoval, abych něco nepokazil.

    Předem děkuji za pomoc.

    #7871

    admin
    Keymaster
    Web

    Ve výchozím nastavení (nejen pro plugin WP-PageNavi) je na hlavní stránce použito pouze výchozí stránkování bez zahrnutí rubrik v URL. Takže i když tam máte vlastně jen výpis příspěvků z jedné rubriky, tak si WordPress (správně) myslí, že je na hlavní stránce (pozná to podle URL adresy) a proto vytváří i stránkovací URL adresy jako na hlavní stránce. I když vlastně zobrazuje jen jednu rubriku, tak jede podle základní šablony pro úvodní stránku (obvykle index.php). Každopádně je to docela zajímavý problém…

    Jakým způsobem máte konkrétně řešeno omezení na jednu rubriku na úvodní stránce? Pomocí funkce query_posts()? Jediné, co mě zatím napadá, je využití funkce get_pagenum_link() a jejího filtru. Možná, že to nebude fungovat ideálně, hodně záleží na mém předchozím dotazu, ale můžete vyzkoušet následující řešení (přidat do souboru functions.php v adresáři s vaší šablonou):

    function separatista_zmena_url_strankovani( $value ) {

    if (is_category('clanky')) {

    $value = str_replace( '/page/', '/category/clanky/page/', $value );

    }

    return $value;

    }

    add_filter( 'get_pagenum_link', 'separatista_zmena_url_strankovani' );

    Říkáme tím WordPressu, že když zobrazuje výpis konkrétní rubriky (aneb funkce is_category()), tak nahradíme vygenerované URL určené pro stránkování. Vše je určeno pouze pro váš konkrétní příklad, takže je případně třeba zaměnit v uvedeném kódu rubriky a trvalé odkazy…

    Vyzkoušejte, případně zkusíme doladit…

    #7872

    Jirka84
    Participant

    admin:

    Chtěl bych opět poděkovat – Vaše rada pomohla. Řešení omezení na jednu rubriku na stránce bohužel nedokážu vysvětlit – tak nějak si na to nevzpomínám, ale tuším, že jste mi s tím pomáhal také Vy. Ještě jednou tedy díky, funkce pracuje perfektně!

    #7873

    n3s4
    Participant

    Zdravím, mám podobný dotaz,

    potřebuji ze slůvka page udělat slovo strana.

    V URL to mám nyní takto: /kategorie/pocitacove-hry/page/2/ a já bych tam místo page chtěl mít strana -> /kategorie/pocitacove-hry/strana/2/

    Půjde to někde přepsat?

    #7874

    neteyescz
    Participant

    Zdravím,

    1. V nastavení permalinků nastavíš místo “rubriky” slovo “kategorie”.

    2. Do souboru functions.php vložíš tento kód:

    function neteyescz_zmena_url_strankovani( $value ) {
    if (is_category('pocitacove-hry')) {
    $value = str_replace( '/page/', '/stranka/', $value );
    }
    return $value;
    }
    add_filter( 'get_pagenum_link', 'neteyescz_zmena_url_strankovani' );

    Poznámka: Při správně nastavených permalincích a tomto kódu, zobrazí wp u kategorie pocitacove-hry /kategorie(permalinky)/pocitacove-hry(permalinky,proměnná)/stranka(kód)/strana(proměnná).

    Neteyes.cz

    Upravil admin: Změna názvu funkce :-)

    #7875

    n3s4
    Participant

    A tento zápis to změní u všech kategorií? nebo jen u té, která je v kódu zapsaná if (is_category('pocitacove-hry')) ? Abych nemusel psát nekonečný kód, který by se aplikoval na všechny kategorie, které na stránkách jsou..

    #7876

    neteyescz
    Participant

    Bohužel pouze pro IF kategorii.

    #7877

    admin
    Keymaster
    Web

    Podobných dotazů na úpravy URL je stále více a nikde jsem v češtině nenašel nějaké jednoduché řešení (existují pouze zbytečně složité konstrukce, které již dávno nejsou aktuální). Zkusím to tedy celé trochu vysvětlit. I v tomto vlákně jsou míchány dvě různé funkce:

    1) Filtr get_pagenum_link se používá pouze pro změnu URL adresy, viz výše uvedená funkce separatista_zmena_url_strankovani(), která pouze přesměrovává jednu funkční URL adresu na druhou. Změněná URL adresa, ale musí existovat! Takže funkce neteyescz_zmena_url_strankovani() fungovat nebude, protože chcete sice původní adresu přesměrovat z “page” na “stranka”, ale WordPress už neví, že má najednou pro stránkování používat jinou proměnnou.

    2) Změnu proměnné (a tedy i URL) pro stránkování na celém webu lze ale udělat velmi jednoduše, využít je ale třeba poměrně složitou třídu WP_Rewrite().

    Do souboru functions.php (v adresáři šablony) nebo do samostatného pluginu je třeba vložit následující kód:

    add_action( 'init', 'separatista_globalni_strankovani' );
    function separatista_globalni_strankovani() {
    global $wp_rewrite;
    $wp_rewrite->pagination_base = "stranka";
    }

    A poté je ještě třeba jít do menu Nastavení – Trvalé odkazy a kliknout dole na tlačítko “Uložit změny”, i když jste vlastně žádné změny neprovedli. Cílem je spuštění funkce flush_rules(), která provedenou změnu “zaregistruje” přímo ve WordPressu. Šlo by ji samozřejmě přidat i k výše uvedené funkci, ale musely by tam být nějaké podmínky, aby se nespouštěla pro každou načtenou stránku, ale pouze jednou, což se mi teď nechce celé psát :-)

    Změnu stránkování (a další možnosti) umí i plugin WP htaccess Control, který na to jde trochu jinak a využívá filtru rewrite_rules_array.

    #7878

    LuCaCZ
    Participant

    Po “Uložení změn” v Trvalých odkazech je možné funkci separatista_globalni_strankovani() ve functions.php vymazat nebo je tam třeba stále?

    Jak by to vypadalo i pro změnu /author/ ?

    #7879

    admin
    Keymaster
    Web

    Zajímavý dotaz, odstranění funkce vyzkoušejte, také by mě to zajímalo :-) Teoreticky by tam nemusela být potřeba, dokud opět neuložíte strukturu trvalých odkazů (nově už dokonce možná není nutné ji znovu ukládat, ale pouze tuto stránku s nastavením navštívit). Pokud dojde k aktualizaci trvalých odkazů (ručně, pomocí nějakého pluginu, atd.), tak se podle mě bez této funkce zase vše vrátí k výchozímu nastavení. Takže bych ji tam asi raději nechal, ale uvítám případné výsledky testování…

    Změnu výchozí URL adresy /author/ jsme podrobně řešili zde (jsou tam i tipy na pluginy). Specifikujete to ale i jednoduše, tentokrát pomocí $wp_rewrite->author_base. Je tam i diskuze o funkci flush_rules(), která zde není zahrnuta a je to řešeno právě přeuložením nastavení struktury trvalých odkazů.

Aktuálně je na stránce zobrazeno 10 příspěvků - 1. až 10. (z celkem 10)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti