WordPress alapú honlap legjobb bejegyzéseinek kiírása
2021-05-27T19:44:02+02:00
2021-05-30T10:43:50+02:00
2022-08-12T02:55:31+02:00
*deleted_23419333
Sziasztok!

Az elmúlt 14 nap legjobb 7 post-ját kellene megjelenítenem egy WordPress alapú honlapnak, a WP felhasználásával.

wp_posts tábla

CREATE TABLE `wp_posts` ( `ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `post_title` text COLLATE utf8mb4_unicode_ci NOT NULL, `post_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'publish', `post_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'post', ); INSERT INTO `wp_posts` ( `ID`, `post_title` ) VALUES ( 21, 'First post' );

wp_postmeta tábla

CREATE TABLE `wp_postmeta` ( `meta_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `post_id` bigint(20) UNSIGNED NOT NULL DEFAULT 0, `meta_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `meta_value` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL ); INSERT INTO `wp_postmeta` ( `post_id`, `meta_key`, `meta_value` ) VALUES ( 21, 'avada_post_views_count', '9' );

A fentiek szerint 9 látogatója (oldal letöltése) volt a 21-es azonosítóval rendelkező post-nak eddig összesen.

Nekem most egy olyan számlálóra lenne szükségem, amit felhasználva kitudom írni az elmúlt 14 nap leglátogatottabb (legtöbb oldal letöltéssel rendelkező) 7 post-ját.

Minden oldalon, a fejlécben meg kell jelenítenem ezt a 7 post-ot, amihez a ~/wp-content/themes/avada/header.php fájlt kell módosítanom.

A WP_Query-vel kitudom listázni az összes post-ot, valamint minden post letöltésnél letudok futtatni egy saját kódot a ~/wp-content/themes/avada/single.php fájl szerkesztésével.

Hogyan állnátok neki? Mi lenne a leglogikusabb, legpraktikusabb megoldás?

Amit eddig megfigyeltem, hogy más időzóna van használatban a MySQL-nál, más a PHP-nél és megint csak más a WP admin-ban, tehát az biztos, hogy az UTC időzónához kellene igazítani a 14 napos lekérdezést.
Mutasd a teljes hozzászólást!
Én pedig a második hozzászólásomban írtam, hogy ahhoz kellő részletességgel kell naplózd az oldalletöltések számát:

https://prog.hu/tarsalgo/211870/wordpress-alapu-honlap-legjobb-bejeg..

Csináld azt, hogy eltárolod a napi adatokat is, mindig az aktuális összes oldalletöltés érték és az előző időszakban mentett megtekintések számának különbözetét. Erre könnyen lehet egy select-et írni. Futtasd a statisztika gyűjtést mindig éjfél után egyszer (!!), szigorúan egyszer.
Mutasd a teljes hozzászólást!

  • A WP_Query-vel kitudom listázni az összes post-ot

    De miért kéred le az összeset, ha már tudod melyikek érdekelnek?

     Hogyan állnátok neki? Mi lenne a leglogikusabb, legpraktikusabb megoldás?

    Elolvasni a kézikönyv releváns oldalát, ha már egyszer belinkelted magad is.
    Mutasd a teljes hozzászólást!
  • Elolvasni a kézikönyv releváns oldalát, ha már egyszer belinkelted magad is.

    Az a probléma, hogy a WP önmagában nem számolja a poszt-ok megtekintését, így hiába a kézikönyv.
    Mutasd a teljes hozzászólást!
  • Akkor számold. Mi akadályoz meg benne? De Te egy ilyet is idéztél:

    INSERT INTO `wp_postmeta` ( `post_id`, `meta_key`, `meta_value` ) VALUES ( 21, 'avada_post_views_count', '9' );

    Azaz csak van olvasottsági adat, mert (vélhetően) a használt sablon az összesített olvasások (megjelenítések) számát naplózza. Ez esetben egy META QUERY kell, amiben megmondod ezen mező szerint sorrendezze csökkenő sorrendben (a legtöbbet olvasott elől), és a WP_QUERY-ben megadod hogy csak a két hétnél fiatalabbakat tegye, és ott tudod limitálni is. Ha ennél pontosabb eredmény kell, akkor először azt kell megoldanod hogy a kellő részletességgel naplózd a megtekintéseket. Egy biztos: simán adatbázisba írás miatt nagy látogatotsság esetén nem ajánlott.
    Mutasd a teljes hozzászólást!
  • Ha összességében kellene listázni, az menne, viszont ezzel a 14 napos dologgal meg vagyok lőve. Esetleg gondoltam arra, hogy cronjob-bal minden nap ugyanabba az időpontban lefuttatnék egy script-et, ami azt vizsgálná, hogy 24 óra alatt post-onként mennyi látogatás történt és így már meg lenne a post-onkénti napi látogatottság. Tehát például:

    2021-05-27 0:00:00-kor a 21-es post-ot 9-en tekintették meg.
    2021-05-28 0:00:00-kor a 21-es post-ot 15-en tekintették meg.

    A 15-9=6, tehát 6 látogatója volt 27-én a post-nak.

    És így már tudnám összeadni a napi látogatókat, hogy lássam melyik post-ot mennyien tekintették meg az elmúlt 14 nap alatt. És ezt mondjuk szintén megtehetném egy cronjob-bal és akkor adatbázisban eltárolnám minden nap az aktuális napra vonatkozó 7 legtöbbet látogatott post-ját. Ez nyilván nem lenne teljesen live így, de talán kevésbé lenne erőforrás igényes mintha minden látogatást 1 sorba tárolnám adatbázisba.

    Szóval nagyjából vannak elképzeléseim, hogy hogyan lehetne, de én a leglogikusabbat, legpraktikusabbat szeretném.

    Egyébként köszönöm a hozzászólást.
    Mutasd a teljes hozzászólást!
  • Szia!

    A QP_Query(), illetve a get_posts() tud date_query-t elég sokféleképp:

    WP_Query

    Itt keress arra, hogy date_query.

    Nem próbáltam ki, de egy lehetséges minta:

    $args = array( 'orderby' => 'meta_value', 'meta_key' => 'avada_post_views_count', 'order' => 'DESC', 'numberposts' => 7, 'date_query' => array( 'after' => array('year' => 2021, 'month' => 5, 'day' => 21) ) ); $posts = get_posts( $args );
    A time()-ból kivonsz 7 napot, abból megvan a YMD, azt adod meg neki. De a leírás alapján talán tud olyat is, hogy after -> 7 days ago, úgy még egyszerűbb, ki kell próbálni.
    Mutasd a teljes hozzászólást!
  • Szia!

    Ha jól értelmezem, akkor ez csak arra szolgál, hogyha egy post-nak volt korábbi verziója, akkor azt adja vissza, ha megadunk egy dátumot, hogy épp akkor melyik verziója élt a post-nak, viszont mivel a meta adatnak mindig ugyanaz az értéke, vagyis mindig ugyanaz a sor az adatbázisban, így ha megadunk egy dátumot az mindig épp az aktuális látogató szám lesz. Tehát ha most 100 a 21-es post látogatottsága, akkor hiába kérdezem le a post-ot egy régebbi dátumra, a 100 akkor is 100 lesz.
    Mutasd a teljes hozzászólást!
  • Az elmúlt 14 nap legjobb 7 post-ját kellene megjelenítenem egy WordPress alapú honlapnak, a WP felhasználásával.

    Te ezt írtad. Egy programozó számára ez ezt jelenti, hogy az elmúlt 14 napban megjelent, legolvasottabb cikkek kellenek. Mivel a létrehozás dátuma adott, és kezeli a WP_Query, simán tudsz keresni a két héttel ezelőttől a mai napig publikált elemekre. Sorrendezni tudod META Query-vel, az összes olvasás száma alapján. Limitálni is tudod. Ennyi, kész.

    Ha neked nem ez kell, hanem az összes cikk közül, azok megjelenési dátumától függetlenül szeretnéd a 14 napos olvasási adatok alapján, akkor naplózni kell a napi adatokat. De akkor ezt írd! Addig kellene első körben eljutni hogy le tudd írni mit is szeretnél.
    Mutasd a teljes hozzászólást!
  • A nyitóhozzászólásban, néhány sorral lentebb pontosítottam a kérdést:

    Nekem most egy olyan számlálóra lenne szükségem, amit felhasználva kitudom írni az elmúlt 14 nap leglátogatottabb (legtöbb oldal letöltéssel rendelkező) 7 post-ját.
    Mutasd a teljes hozzászólást!
  • Én pedig a második hozzászólásomban írtam, hogy ahhoz kellő részletességgel kell naplózd az oldalletöltések számát:

    https://prog.hu/tarsalgo/211870/wordpress-alapu-honlap-legjobb-bejeg..

    Csináld azt, hogy eltárolod a napi adatokat is, mindig az aktuális összes oldalletöltés érték és az előző időszakban mentett megtekintések számának különbözetét. Erre könnyen lehet egy select-et írni. Futtasd a statisztika gyűjtést mindig éjfél után egyszer (!!), szigorúan egyszer.
    Mutasd a teljes hozzászólást!
abcd