Kategori wordpress

WordCamp 2010, en svensk WordPress-konferens

Sveriges första riktiga WordPress-konferens var i helgen på Tekniska muséet i Stockholm. Jag var där och lyssnade på SEO-snack med Nikke Lindqvist, min gamle kollega och vän Kristian Erendi pratade om Aller Medias WordPress-setup (som jag ju jobbat med tidigare), arrangören själv, Thord Daniel Hedengren gav oss inblick i hur man skriver smarta parent/child-teman, John Angelmo tyckte vi skulle byta lösnord ofta och Per Åström på TV4 berättade om hur de jobbar med WordPress. Jag hade gärna gått på fler seminarier men tre parallella spår gjorde att det inte var möjligt, tyvärr.

Vi hade tillgång till muséet hela natten, och ganska många stannade kvar och byggde smarta WordPress-lösningar istället för att stappla hem och vila upp sig. Jag var en av dem som sparade in på hotellpengarna och istället byggde sajten fredagswhisky.nu. Idén till namnet kom från @findub och det tackar jag speciellt för. På sajten hämtar jag de Flickr-bilder som är taggade med termen fredagswhisky, oavsett vem som gjort det, och skapar WordPress-inlägg av dem, med titel, hotlänkad bild och givetvis attribution och länk tillbaka till Flickr. En helt meningslös sajt alltså, mer som en proof-of-concept för hur man kan skapa en plugin som skapar WP-poster från ett set med flickr-taggar via Flickrs utmärkta (men inte perfekta) API.

Jag tänkte dra in flickr-flöden som nämner “fredagswhisky” också, samt lägga till autopostningar till Twitter/Facebook men framåt sex på morgonen tog orken slut och jag gick mest runt och drack kaffe och störde de andra.

Så här ser sajten ut och som synes var inte designen något jag prioriterade i steg 0.1-pre-alpha :)

fredagswhisky.nu

Hur som helst ett väldigt trevligt arrangemang av @tdhse och @animalin och jag hoppas verkligen att detta blir ett årligen återkommande evenemang. Gärna med bättre spotifylistor till natthacket …

På wpsthlm smakar det bra med en whisky

WordPress-tema till Livebookings

I våras jobbade jag med att utveckla en webblösning åt Livebookings i England. Grundtanken var att det skulle vara en i stort sett färdig sajt som valfri restaurang skulle kunna ha användning av, inklusive en del innehåll. Temat som jag byggt i WordPress har en stor mängd inställningar för utseende och funktioner, alla restaurangsajter ska kanske inte se likadana ut. Det finns givetvis en inbyggd funktion för Livebookings egen bokningswidget, kopplingar till sociala medier, både via bokmärken och länkar till restaurangens profiler i olika sociala medier. Det finns språkstöd, grundspråket är engelska men den har också översatts till spanska. Bland de färdiga plugins som använts märks SexyBookmarks, Dynamic Content Gallery och W3 Total Cache

All funktionalitet som jag utvecklat ligger direkt i temat, för att underlätta administrationen.

Och det var en sak till … Vi är nu live med första sajten! Det är Ibiza 41 som blev först ut. En restaurang i Madrid, som kör på spanska då förstås. Förhoppningsvis är det fler som följer.

ibiza41.com

Kontakta Magnus Hultberg på Livebookings för mer info. Eller gå till Livebookings i Sverige. De har också en blogg om “Online marketing” för restauranger.

Nya affärer

Den fjärde juni lanserades bonniersajten nyaaffarer.se. Det är ett samarbete mellan Veckans Affärer och Privata Affärer och målet är att Nya Affärer ska vara Sveriges nya mötesplats för entreprenörer. Sajten är byggd med WordPress 2.9.2 och det är jag som gjort det jobbet. Jag har utgått från en Photoshop-design av Martin Runfors samt en kravspec av Mikael Zackrisson, webbchef på VA.se och privataaffarer.se.

Nya affärer

Nya affärer

Mer om tekniken:

  • Forumdelen är byggd i bbPress
  • Artiklarna på förstasidan går att sortera i valfri ordning genom “dra-och-släpp”-funktionalitet i admingränssnittet.
  • Specialfunktionalitet för att visa faktarutor och “se också”-länkar.
  • Senaste forumdiskussionerna syns på startsidan
  • Cachehantering via WP-Supercache

WordPress shortcodes – enkelt exempel

