Follow

@jan @jan Mag ik je een WP vraag stellen? Is er iets op het eerste gezicht mis met hoe ik een extra rss feed probeer te maken, zoals beschreven op zylstra.org/blog/how-to-add-a- ?

@ton Deze comment is alvast ook op je nieuwe feed van toepassing: developer.wordpress.org/refere (je moet m.a.w. met die `header` browsers even vertellen welk type bestand ze mogen verwachten). Ook zou ik even proberen om i.p.v. meteen die template aan te roepen, even gewoon 'Hello world!' te echoën (of 'aye!', zoals in het voorbeeld). Als dat werkt, scheelt er dus toch nog wat met je template. (Uit het artikel op WPBeginner maak ik trouwens op dat die `rss2-commentsdupe.php` zou moeten heten.)

@ton Terzijde: dit (developer.wordpress.org/refere) voorbeeld toont iets beter hoe `get_template_part()` werkt. (Laat je toe om een PHP-bestand in te sluiten, maar valt, wanneer het bestand met de exacte 'suffix' niet bestaat, terug op een algemenere variant. Handig voor 'templating purposes'.)

@jan Dank! De template wordt nu correct aangeroepen, en ik krijg output. Moest inderdaad de naam hebben die je aangaf. De output is nog wel verkeerd: ik gebruik 't ongewijzigd template van de oorspronkelijke commentsfeed, dan gaan de headers etc goed, maar de while loop die de items ophaalt levert niets op kennelijk. Doet me vermoeden dat verschillende do_action statements niet de juiste effecten hebben?

@jan mm, heeft niet te maken met die do_actions denk ik, want als ik die terugzoek in wordpress.org worden die wel uitgevoerd. De while have_comments() levert niets op zo te zien. Alsof de juiste variabelen niet beschikbaar zijn voor die loop. Wel raar, want het is identiek aan het gewone rss comments template.

@ton Dat kan kloppen, want aan het insluiten van de template gaat – denk ik – nu nog geen logica vooraf. (Ik vermoed dat WordPress, wanneer het de default feeds genereert, enkele globale variabelen instelt en pas daarna de template aanroept. Als dat zo is, zal je waarschijnlijk op een of andere manier je eigen query moeten definiëren en de resultaten daarvan aan de `while`-loop meegeven.)

@ton Zoiets, dus (denk ik).
```
$query = new WP_Comment_Query( array( 'number' => 20 ) );
while ( $query->have_comments() ) :
$query->the_comment();
// Etc.
```
En dan al wat je niet hebben wilt, uit de template gooien.

@jan je bedoelt het toevoegen van die query in de template, lees ik je suggestie zo correct? Bijv. $commentsquery = new WP_Comment_Query( array( 'status' => 'approve', 'type' => 'comment', 'number' => 20 ) ); zou dan 20 goedgekeurde reacties van het type comment geven.

@ton Ja, ter vervanging van de standaard `while ( have_comments() ) :` e.v. Zijn vast andere manieren – ik heb even niet de tijd om nog dieper de broncode in te duiken – maar lijkt me dat dat in ieder geval zou moeten werken. Zou dan de template wel nog opschonen, zodat je niet per ongeluk refereert aan variabelen die niet bestaan.

@jan De query werkt als bedoeld, maar de verwerking ervan lukt me niet. have_comments() is altijd false. Als ik t query resultaat als array print zie ik dat er 7 'dingen' inzitten, waarvan de 5e 'n array met daarin de 20 gevraagde WP Comment Objects. Huidige vragen die ik heb: hoe benader je dat 5e element in het query resultaat, en hoe parse/benader je een WP Comment Object. In de WP codex draai ik cirkeltjes zonder inzicht te krijgen in hoe het zou 'moeten' functioneren. Heb jij nog een tip?

@ton Doe je `have_comments()` of `$query->have_comments()` (dus op de ‘custom query’-resultaten)? Wat waarschijnlijk ook kan is een `foreach` loop over de comments array in het $query-object, maar dan moeten ook de functies verderop lichtjes wijzigen.

@ton En ook de `$query->the_comment();` aan het begin van elke iteratie is belangrijk: die stelt de globale post-/comment-variabelen in zodat de functies verderop gewoon werken (vandaar dat het even anders moet, mocht je ervoor kiezen om louter over de array te itereren).

@jan Mijn begrip van have_comments en the_comment is dat have is een test of er in het query resultaat comment objects zitten, plus een pointer/teller, en the_comment haalt bij elke iteratie het comment object bij die pointer uit het resultaat en maakt het beschikbaar zodat je er met bijv $comment->comment_post_ID infovelden uit kunt halen?

@jan ja dat heb ik inderdaad gedaan. Zie onderaan pagina zylstra.org/blog/how-to-add-a- Als ik in de while loop een tekst echo, en daarna, zie je in de output alleen die erna. Dus hij komt nooit in die while.

@ton I see. Misschien werkt wat voor WP_Query werkt dan toch niet zomaar voor WP_Comment_Query ... Dan moet je 't misschien maar gewoon zo doen: developer.wordpress.org/refere

@ton Dus met `foreach` elk array-element aflopen. Kun je denk ik wel niet zonder meer de functies uit de standaard-template overnemen, of toch niet allemaal, maar je kunt natuurlijk wel steeds (cf. `$comment->comment_content`) de publieke comment-properties aanroepen. (De meeste template-functies werken trouwens waarschijnlijk wél als je er steeds het comment ID aan meegeeft. Zou je even moeten nagaan.)

@ton Voor de volledigheid: WP_Comment_Query doet inderdaad niet aan `have_comments()` en verschilt op dat vlak dus van post queries. Wel kent het een methode `query` die, zoals in het voorbeeld, een array retourneert. Je kunt, zo blijkt, ook gewoon `get_comments()` gebruiken, die maakt dan een query-object voor je, en retourneert dezelfde array.

@ton M'n eerdere uitleg klopte dus niet helemaal, waarvoor excuses. Ik had gehoopt functies als `comment_text()` gewoon te kunnen gebruiken. Daar ga je nu dus overal `comment_text( $comment->comment_ID )` van moeten maken. Of je moet aan het begin van elke iteratie de globale comment var instellen: `$GLOBALS['comment'] = $comment`. Da's misschien nog het gemakkelijkst.

@jan get_comments() met een foreach levert de gewenste resultaten. dank je wel voor het meedenken en je suggesties!

@ton Ha, super! (Eerlijk gezegd, Mastodon is misschien niet het ideale medium om zoiets te bespreken. Ik bedoel, geef me een lege testsite en ik heb het waarschijnlijk binnen 't half uur in orde gebracht. Al wil ik je natuurlijk zelf ook wat plezier gunnen.) 😄

@jan ja de speurtocht is onderdeel van de lol natuurlijk. Maar voor vasthouden wat er gezegd is is Mastodon niet zo geschikt. Vandaar dat ik de voortgang ook in mijn site op een page bijhoudt, en Webmention onze Mastodon interactie er netjes onder plakt ;)

@jan ah! Ik kwam al tegen in de documentatie "load_template(), which is called indirectly by get_template_part() extracts all of the WP_Query query variables, into the scope of the loaded template. So you can use set_query_var() to make your variable available to the template part." Dat heb ik gelezen als dat get_template_part de variabelen meekrijgt, maar met jouw suggestie nog een keer lezend, moet er een set_query_var voor om aan te geven welk variabelen dan. Ik ga het proberen

Sign in to participate in the conversation
Mastodon

Ton's personal Mastodon instance