Senaste inläggen från UEX

  • Wordpress kärna och ordning

    Här kan du hitta mer om Wordpress.

    Om man ska bygga en hemsida i Wordpress med hjälp av plugins, teman och allmän PHP-kod via functions.php så kan det vara bra att känna till i vilken ordning Wordpress laddas internt. Genom att ha koll på detta så blir koden i projektet mycket bättre. Det är inte alltid så lätt att veta om alla konstanter och hooks som körs i systemet.

    Ett exempel är att man ska lägga till lite kod som ska köras bara i admin men ej i frontend eller under AJAX requests. Många skulle så säga att man bara använder sig av is_admin(). Detta kommer inte att fungera eftersom den också retunerar true för AJAX request mot admin-ajax.php.

    Eller så kanske du kör in lite kod via admin_init hooken och sedan undrar varför det funkar med AJAX requests med. Eller ett annat exempel. När någon kod exekveras i temats functions.php-fil och har beroende av en annan kod som är skriven i init hooken. Då kan det bli fel eftersom koden i functions.php körs före init.

    Det finns massor av fall som dessa och då underlättar då väldigt mycket att förstå hur Wordpress laddar allt internt.

    Wordpress-laddningsordning

    Att förstå hela flödet med Wordpress kan ta ett tag att lära sig. Men jag tycker att denna illustration verkligen gör det lättare att förstå processen och ordningen.

    wordpress-laddningsordning.png

    Det finns fyra huvud varianter när den laddar Wordpress.

    FrontEnd (theme) laddning. REST request laddning. Admin panel laddning. AJAX request (admin-ajax.php) laddning.

    I alla dessa fall så laddas kärnan wp-load.php.

    WordPress kärnans laddningsordning i text

    Som man ser nedan så körs allt genom wp-load.php

    wp-load.php wp-config.php wp-settings.php // Load functions: wp_debug_mode(), timer_start(), require_wp_db() ... // Constants functions: wp_initial_constants(), wp_cookie_constants() ... // Plugin functions (hooks, activation): do_action(), plugin_dir_url(), register_activation_hook(). // Constants setup: WP_START_TIMESTAMP, WP_MEMORY_LIMIT, WP_MAX_MEMORY_LIMIT, WP_DEBUG, SCRIPT_DEBUG, WP_CONTENT_DIR, WP_CACHE. // Standardize server variables: wp_fix_server_vars(). // maintenance mode check: wp_maintenance(). // Enables load speed timer: timer_start(). // Debug mode check: wp_debug_mode(). // Includes 'wp-content/advanced-cache.php' if it is exists and WP_CACHE is on. // Data base. $wpdb. require_wp_db(). // Loads 'wp-content/db.php' if it is exists. Creates DB connection // and setups all DB related variables: prefixes and so on... // Object cache: 'wp-content/object-cache.php' if exists or 'wp-include/cache.php'. // Base WP hooks (filters): default-filters.php. // Multisite is enabled (if need) // Loads 'wp-content/sunrise.php' if exists (for multisite only). // register_shutdown_function( 'shutdown_action_hook' ) // SHORTINIT: stopping the download, where there is only the most basic. if( SHORTINIT ) return false; // The localization functions are connected. // Checks whether WP is installed: wp_not_installed(). // Connects a bunch of files with the rest of the WordPress functions. // Connects Must-use plugins and corresponding action is triggered: do_action( 'muplugins_loaded' ); // cookie, ssl constants: COOKIEPATH, COOKIE_DOMAIN // Common global vars: $pagenow, $is_apache, $is_nginx, $is_lynx // Client global vars: $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_IE, $is_edge // Active plugins are connected // pluggable functions are connected: pluggable.php. // triggers hook do_action( 'plugins_loaded' ); // Force add slashes for $_POST, $_REQUEST ... values. See. wp_magic_quotes(). // Global vars: // $wp_the_query — new WP_Query() // $wp_query — $wp_the_query // $wp_rewrite — new WP_Rewrite() — constants, functions, rewrite rules. // $wp — new WP() — base WP query (runs later). // $wp_widget_factory — new WP_Widget_Factory() // $wp_roles — new WP_Roles() // Current theme do_action( 'setup_theme' ); // functions.php (child) - first connect functions.php of the child theme // functions.php (parent) - then connect functions.php of the main theme // WP translation file: load_default_textdomain() do_action( 'after_setup_theme' ); // first hook allowed in the theme // Sets the current user (creates an object). // See. wp_get_current_user() // The user is often already defined by plugins after the 'plugins_loaded' action. $wp->init(); // init action. The time when WP environment, themes and plugins is already activated, // but nothing has been displayed on the screen yet: do_action( 'init' ); // Widget registration: 'widget_init' action // Checking site status for multisite. // The site may be: deleted, inactive, in the archive. See. ms_site_check() // If the site failed the check, the drop file will be called and PHP is aborted via die(). // Same as `init` only after the status check. // This line of code can be not reached. For example on REST request. do_action( 'wp_loaded' );

    När man laddar kärnan så körs alltid functions.php i aktivt tema, även i Wordpress admin. Detta är väldigt smidigt för oss utvecklare. Om inte wp-load.php hittar wp-config.php så kommer installations processen komma igång. Man kan säga att wp-settings.php är en stor del av Wordpress kärnan.

    Efter att konfigurationen i wp-config.php är funnen så kopplar Wordpress upp sig mot databasserven.

    Ska fundera lite på nästa section i denna tråd, man kan läsa mera här. 😉

    läs mer
  • Packa upp arkivfilen .wpress manuellt

    Om man inte kan ta backup manuellt på en Wordpress-installation så kan jag rekommendera All-in-One WP Migration för att migrera eller flytta en hemsida. Men det kostnadsfria pluginet finns dock en begränsning på 512 MB när man skall återställa .wpress

    All-in-One WP Migration är tänkt att användas av den icke-tekniska användaren och kommer med funktioner som låter dig migrera din WordPress-webbplats med liten eller ingen teknisk kunskap eller erfarenhet.

    Om man är lite mera nördig och vill packa upp .wpress formatet som detta verktyg skapar så kan man använda sig av detta. Detta är användbart ifall man vill manuellt återställa filer från en All-in-One WP Migration backup. Man slipper även då begränsningen på 512 MB.

    Packa upp med hjälp av nodejs

    npx wpress-extract <fil>.wpress

    Packa upp med hjälp av php

    git clone https://github.com/ElliottLandsborough/php-wpress-extract cd php-wpress-extract/ php run.php <fil.wpress> <Sökväg där det ska packas upp>

    Wpress-extract extraherar innehållet i "wp-content"-katalogen tillsammans med webbplatsens databas. För att återställa sajten måste du installera en helt nytt WordPress och sedan byta ut wp-content.

    Slutligen måste du rengöra den nya WordPress-databasen och importera SQL-databasen du fick från wpress-arkivet.

    Här finns källkoden wpress-extract. php-wpress-extract

    läs mer
  • Node SASS

    Om du vill generera css från en scss sass fil

    npx sass --style compressed <fil>.scss > style.css

    Du kan även använda dig av node-sass tool. Om du har svårt att installera nodejs se denna guild: Installera nodejs utan root på ett webbhotell

    läs mer
  • Shared hosting

    Om du använder dig av ett webbhotell som inte har nodejs så kan du lägga till det själv utan att vara root. Många använder Siteground som inte har nodejs och då finns denna lösning. Börja med att hitta rätt version här https://nodejs.org/dist/.

    cd ~ wget -qO- https://nodejs.org/dist/v14.8.0/node-v14.8.0-linux-x64.tar.xz | tar -Jvx mv node-* nodejs; mkdir bin; cp nodejs/bin/node bin; cd bin ln -s ../nodejs/lib/node_modules/npm/bin/npm-cli.js npm ln -s ../nodejs/lib/node_modules/npm/bin/npx-cli.js npx; cd ..

    Om du inte har $HOME/bin i din path så får du lägga till detta i den .profile.

    läs mer
  • Felsökning

    I många fall så har man inte tillgång till serversidan när du har webbhotell. Då kan det vara smidigt att felsöka variabler som du har i .htaccess. Det man behöver göra är att dumpa en del av informationen som mod_rewrite använder till url-fältet så man kan läsa informationen.

    Här ser ni ett exempel på detta i .htaccess filen.

    RewriteCond %{QUERY_STRING} !dump RewriteRule (.*) http://www.minegenexempeldoman.se/$1?dump&the-request=%{THE_REQUEST}&http-host=%{HTTP_HOST} [R=302,L,QSA]

    Byt ut www.minegenexempeldoman.se mot den domänen du har.

    Om ni behöver exempel på variabler som Apache så finner ni det här.

    läs mer

