Jedna rubrika na úvodní straně, její URL a komentáře

Úvodní stránka Fórum podpory WordPressu Problémy s WordPressem Jedna rubrika na úvodní straně, její URL a komentáře

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

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

    dejw
    Participant

    V prvé řadě bych chtěl poděkovat za možnost tohoto fóra, které je jedním kvalitním z mála, na které jsem při tvorbě stránek narazil a bylo mi již několikrát svými příspěvky nápomocno.
    Nicméně mám teď pár problémů, resp. otázek, na které jsem odpovědi nenašel a tudíž jsem nucen vytvořit toto vlákno.

    Dovolím si menší úvod do problematiky. Tvořím web pro jeden sportovní oddíl, vesměs statické stránky a dvě rubriky (aktuality a komentáře k zápasům). Použil jsem šablonu TwentyFourteen, kterou jsem si upravil podle svých představ.

    1) Dlouho jsem hledal a nakonec vyřešil ten problém, jak nastavit, aby mi byla po vybrání “nejnovějších příspěvků” na úvodní stránce v nastavení zobrazení WP zobrazována pouze jedna rubrika, tj. aktuality, protože to jest ta domovská stránka. Vyřešil jsem to vložením této funkce do souboru functions.php, kde ID je ID dané rubriky.

    function my_post_queries( $query ) {
      // only homepage and is the main query
      if ($query->is_home() && $query->is_main_query()){
         // display only posts in category with id=7
         query_posts( $query_string . '&cat=7' );
         // avoid sticky posts
         $query->set('post__not_in', get_option( 'sticky_posts' ) );
      }
    }
    add_action( 'pre_get_posts', 'my_post_queries' );

    Vše funguje jak má a jsou mi na úvodní stránce zobrazovány nejnovější příspěvky pouze z rubriky aktuality. Problém je ten, když vložím příspěvek do druhé rubriky, tj. komentářů. Příspěvky sice zůstanou na úvodní stránce, nicméně je před ně vložen nadpis s názvem rubriky, který bych rád odstranil (viz přílohy), ale nevím, ve kterém souboru je toto zobrazení uloženo.

    Zároveň jsem si vytvořil soubor category-aktuality.php, ve kterém jsem si upravil zobrazovanou stránku s tím, že jí přidávám nadpis h1 “aktuality”. I přesto, že je mu nastavena stejná třída, tj. entry-title jako u h1 nadpisů ve statických stránkách (které jsou na těchto stránkách zobrazovány automaticky), jeho odsazení je poněkud jiné, hlavně zespoda (bottom). Dá se nějak nastavit, aby byl do rubrik automaticky vkládán nadpis v tomto formátu tak, jako je tomu u statických stránek?

    2) Druhá věc se týká URL adresy. Po zadání domény http://www.xyz.cz je zobrazena ona rubrika aktualit jako úvodní stránka. To je v pořádku. Nicméně pod položkou v menu je na ni odkaz uveden pod http://www.xyz.cz/category/aktuality. Jde tento odkaz rubriky aktuality nějak přepsat na http://www.xyz.cz, tj. frontpage? I když funkčně se jedná o totéž, rád bych, aby byl daný odkaz veden přímo na úvodní, tj. hlavní doménu a do oné kategorie.

    3) Nikde jsem nenašel informaci, pomocí jaké funkce jsou mezi příspěvky vkládány ty šedé čáry. Ty chci zachovat, nicméně ani ve style.css se mi nepodařilo odstranit přebytečné mezery, resp. bílá místa za nimi. Jde toto nějak odstranit tak, aby příspěvky nebyly zbytečně roztahané?

    4) Poslední otázka se týká komentářů. Návštěvní kniha mi funguje bez problémů, v souboru functions.php jsem si odstranil (pro mě) přebytečný formulář webové stránky. Nicméně pro přehlednost v návštěvní knize bych potřeboval poradit, jakým způsobem přidám formulář PŘEDMĚT, který bych v návštěvní knize pro přehlednost potřeboval.
    Další podotázka se týká řazení příspěvků. To jsem ve WP našel, ale potřeboval bych ho nastavit tak, že když je nějaké vlákno tzv. “oživeno” nějakou odpovědí např. v páté úrovni komentáře, tak aby se zobrazilo jako první, i když je hlavní komentář již staršího data, tudíž je zapadlý na konci stránky. Avšak v případě, že je oživen nějakou odpovědí potřebuji, aby “vyplaval” nahoru.

    Velice se omlouvám za délku svého příspěvku. Jedná se spíše o detaily, ale na tomto webu si dávám opravdu záležet. Adresu bych zde napsal, nicméně na něm mám zatím under construction a bez zadané adresy IP se tam nikdo nedostane. Proto zde pro představu vkládám printscreeny.

    Děkuji

    Attachments:
    #18935

    sjiamnocna
    Participant
    Web

    1) Chcete, aby se zobrazovala jen rubrika aktuality, nebo všechno, jak je, jen bez názvu rubriky?

    Můžete použít filtr na get_categories

    2)Pokud máte v index.php nastaveno zobrazování rubriky, WordPress menu jej ignoruje, protože nejste přímo na adrese archivu (xyz.tld/category/abc)

    Pokud chcete vyřešit i menu i odkaz na archive (domovskou) navrhuji filtrovat url kategorie (nikdy jsem to nezkoušel, ale myslím, že by to mohlo jít)

    $url=get_category_link();

    tzn.

    function filter_catlink(){
    //pokud (id kategorie === 7)return home_url();
    }
    add_filter('category_link','filter_catlink');

    jak říkám, nikdy jsem to nezkoušel, ale mohlo by to možná řešit i označení v menu i odkaz na kategorii. Pokud jsem mimo, prosím někoho o opravu :)

    3) To je věc, kvůli které jsem nikdy neměl rád defaultní šablony – zbytečně zaplácaný prostor. K tomuto bych asi v CSS hledal margin, padding a border

    nic víc léků na to asi nebude, pokud není mezi články vložen tag <hr> pro čáru, který je záludný v tom, že se také může stylovat, a klidně může mít nastaven nějaký margin či tak něco.

    viz kód twenty14

    <article id="post-18569" class="post-18569 post type-post status-publish format-standard hentry category-tipy-a-triky">
    	<header class="entry-header">
    		<div class="entry-meta">
    			<span class="cat-links"><a href="https://www.separatista.net/rubrika/wordpress/tipy-a-triky" title="Zobrazit všechny příspěvky z rubriky Tipy a triky" rel="category tag">Tipy a triky</a></span>
    		</div>
    		<h1 class="entry-title"><a href="https://www.separatista.net/wordpress/tipy-a-triky/wordpress-3-9-snadna-prace-s-widgety" rel="bookmark">WordPress 3.9: Snadná práce s widgety</a></h1>
    		<div class="entry-meta">
    			<span class="entry-date"><a href="https://www.separatista.net/wordpress/tipy-a-triky/wordpress-3-9-snadna-prace-s-widgety" rel="bookmark"><time class="entry-date" datetime="2014-05-22T12:04:10+00:00">22.5.2014</time></a></span>
    			<span class="byline"><span class="author vcard"><a href="https://www.separatista.net/author/admin" rel="author">admin</a></span>
    			<span class="comments-link"><a href="https://www.separatista.net/wordpress/tipy-a-triky/wordpress-3-9-snadna-prace-s-widgety#comments" title="Komentáře k příspěvku WordPress 3.9: Snadná práce s widgety">6 komentáře</a></span>
    		</div><!-- .entry-meta -->
    	</header><!-- .entry-header -->
    
    	<div class="entry-content">
    		<!-- auto_thickbox_anchor_utils  the_content -->
    		<p>Jenom krátce upozorním na jeden drobný trik, který pomůže usnadnit práci, zejména pokud používáte šablony, které mají definovaných mnoho oblastí pro widgety.</p>
    		<p><a href="https://www.separatista.net/wordpress/tipy-a-triky/wordpress-3-9-snadna-prace-s-widgety#more-18569" class="more-link">Pokračování textu <span class="meta-nav">→</span></a></p>
    	</div><!-- .entry-content -->
    </article>

    zřejmně některý z těchto prvků bude způsobovat problém

    4) viz. Adding Custom Fields In WordPress’ Comment Form

    a Stackoverflow – Ordering WordPress posts by most recent comment

    #18936

    sjiamnocna
    Participant
    Web

    Blíže upraveno tedy se dvěma argumenty:

    function filter_catlink($link_url,$category_ID){
    if($category_ID===7)return home_url();
    else return $link_url;
    }
    add_filter('category_link','filter_catlink');

    PS: sory, za DBLpost, ale editace už nebyla nabízená – což je jedna z mála věcí, která mně na fóru mrzí – krátký čas pro editaci
    — samozřejmně, jde upravit jakkoli starý příspěvek, pokud znáte adresu editstránky a číslo příspěvku, ale nějak jsem zapomněl URL :(
    — tím v žádnem případě nechci, aby toto někdo měnil – je to super :)

    #18948

    admin
    Keymaster
    Web

    Díky za pochvalu fóra! Příště prosím dotazy alespoň trochu oddělte do samostatných témat, protože to bude jinak pro ostatní dost nepřehledné.

    1) Rubrika na úvodní stránce se tu už několikrát řešila, naposledy zde. Správně používáte akci pre_get_posts, ale je tam špatným způsobem definována rubrika, rozhodně bych odebral funkci query_posts() (viz výše odkazované téma).

    Za zobrazování rubriky nad příspěvky může funkce twentyfourteen_categorized_blog(), která je použita v souboru pro zobrazení úvodní stránky (content.php). Stručně řečeno se bude rubrika zobrazovat pokaždé, když bude existovat více rubrik s příspěvky.

    A jak to upravit? Možností je více. Předpokládám, že používáte odvozenou šablonu, takže je možnost úpravy souboru content.php vyloučena. A ani to asi není moc vhodné, protože by tam stejně musela být podmínka pro úvodní stránku a zbytečně se to tím komplikuje.

    a) Můžete odkaz na rubriku jednoduše skrýt pomocí kaskádových stylů:

    .home .cat-links {
        display: none;
    }

    Projeví se to pouze na úvodní stránce. Pro vyhledávače (a ve zdrojovém kódu stránky) tam odkazy na rubriku zůstanou…

    b) Jednu z dalších možností navrhoval uživatel sjiamnocna. Funkce twentyfourteen_categorized_blog() volá funkci get_categories(), kterou by sice šlo filtrovat pomocí get_terms a podstrčit ji třeba nulový výsledek, ale když se zblízka podíváte na definici funkce, tak by se výsledná hodnota bohužel uložila i jako cachovaná hodnota transients, takže by to asi nefungovalo. Respektive by to fungovalo, ale nejen na úvodní stránce, ale po celém webu.

    c) A to nás dostává k poslední možnosti, která mě napadá, a to filtrovat cachovanou hodnotu transients twentyfourteen_category_count, a to s podmínkou na úvodní stránku. Používá se tam funkce get_transient(), které by se pro úvodní stránku mohla podstrčit jiná hodnota. Ale to už je celé trochu složitější a zatím jsem to nezkoušel.

    Problém se souborem category-aktuality.php: K čemu tento soubor vlastně potřebujete? Pokud vím, tak v souboru category.php už h1 obsaženo je, pouze se nadpis zobrazuje ve tvaru “Archiv rubriky: Novinky”. Vadí tam ten “Archiv rubriky” nebo něco jiného? Zobrazení h1 je tam definováno třídou archive-title, zatímco u stránky je to entry-title.

    K dalším bodům se dostanu ještě později…

    #18952

    dejw
    Participant

    Děkuji oběma za odpovědi. Zatím jsem se vrhl na řešení bodů 1) a 2).

    První se mi podařil vyřešit, i když možná nevhodnou úpravou content.php. Podnadpisy s názvem rubriky nechci v žádné z rubrik, ani v komentářích, ani v aktualitách, proto jsem si content.php upravil, aby pro mě tyto zbytečné nadpisy do stránek nevkládal.

    Co se týče souboru category-aktuality.php, tak ten jsem taky zrušil, odstranil název archiv rubriky a třídu archive-title i archive-header změnil na entry-title, resp. entry-header. Potřebuji totiž jednotnost v H1 nadpisech, i když je i přesto vidět rozdílné odsazení mezer (viz obrázek – rozdílné mezery mezi nadpisy při použití H1 a následně H2 nadpisu v rubrice a na statické stránce…). Dalším podproblém rubrik vs stratické stránky je pro mě odsazení. Statické stránky mám jako full-width-page, nicméně rubriky jsou vycentrované na střed. Je tohle úprava v CSS anebo někde v nějaké funkci?

    Druhý problém – díky za napsanou funkci, bohužel nefunguje a píše chybu ” Missing argument 2 for filter_catlink()”…

    Zároveň se omlouvám, že jsem svůj problém nerozepsal do čtyř vláken, ale přišlo mi to takto rozumnější, i když jsem váhal, který způsob zvolit. Pro příště budu moudřejší.

    #18954

    dejw
    Participant

    Ještě jsem si všiml jedné změny a to v bodu jedna. V případě, že použiji řádek $query->set( 'cat', '7' );, je mi zobrazena úvodní stránka BEZ zvýraznění v menu a zároveň bez nadpisu Aktuality. Pokud tento řádek vyměním za query_posts( $query_string . '&cat=7' );, je menu zvýrazněné a zobrazen i nadpis. Osobně požaduji druhou variantu, ale admin psal, že je query_post špatně. Ale proč? :)

    #18994

    admin
    Keymaster
    Web

    Proč je použití funkce query_posts() v rámci akce pre_get_posts nesmysl? Kombinujete dvě různé věci. Pro úpravu hlavního (primárního) cyklu (loop) se používá buď funkce query_posts(), která se přímo vkládá do příslušného souboru (např. index.php), nebo akce pre_get_posts, která provádí to samé, jen to můžete provádět v rámci souboru functions.php (nebo samostatného pluginu). Pokud použijete kód

    query_posts( $query_string . '&cat=7' );

    uvnitř akce pre_get_posts, tak se objeví několik problémů:

    a) Proměnná $query_string není nikde definovaná, takže žádné další (původní) argumenty nikam nepředáváte.

    b) Proběhne další duplicitní SQL dotaz na výběr příspěvků.

    Důsledkem toho je i fakt, že se pro úvodní stránku přestává používat šablona pro zobrazení úvodní stránky (index.php), ale vše bude zpracováno podle souboru pro výpis rubrik (archive.php či category.php). Proto dochází i ke změnám v menu a zobrazuje se nadpis rubriky. WordPress si přestane myslet, že je na úvodní stránce a začne si myslet, že je v rubrice (a proto je zvýrazněna příslušná rubrika). To je ale špatně, protože jsme stále na úvodní stránce, která pouze obsahuje příspěvky z konkrétní rubriky.

    Do menu si můžete přidat odkaz na “Úvodní stránku”, který bude zvýrazněn, když budete na úvodní stránce. Ještě lepší řešení je dát tam odkaz “Aktuality”, který ale nebudete směřovat na výpis rubriky, ale odkážete ho na úvodní stránku. Potom bude i na úvodní stránce zvýrazněna položka “Aktuality” v horním menu. Ale k tomu se ještě dostaneme v druhém bodě.

    Úprava souboru content.php není moc vhodná, protože brzy vyjde nová verze šablony Twenty Fourteen a budete mít problém :-) Také další úpravy souborů a sjednocování nadpisů a odsazení bych se raději vyhnul. Šablona je myslím velmi dobře navržena a podobné úpravy podle mě nepřispějí k ničemu dobrému. Zkuste se spíše zamyslet, proč to autoři vlastně takto navrhli, jestli to třeba nemá nějaký důvod a zda je opravdu tak důležité, aby se to změnilo (i když tím přijdete o možnost aktualizace šablony a způsobíte si další související problémy se vzhledem).

    Rozdílné odsazení bude souviset s definicemi kaskádových stylů, ale těžko to odhadnout, musel bych to vidět přímo online (nevím přesně, jaké změny jste už provedl). Bude to ale patrně souviset s odstraňovanými třídami, ale už se v tom trochu ztrácím…

    ad 2) Řešení, které uvedl sjimanocna je podle mě ideální, jen tam udělal chybku pro druhý argument, potom se příslušný filtr category_link volá takto:

    add_filter( 'category_link', 'filter_catlink', 10, 2 );

    Pokud tam není nějaký skrytý problém, tak to ale funguje správně a všechny odkazy na rubriku budou přesměrovány na úvodní stránku. Rychlé a povedené řešení…

    #18995

    dejw
    Participant

    Děkuji za vyčerpávající odpověď. Už je mi to více jasné. Upravený argument z bodu 2) funguje, nicméně stále neřeší zvýraznění položky “aktuality” v menu. Využil jsem tedy druhé doporučení a v menu vytvořil odkaz na domovskou stránku a v souboru functions.php nechal korektní zápis $query->set( 'cat', '7' );.

    Menu je tak zvýrazněné, na úvodní stránce se zobrazují požadované aktuality z kategorie id=7. Jediné, co mi zatím chybí k úplné dokonalosti je nějak zobrazit h1 nadpis aktuality, který jsem na stránku vkládal přes category.php a který je na statických stránkách vkládán nějak automaticky (viz příloha u příspěvku z 1.6.2014 (18:17)).

    Na stránky Vám pro lepší představu přístup dám moc rád. Stačí mi k tomu Vaše adresa IP, po jejímž zadání do pluginu UnderConstruction se Vám stránky zpřístupní.

    Snad již poslední dotaz se týká stránky na celou šířku (full width page). Co se stránek týče, zde problém není a v rozhraní WP lze tuto možnost zaškrtnou. Jde ale toto nějak nastavit i u rubrik tak, aby využily taky celou šíři stránky? Děkuji

    #18996

    admin
    Keymaster
    Web

    Ad 3) Šedé čáry jsou vlastně horním okrajem (border-top), soustředil bych se na třídu .hentry, která je má takto definované i s mezerami (zde a zde). Osobně nemám s třídami a kaskádovými styly u výchozích šablon problém. Občas jich tam je třeba zbytečně moc, ale zase se to snadno upravuje a definuje…

    Ad 4) Přidání dalšího políčka ke komentářům není nic složitého, sjimanocna výše uváděl odkaz na jeden z návodů, jeden z pluginů je dostupný např. zde.

    Speciální řazení komentářů by mohl umožnit parametr reverse_children u funkce wp_list_comments(). Mělo by ho stačit nastavit na true a doplnit k parametrům u funkce wp_list_comments() v souboru comments.php. Ale nezkoušel jsem to… Od verze 4.0 (koncem srpna) bude také možné využít nový filtr wp_list_comments_args (a tedy neupravovat výchozí šablonu přímo).

    #18997

    admin
    Keymaster
    Web

    IP adresa je 81.25.21.1, URL můžete poslat na email, ze kterého chodí notifikace z fóra.

    Pro celou šířku stránky u rubrik můžete zkusit plugin Fourteen Extended.

    #19012

    dejw
    Participant

    Právě že tento plugin používám, nicméně jeho možnost “Check to show full width for archives, categories and tags” nijak vzhled stránky bohužel nezmění… Netušíte, kde by mohl být problém. URL adresu už byste měl mít na e-mailu.

    #19024

    dejw
    Participant

    Podle návodu od sjimanocna se mi podařilo do návštěvní knihy importovat pouze povinné pole předmětu (soubor dávám k dispozici na stažení).
    Komentáře fungují tak, jak mají, nicméně přemýšlím a nevím jak udělat následující. V případě, že napíši top-level komentář s předmětem a někdo na něj odpoví – kde a jak nastavit aby v této odpovědi nešel již předmět změnit anebo lépe, aby nebyl vůbec zobrazen?

    Co se týče nastavení, aby vyplul nahoru vždy aktualizovaný komentář, to bohužel pomocí reverse_children nefunguje…

    Děkuji

    Attachments:
    1. extracomment.txt
    #19395

    sjiamnocna
    Participant
    Web

    Nejsem si jistý, k defaultním šablonám mám jakýsi “přirozený respekt”, ale nestačilo by v CSS předmětu mateřských prvků TOP komentu přidat display:none;

    jako

    #comments .comment -> .comment .subject{
    display:none;
    }

    nějak jsem se za ten měsíc ztratil v tom, co tu vlastně řešíme :D

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

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