I WordPress 2.5 introducerades shortcodes men det är nog många som fortfarande inte vet riktigt vad det är och vad man kan använda det till. Shortcodes tillåter dig exempelvis att skriva [gallery] direkt i ett blogginlägg, och så visas alla bilder som hör till det inlägget som en liten kontaktkarta. Man kan givetvis definiera egna shortcodes, genom att skriva en funktion i ett plugin eller i functions.php och sen koppla en shortcode till den funktionen.

Exempel 1

function bloginfo_shortcode( $atts ) {
    extract(shortcode_atts(array(
        'key' => '',
    ), $atts));
    return get_bloginfo($key);
}
add_shortcode('bloginfo', 'bloginfo_shortcode');

Funktionen add_shortcode registrerar en ny shortcode, och i exemplet ovan betyder det att om man skriver [bloginfo] i ett inlägg, så kommer funktionen bloginfo_shortcode() att anropas. Just i det här exemplet ska man dessutom skicka med en parameter, det ser ut så här: [bloginfo key=”template_url”] (Exemplet kommer från Blue Anvil)

Exempel 2

Jag har i ett tidigare inlägg visat hur man kan koppla en spotifylista till en wordpress-post, en metod som jag använder på http://topp30.se. Jag vill utnyttja det faktum att listorna nu ligger som egna fält, och skapa en sida med alla spotifylistor i en lång (nåja) HTML-lista. Steg ett är att definiera en funktion som hämtar alla inlägg med “spotify-fält” och sen generera en lista av dem. Nästa steg är att koppla en shortcode till den funktionen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// [spotifylist] - shortcode function
function spotify_sc_func($atts) {
   ob_start();
?>
   <ul id="spotifylist">
   <?php
   global $wpdb, $post;
   $querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id 
    AND wpostmeta.meta_key = 'spotify' 
    AND wposts.post_status = 'publish' 
    AND wposts.post_date < NOW() 
    ORDER BY wposts.post_type, wposts.post_date DESC
    ";
 
   $pageposts = $wpdb->get_results($querystr, OBJECT);
?>
   <?php if ($pageposts): ?>
      <?php foreach ($pageposts as $post): ?>
         <?php setup_postdata($post); ?>
	 <?php $spotify = get_post_custom_values("spotify"); ?>
         <li><?php echo the_title(); ?>: <a href='<?php echo $spotify[0]; ?>'>spotify</a> | <a href="<?php the_permalink(); ?>">text</a></li>
      <?php endforeach; ?>
 
   <?php else : ?>
      <h2 class="center">Not Found</h2>
      <p class="center">Sorry, but you are looking for something that isn't here.</p>
   <?php endif; ?>
 
 
   </ul>
   <?php
   $output = ob_get_contents();
   ob_end_clean();
   return $output;
}
 
add_shortcode('spotifylist', 'spotify_sc_func');

Nu återstår bara att skapa en sida som använder vår nya shortcode.

Och resultatet ser blir det här

Läs också Mastering WordPress Shortcodes på Smashing Magazine.

Automatisk spotifylänk i WordPress

På sajten http://topp30.se listar jag och en del vänner och bekanta varje år våra favoritlåtar. Vi har sysslat med detta något nördiga listande i drygt tio år. Förra året började några av oss att bifoga listan i spotify-form, och inte bara text. I år har nästan alla 20 en spotifylista för sin årslista.

Länken till spotifylistan finns i varje inlägg som en vanlig textlänk, men den ligger ofta på olika ställen, har olika ankartext och kan vara lite svår att hitta. Därför la jag till en genererad spotifylänk som alltid hamnar på samma ställe, uppe till höger i varje inlägg. Lättare att hitta, mer konsekvent.

Detta kan man åstadkomma genom att lägga spotifylänken som ett “eget fält”, ändra i varje template-fil på rätt ställe (index.php/archive.php/search.php etc.) och där läsa in spotify-fältet och visa länken, men det blir opraktiskt att underhålla, lätt att göra fel och lite fult.

En betydligt snyggare lösning är att använda WordPress filterfunktionalitet.

Steg 1: Lägg spotifylänken som ett “Eget fält” (för varje inlägg som har en spotifylista). länk till spotifylista

Steg 2: Lägg till en funktion (i functions.php), som visar en länkad spotify-logga när det finns en lista tillgänglig.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function spotify_content($content) {
	global $post;
	$meta_key = 'spotify';
	$extra_info = "";
	$spotify_logo = get_bloginfo('template_url') . "/img/spotify.png";
	$meta_value = get_post_meta($post->ID, $meta_key, TRUE);
	if($meta_value != '') {
		$extra_info = <<<EOT
			<div class="spotify-link">
				<a href="$meta_value"><img src="$spotify_logo" alt="Lyssna på låtarna via Spotify" /></a>
			</div>
EOT;
	}
	return $extra_info . $content;
}