Nyheter

Manor Lords firar ettårsjubileum. Utvecklarna berättar mer om kommande uppdateringar2025-04-27 15:27

Igår var det på dagen ett år sedan Manor Lords släpptes i Early Acess. För att fira detta så har utvecklaren Slavic Magic gett oss lite information kring vad som kommer att förbättras i kommande uppdateringar. Det blir även en del nya inslag.

Vi kommer bland annat få något som kallas för "Records" som håller koll på saker som ens produktion och vad som går åt. Ett nytt system som ökar kostnaden för att ha "många byggnader" är också under utveckling - och dessutom kommer två nya typer av sådana att läggas till; ett stenbrott samt en kalkugn. Vi kommer även få förbättrad AI, förbättrad kamera i spelet, det kommer gå att fiska i floder och det kommer en del förändringar gällande spelets gränssnitt.

En omarbetnings av spelets framstegs-system kommer också i framtiden men detta befinner sig fortfarande i en design-fas. Tack vare spelets succé så har studion kunnat växa från en ensam person till åtta heltidsanställda och det är mycket därför alla dessa kommande förbättringar kan bli en möjlighet.

<bild>Mycket uppdateringar att vänta framöver.</bild>


Indie-veteranen Rami Ismail ger tips till små studios om hur de ska pitcha projekt2025-04-27 14:36

