Aktuális téma az adatbázisból

Sziasztok!











Írnom kell egy plugint, ami plugin ugyan a wp része, de másik domainről fog futni. (a tárhely és a doc root ua).











Tehát, van egy valami.hu oldalam, ezen majd lesznek mindenfélék, és van egy masik.hu oldalam.





A masik.hu oldalon én egy egész másik témát akarok használni, mint ami be van állítva a valami.hu oldalra.











Na most, több gondom is lesz ezzel már látom, leginkább, ami a wp beépített URL függvényeit illeti, de ezt most hagyjuk, valószínűleg ezt a részét leprogramozom majd én, ez most nem fontos.











Ami a fontos, az az, hogy mindezt úgy csinálom, hogy a domain név alapján váltom a témát.





Tehát csinázok egy ilyet:









Code:

$host = str_replace('www.', '', $_SERVER['SERVER_NAME']);

if (in_array($host, array('masik.hu'))) {

$themeDir = str_replace($_SERVER["DOCUMENT_ROOT"] . "wp-content/themes/", '', str_replace('\', '/', get_template_directory()));

if (defined('MFT_THEME') && MFT_THEME != $themeDir) {

switch_theme(MFT_THEME, MFT_THEME);

}

} else {

switch_theme('twentyeleven', 'twentyeleven');

}








Ez szép és jó, és működik is remekül.


Azonban, ugye arra nem számíthatok, hogy mindenki alapból a valami.hu oldalon a twentyeleven témát fogja választani, de még ha így is lenne, akkor is fennál a problémám.





Szeretném megtudni, mi is az aktuális téma, mi van beállítva a wordpressbe.


Nem gondoltam volna, hogy nagy ügy, nosza, keressünk valami wp api függvényt.


És persze ott is van: get_current_theme();





Persze rájöttem, hogy ez nem jó, hiszen, ha kapásból a masik.hu -ra megy, akkor mivel domain alapján már kiválasztottam, ezért sosem fogom tudni, a WP admin oldalán mi van beállítva.





És most jön a szopacs. Gondoltam, kinézem az adatbázisból, hát csak tárolva van a wp_options -ben.


És nem. Azaz igen, van egy olyan sor, hogy current_theme, az ici pici gond csak az, hogy ennek értéke: "Twenty Eleven"


Na most ebből a switch_theme -mel én a büdös életben nem fogom kiválasztani a twentyeleven témát.


Ez értelemszerűen nem működik:





Code:

switch_theme('Twenty Eleven', 'Twenty Eleven');








Tehát az igazi kérdés:


Na de akkor, hogyan tudom meg adatbázisból, hogy mi az admin felületen beállított téma???

Szia!











A wp_options -ban van a template is, a current_theme mellett:















SELECT option_name, option_value FROM wp_options WHERE option_name = ‘template’ OR option_name = ‘current_theme’;











A template az a sablon könyvtár neve mert kisbetűkkel hozza a nevét, a current theme pedig a style.css ből van, amit kiolvasott. Ha ott nagybetűkkel adták meg, akkor azért látod úgy. (azt írták a style.css ben, legfelülre hogy [font=helvetica, arial, sans-serif:2gt4y6j7]Twenty Eleven[/font:2gt4y6j7])







Most ezt találtam benne, lehet van még más sor is ott, ami a sablonra utal, de szerintem akkor a template -t kérdezd le a wp_options-ból. Persze ha wp_ az előtag az adatbázisban.





SELECT option_name, option_value FROM wp_options WHERE option_name = ‘template’ OR option_name = ‘current_theme’;

















A template az a sablon könyvtár neve mert kisbetűkkel hozza a nevét, a current theme pedig a style.css ből van, amit kiolvasott. Ha ott nagybetűkkel adták meg, akkor azért látod úgy. (azt írták a style.css ben, legfelülre hogy [font=helvetica, arial, sans-serif:2gt4y6j7]Twenty Eleven[/font:2gt4y6j7])











Most ezt találtam benne, lehet van még más sor is ott, ami a sablonra utal, de szerintem akkor a template -t kérdezd le a wp_options-ból. Persze ha wp_ az előtag az adatbázisban.

Ezer hála és köszönet, a template sor kell nekem!





Köszi még gyszer

Nem jó.











http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/theme.php#L0











Az a gond, hogy updateli a táblát is :frowning:





Ezzel az a problémám, hogy ha valamilyen oknál fogva, mondjuk egy másik plugin, még mielőltt az én pluginem lefutna, változtat a témán, a büdös életben nem fogom tudni kitalálni, mi volt az eredeti.











Ráadásul, mivel itt megváltozik, mikor belépek a wp - adminba, akkor már az én általam beállított témát mutatja.





Kvázi nincs rá mód, hogy megtudjam, mi volt az eredeti. Ez mekkora szopás.











Utálom a wordpresst.

Mindenesetre megkérdeztem a wordpress.org -on is, hátha:





http://wordpress.org/support/topic/get-current-theme?replies=2#post-3170927

Idő közben rájöttem, hogy ez biztosan nem jó megoldás, hiszen a switch_theme az adatbázisban cserél. Tehát ha egy időben többen nézik az oldalt, akkor “elméletileg” minden usernek a jó téma jelenik meg, de kb. szétnyírja a db-t, meg a winyót egy nagyon nagy látogatottságú oldalnál.











Egyszerűen saját templateket kell alkalmazni, vagy saját oldal sablont.











Nekem olyan kellett volna, hogy nem valójában változtatja a témát, mint ha én változtatnám a dashboardon, csak mondjuk arra a session-re. De ilyen nincs, legalább is én nem találtam.