Steg 3: Lägg till ett filter, som anropar spotify_content varje gång WordPress-funktionen the_content anropas. Det är the_content som visar texten i ett blogginlägg så den kommer definitivt att anropas från exempelvis single.php och index.php (det finns undantag, se längre ner)

add_filter( 'the_content', 'spotify_content' );

Steg 4: Lägg till en css-klass i style.css som lägger din div som du vill ha den. Den allra enklaste varianten blir så här:

1
2
3
.spotify-link {
   float: right;
}

Och det var allt. Resultatet, med en klickbar spotify-logga för varje spotifierat inlägg blir så här:

topp30.se med automatisk spotifylänk

topp30.se med automatisk spotifylänk

Observera att ibland används the_excerpt stället för the_content i mallarna. Det är när man bara vill visa ett utdrag ur inläggen istället för hela texten. Om man vill ha spotify-länken även i dessa mallar så är det inte svårare än att man lägger in ett filter för the_excerpt också:

add_filter( 'the_excerpt', 'spotify_content' );

Tillägg på jonasnordstrom.se

There are 30 plugins used: 22 active plugins and 8 inactive plugins.

Aktiverade tillägg

Akismet 2.5.5  Akismet 2.5.5
» Automattic (url)
Used by millions, Akismet is quite possibly the best way in the world to protect your blog from comment and trackback spam. It keeps your site protected from spam even while you sleep. To get started: 1) Click the “Activate” link to the left of this description, 2) Sign up for an Akismet API key, and 3) Go to your Akismet configuration page, and save your API key.

Analytics360 1.2.7  Analytics360 1.2.7
» Crowd Favorite (url)
Allows you to pull Google Analytics and MailChimp data directly into your dashboard, so you can access robust analytics tools without leaving WordPress. Compliments of MailChimp.

Contact Form 7 3.1.2  Contact Form 7 3.1.2
» Takayuki Miyoshi (url)
Just another contact form plugin. Simple but flexible.

Delicious Curator 0.2  Delicious Curator 0.2
» Jonas Nordstrom (url)
Create WP-post based on Delicious tag

Disqus Comment System 2.72  Disqus Comment System 2.72
» Disqus (url)
The Disqus comment system replaces your WordPress comment system with your comments hosted and powered by Disqus. Head over to the Comments admin page to set up your DISQUS Comment System.

FD Feedburner Plugin 1.45  FD Feedburner Plugin 1.45
» John Watson (url)
Redirects all feeds to a Feedburner feed

Fix Image Margins 1.0.2  Fix Image Margins 1.0.2
» Justin Adie (url)
removes the arbitrary 10px margin from the new caption based images

Flattr 1.1.1  Flattr 1.1.1
» Michael Henke (url)
Give your readers the opportunity to Flattr your effort

flickrRSS 5.2  flickrRSS 5.2
» Dave Kellam (url)
Allows you to integrate the photos from a Flickr RSS feed into your site.

Google Analyticator 6.2  Google Analyticator 6.2
» Ronald Heft (url)
Adds the necessary JavaScript code to enable Google’s Analytics. After enabling this plugin visit the settings page and enter your Google Analytics’ UID and enable logging.

Google XML Sitemaps 3.2.6  Google XML Sitemaps 3.2.6
» Arne Brachhold (url)
This plugin will generate a special XML sitemap which will help search engines like Google, Yahoo, Bing and Ask.com to better index your blog.

Jetpack by WordPress.com 1.2.4  Jetpack by WordPress.com 1.2.4
» Automattic (url)
Bring the power of the WordPress.com cloud to your self-hosted WordPress. Jetpack enables you to connect your blog to a WordPress.com account to use the powerful features normally only available to WordPress.com users.

Markdown Extra 1.2.5  Markdown Extra 1.2.5
» Michel Fortin (url)
Markdown syntax allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by John Gruber. More…

No Soup 0.3  No Soup 0.3
» Jonas Nordstrom (url)
Blocks user from IP-ranges that you specify and sends them to another page

Really Simple CAPTCHA 1.5  Really Simple CAPTCHA 1.5
» Takayuki Miyoshi (url)
Really Simple CAPTCHA is a CAPTCHA module intended to be called from other plugins. It is originally created for my Contact Form 7 plugin.