Att navigera dagens spelindustri som indieutvecklare är inte alltid så lätt. Små studios får konstant kämpa för att säkra finansiering till sina projekt och många spenderar orimligt mycket tid på pitch-sessioner, där de presenterar sina idéer för potentiella utgivare, vilket tyvärr sällan ger det utslag man hoppats på.

För att få lite insikt i hur man bäst tar sig fram i detta klimat pratade vi med indieprofilen och branschveteranen Rami Ismail under DevGAMM i Gdańsk. Som rådgivare för otaliga utvecklare har han ett tydligt budskap:

"The main thing I try to teach the indies is to move quick. A lot of indies that I meet spend a year and half, two years building their first prototype before they ever show it to another player or a play tester or a publisher. It's so much time lost because it's really hard getting funding right now, the industry is in a tough place and the funding is low."

Hans råd är lika konkret som befriande; slösa inte bort åratal på en prototyp ingen
sett. Istället bör fokus ligga på att snabbt identifiera och utveckla en idé som har potential, snarare än att putsa på detaljer:

"Move fast and don't try too hard. You should care about your game but I see a lot of developers researching every publisher that they pitch to, and I'm just like, go online, find a list of publishers, just pitch to all of them. And then, they'll figure it out. They'll say no if they are not interested, they will see it. And sometimes you get lucky. A publisher that normally you wouldn't believe would publish your game, might be interested. You never know."

Ismail förespråkar alltså en mer direkt approach. Spela ut dina kort snabbt, brett och utan att vara överdrivet taktisk - för i dagens klimat gäller det att synas och våga pröva lyckan.

<video>

<bild>{Luftrausers} är ett av de spel Ismail varit med och utvecklat.</bild>