Smart Youtube PRO 4.1.4  Smart Youtube PRO 4.1.4
» Vladimir Prelovac (url)
Insert YouTube videos in posts, comments and RSS feeds with ease and full customization.

WordPress Beta Tester 0.95  WordPress Beta Tester 0.95
» Peter Westwood (url)
Allows you to easily upgrade to Beta releases.

WP-PluginsUsed 1.50  WP-PluginsUsed 1.50
» Lester 'GaMerZ' Chan (url)
Display WordPress plugins that you currently have (both active and inactive) onto a post/page.

WP-Stats 2.50  WP-Stats 2.50
» Lester 'GaMerZ' Chan (url)
Display your WordPress blog statistics. Ranging from general total statistics, some of my plugins statistics and top 10 statistics.

WP-Syntax 0.9.12  WP-Syntax 0.9.12
» Steven A. Zahm (url)
Syntax highlighting using GeSHi supporting a wide range of popular languages. Wrap code blocks with <pre lang="LANGUAGE" line="1"> and </pre> where LANGUAGE is a geshi supported language syntax. The line attribute is optional.

WP Remote 2.1.3  WP Remote 2.1.3
» Human Made Limited (url)
Manage your WordPress site with WP Remote. Deactivate to clear your API Key.

WP Security Scan 3.0.9  WP Security Scan 3.0.9
» WebsiteDefender (url)
Perform security scan of WordPress installation.

Inaktiva tillägg

Hello Dolly 1.6  Hello Dolly 1.6
» Matt Mullenweg (url)
This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from Hello, Dolly in the upper right of your admin screen on every page.

Recommended Reading: Google Reader Shared 4.0.4  Recommended Reading: Google Reader Shared 4.0.4
» Jacob M Goldman (C. Murray Consulting) (url)
Pulls shared items from your Google Reader account for display in a sidebar widget or within pages or posts. Easily customized with friendly interface. Embed in page or post via shortcode; can always show newest, or start at post publication date!

ServerBuddy 1.0.2  ServerBuddy 1.0.2
» Dustin Bolton (url)
Various tools & tests to analyze server configuration & troubleshoot issues. Navigate to Tools: ServerBuddy. By PluginBuddy.com.

SharedItems2WP 2.0.4  SharedItems2WP 2.0.4
» Craig Fifield (Google Tutor), Jonas Skovmand, Joakim Jardenberg and Marcus Fridholm (url)
Scheduled automatic posting of Google Reader Shared Items.

Stop SOPA Ribbon 1.0  Stop SOPA Ribbon 1.0
» Konstantin Kovshenin (url)
When activated, this plugin will put a Stop SOPA ribbon on the top right corner of your website.

W3 Total Cache 0.9.2.4  W3 Total Cache 0.9.2.4
» Frederick Townes (url)
The highest rated and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress.

WP-Infobox 0.7  WP-Infobox 0.7
» Jonas Nordstrom (url)
Add an info box to posts. You can add title, ingress, a bullet list and “more text”

WP-Yo-status 0.1  WP-Yo-status 0.1
» Jonas Nordström (url)
Display Yo-status

WordPress 2 för iPhone

Det här inlägget gjordes via applikationen “WordPress 2″ på iPhone. Det är en helt ny applikation, av någon underlig anledning har man valt att inte bara uppgradera den befintliga WordPress-appen. Många nyheter, de viktigaste är det nya gränssnittet, som är mycket trevligare än det gamla, samt det nya kommentarsgränssnittet med gravatarer.

Här kommer en omotiverad bild, som test :)

Skapa enkel widget i WordPress

Det är enkelt att göra en widget i WordPress. Man kan givetvis göra den hur avancerad som helst, men själva grunden är enkel och jag ska visa hur det går till.

Du vet säkert att en widget är en plugin-liknande funktion som man kan placera någonstans på sin WordPress-sajt, ofta hamnar den i sidomenyn. Vanliga exempel är “Arkiv”, “Taggmoln” eller “Senaste flickr-bilderna”.

Det fungerar så att man i ett tema har definierat ett antal utrymmen där man kan placera widgets, dessa utrymmen kallas för “sidebars”. Sidebars kan man placera i sidomenyn, footern eller egentligen var som helst i temat. I varje “sidebar” kan sen sajt-administratören dra in en eller flera widgets. Hos mig ser det ut så här, under “Utseende” -> “Widgets”.

Widgets i WordPress dashboard

Widgets i WordPress dashboard

Från och med WordPress 2.8 har det blivit lättare att skapa egna widgets. Man utgår från basklassen WP_Widget och implementerar en del av metoderna. De här metoderna måste man implementera:

class My_Widget extends WP_Widget {
	function My_Widget() {
		// widget actual processes
	}
 
	function widget($args, $instance) {
		// outputs the content of the widget
	}
 
	function update($new_instance, $old_instance) {
		// processes widget options to be saved
	}
 
	function form($instance) {
		// outputs the options form on admin
	}
}
register_widget('My_Widget');

Jag tänkte bygga en widget som visar min senaste status-uppdatering från sajten Yo!. Genom att logga in på yo.se och gå till URL:en http://yo.se/widget/, får man en HTML-snutt som egentligen gör hela jobbet åt oss när det gäller att visa senaste status. den ser ut så här:

<div class="yo-widget" id="_yo_windyjonas">
  <h1><a href="http://windyjonas.yo.se/" title="Jonas Nordström">Windyjonas</a></h1>
  <script src="http://yo.se/widget/1/w.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript" charset="utf-8">
    _yo.username = "windyjonas";
    _yo.hostname = "http://yo.se";
    _yo.style = "http://yo.se/widget/1/w.css";
    _yo.init();
  </script>
</div>

Det allra enklaste hade förstås varit att klippa in den här koden i en text-widget, men då hade det här inte blivit ett exempel på hur man skapar en WordPress-widget, så vi struntar i det och går vidare :)

Jag kallar widgeten för “Yo Status”, så min widgetklass ska få namnet “Yo_Status_Widget” och de metoder jag ska implementera blir följaktligen:

  • Yo_Status_Widget() – konstruktor
  • widget() – funktionen som ska skicka ut widget-koden till webbläsaren
  • update() – Det ska gå att konfigurera widgeten. update() ser till så att man kan ändra aliasnamn (yo-användare)
  • form() – Skapar formuläret för att ändra aliasnamn

Yo_Status_Widget()

Skapa ett WP_Widget-objekt med rätt metainfo och options. “classname” nedan är alltså css-klassen i det omslutande HTML-elementet.

function Yo_Status_Widget() {
	$widget_ops = array('classname' => 'widget_yo_status', 
            'description' => 'Display status from Yo! (http://yo.se)' );
	$this->WP_Widget('yo-status', __('Yo Status'), $widget_ops);
}

widget()

function widget($args, $instance) {
	extract($args, EXTR_SKIP);
 
	echo $before_widget;
	$alias = empty($instance['alias']) ? '&nbsp;' :
          apply_filters('widget_alias', $instance['alias']);
   ?>
    <div class="yo-widget" id="_yo_<?php echo $alias ?>">
		  <h1><a href="http://<?php echo $alias ?>.yo.se/">
                 <?php echo $alias ?></a></h1>
		  <script src="http://yo.se/widget/1/w.js" 
                     type="text/javascript" charset="utf-8"></script>
		  <script type="text/javascript" charset="utf-8">
		    _yo.username = "<?php echo $alias ?>";
		    _yo.hostname = "http://yo.se";
		    _yo.style = "http://yo.se/widget/1/w.css";
		    _yo.init();
		  </script>
		</div>
		<?php
	echo $after_widget;
}

update()

Den här funktionen anropas efter att användaren matat in ett yo-alias och klickat på “Spara”

function update($new_instance, $old_instance) {
	$instance = $old_instance;
	$instance['alias'] = strip_tags($new_instance['alias']);
 
	return $instance;
}

Formuläret som möjliggör ändring av yo-användare.

form()

	function form($instance) {
		$instance = wp_parse_args( (array) $instance, array( 'alias' => '') );
		$alias = strip_tags($instance['alias']);
?>
		<p>
			<label for="<?php echo $this->get_field_id('alias'); ?>">Alias på yo.se: 
				<input class="widefat" id="<?php echo $this->get_field_id('alias'); ?>" 
					name="<?php echo $this->get_field_name('alias'); ?>" type="text" 
					value="<?php echo attribute_escape($alias); ?>" />
			</label>
		</p>
<?php
	}

Resultat

Till slut bakar jag ihop alltihop till en ny plugin. Det hade i och för sig gått att deklarera hela widgeten i functions.php, men jag föredrar att inte röra temafilerna så mycket. Jag gjorde en plugin av alltihop genom att skapa filen /wp-contents/plugins/yo-status/yo-status.php. En del av outputen i widget()-metoden är här utbruten i en egen metod.