Id Software bekräftar att Doom: The Dark Ages har 22 banor2025-04-27 13:07

Id Software har tidigare utlovat att kommande Doom: The Dark Ages kommer att vara deras största kampanj någonsin med god marginal. Något som bekräftades efter att Id Software släppte senaste trailern under gårdagen då regissören Hugo Martin bekräftade att spelet har 22 banor. Detta kan då närmast jämföras med Doom och Doom Eternal som har 13 banor vardera, så det är nära nog dubbelt så stort som föregångarna.

Ungefär hur lång speltid det kommer innebära är dock inte känt, men Hugo Martin har tidigare sagt att det är väldigt långt och med några av de största ytorna utvecklaren någonsin gjort. Dock vill man inte att banorna ska vara alltför stora heller och att de största kommer ta runt en timme att klara av. Utöver det finns även en hel del frivilliga uppdrag och saker att göra som förlänger speltiden om man så önskar.

<video>

<bild>Den 15:e maj är det dags och har du Game Pass kan du spela det redan samma dag.</bild>


Rykte: Tionde generationen av Pokémon utspelas i Grekland-inspirerad värld2025-04-27 12:05

Vi är nu nio generationer och 1025 olika monster in i Pokémon-serien. Men det slutar så klart inte där. Nästa generation, som kommer under kodnamnet Gaia, ska släppas till Switch 2 under år 2026. Tidigare spel i serien har varit inspirerade av riktiga platser, Galar (från Sword & Shield) var inspirerat av Storbritannien, Kalos (från X och Y) har likheter med Frankrike, och Alola (från Sun & Moon) hade tydliga likheter med Hawaii. Nästa spel i serien ska enligt rykten utspela sig i Grekland. Specifikt i Kykladerna, vilket är en ögrupp sydost om det grekiska fastlandet. Så om ryktet visar säg stämma kan vi nog räkna med en hel del utforskning av och på vattnet. Och kanske legendariska Pokémon inspirerade av grekiska gudar?

<social>https://x.com/CentroLeaks/status/1915817719829598229</social>

<bild>En Pikachu-variant av Zeus månne?</bild>


Street Fighter 6-kämpen Elena visar vad hon går för i matig trailer2025-04-27 11:06

Härom veckan kunde vi visa den första trailern för den nästkommande kämpen som är på väg till {Street Fighter 6}. Det handlar om den brasilianska capoeira-mästaren Elena (som även lanseras med nya banan Reniala Remains), som ursprunlgigen debuterade i Street Fighter III: 3rd Strike och skrämde slag på alla med sin enorma räckvidd och styrka.

Elena har till synes designats om en hel del, men hon har kvar sin minimala originalkostym för alla Street Fighter-puritaner. Nu har vi fått den första fullängdstrailern med henne, vilket ger goda möjligheter att studera vad hon går för.

Hon ingår utan extra kostnad för alla som har Year 2 Character Pass, Ultimate Pass eller Years 1-2 Fighters Edition - och släpps den 5 juni, vilket råkar vara samma dag som Street Fighter 6 släpps till Switch 2 (och som Switch 2 har premiär).

<video>

<bild>Redo att dela ut massor av stryk.</bild>


Oblivion-designer lyrisk: "Inte säker på att ordet remaster gör det rättvisa"2025-04-27 09:34
Ordet räcker inte till.
The Elder Scrolls IV: Oblivion Remastered2025-04-26 10:53
En fröjd för nostalgiker, men svårsmält kantighet för nykomlingar.
Sydney Sweeney i Split Fiction-filmen, sägs det2025-04-26 09:31
Ska göra Mio – eller Zoe.
Ubisoft håller The Crew-löftet – får offline-läge i år2025-04-25 18:42
De två överlevande The Crew-spelen ska kunna fortsätta överleva.
10 miljoner! Resident Evil 4-remaken säljer snabbast i serien2025-04-25 16:25
15 miljoner för remaketvåan och sjuan.