<?php 
/* 
Plugin Name: Yo Status
Plugin URI: http://jonasnordstrom.se/yo-status-widget 
Description: Display your yo.se status in sidebar
Version: 0.2
Author: Jonas Nordstrom
Author URI: http://jonasnordstrom.se
*/
 
add_action( 'widgets_init', 'yo_status_load_widgets' );
 
function yo_status_load_widgets() {
	register_widget( 'Yo_Status_Widget' );
}
class Yo_Status_Widget extends WP_Widget {
	function Yo_Status_Widget() {
		$widget_ops = array('classname' => 'widget_yo_status', 'description' => 'Display status from Yo! (http://yo.se)' );
		$this->WP_Widget('yo-status', __('Yo Status'), $widget_ops);
	}
 
	function yo_status($alias) {
		?>
		<div class="yo-widget" id="_yo_<?php echo $alias ?>">
		  <h1><a href="http://<?php echo $alias ?>.yo.se/"><?php echo $alias ?></a></h1>
		  <script src="http://yo.se/widget/1/w.js" type="text/javascript" charset="utf-8"></script>
		  <script type="text/javascript" charset="utf-8">
		    _yo.username = "<?php echo $alias ?>";
		    _yo.hostname = "http://yo.se";
		    _yo.style = "http://yo.se/widget/1/w.css";
		    _yo.init();
		  </script>
		</div>
		<?php
	}
 
	function widget($args, $instance) {
		extract($args, EXTR_SKIP);
 
		echo $before_widget;
		$alias = empty($instance['alias']) ? '&nbsp;' : apply_filters('widget_alias', $instance['alias']); 
        $this->yo_status($alias);
		echo $after_widget;
	}
 
	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['alias'] = strip_tags($new_instance['alias']);
 
		return $instance;
	}
 
	function form($instance) {
		$instance = wp_parse_args( (array) $instance, array( 'alias' => '') );
		$alias = strip_tags($instance['alias']);
?>
			<p><label for="<?php echo $this->get_field_id('alias'); ?>">Alias på yo.se: <input class="widefat" id="<?php echo $this->get_field_id('alias'); ?>" name="<?php echo $this->get_field_name('alias'); ?>" type="text" value="<?php echo attribute_escape($alias); ?>" /></label></p>
<?php
	}
}
?>

Resultatet syns längst ner i högersplaten, eller om jag ändrat något, så såg det en gång ut så här:

Exempel på hur Yo Status kan se ut

Exempel på hur Yo Status kan se ut

Bildhantering i WordPress 2.9

Matt Mullenweg har vid ett flertal tillfällen antytt att det kommer att läggas mycket jobb på mediehanteringen i WordPress. Ett stort steg är den nya möjligheten att redigera bilder, en nyhet som kommer med WordPress 2.9. Tidigare har man, hjälpligt, kunnat ändra storlek på bilderna och inte så mycket mer. Men i och med den nya versionen av WordPress (som inte är släppt än, ska jag kanske säga), så ska det gå att göra enklare bildredigering, det går att beskära bilder, rotera, vända och skala upp och ner.

Så här ser det ut i den senaste officiella WordPress-versionen (2.8.4) när man vill redigera bilder: redigera media, i WordPress 2.8.4

I den senaste utvecklar-versionen (från WordPress svn) ser det helt annorlunda ut:

Bildredigering i WordPress 2.9

Bildredigering i WordPress 2.9

Notera de nya valen för att grafiskt markera ett område och beskära, fungerar riktigt bra!

Läs mer om nyheterna i WordPress 2.9.

WordPress under attack

Äldre versioner av WordPress är sårbara för en attack som cirkulerar just nu. Om du hittar extra adminkonton på din WordPress-installation, eller om dina permalänksinställningar (Inställningar -> Permalänkar) plötsligt fått det underliga suffixet /%&(%7B$%7Beval(base64_decode($_SERVER%5BHTTP_REFERER%5D))%7D%7D|.+)&%/ då har du blivit attackerad och “smittad”.

Uppdatera nu, även om du inte blivit attackerad! Ja, det är så allvarligt. Om du redan blivit angripen, läs Lorelles instruktioner om hur du återställer din WordPress-miljö

Copyright © Jonas Nordström
Teknik och media

Byggt på Notes Blog Core
Powered by WordPress