Vad händer egentligen med WordPress 3.6?

Kära WordPress vad är det som händer med versin 3.6? Tidigare i veckan meddelades att Editorial Flow droppas för att det blir för komplext. Och nu får den som uppdaterar till senaste utvecklingsversionen (just nu 3.6-alpha-23451) se följande.

3-6

Detta är alltså uppdaterade Post Formats. Dessa har funnits tidigare men haft en ganska undanskymd tillvaro. Tanken är bra och jag har länge irriterat mig på att man inte kunnat skapa egna Post Formats utan bara haft tillgång till de som funnits inbyggda. Så ändringar i API:et för att förbättra detta är välkommet.

Men att lägga till ytterligare 10 flikar i vyn för att skriva poster känns, ja jag säger det, katastrofalt. WordPress är redan idag ganska komplext och gränssnittet är långt ifrån självklart. Ska man ändra i gränssnittet så borde det handla om förenkling, ta bort saker, underlätta. Jag hoppas verkligen att det inte kommer se ut så här när 3.6 kommer till sommaren.

Visuell design för WordPress – är det en ny trend vi ser?

Fram tills nu har WordPress varit ganska formulärstyrt. För att ändra på innehåll loggar man in i backend och ändrar innehåll via formulär. Detta fungerar bra men ger inte användaren en vidare bra upplevelse och man ser heller inte hur resultatet blir förrän man sparar och tittar.

Nu tycker jag mig dock se att det händer saker och att framtiden är betydligt mer visuell. Det finns till exempel flera olika projekt som levererar just en visuell editor till WordPress där man kan dra och släppa innehåll direkt på sidorna.

Många av de mer avancerade lösningarna kostar pengar och därmed kanske inte heller kommer spridas brett bland utvecklare och användare. Det roliga är dock att det nu kommer en visuell editor av teman i WordPress core (3.4).

Vem vet, kanske siktar teamet bakom WordPress att bygga in en egen lösning för att bygga sidor med ett visuellt verktyg? Det hade i så fall varit väldig trevligt för just den pusselbiten saknas. Visst vill man se sidan man arbetar på och visst vill man kunna flytta runt saker helt fritt.

Bygger WordPress full frontend-editering?

Snart släpps WordPress 3.4 och det är en version som har lagt fokus på att göra det enklare och bättre att arbeta med teman. Kanske känns det inte så värst hett men jag kan inte låta bli att undra var man har planerat för de kommande versionerna?

Är det helt enkelt så att man siktar på att flytta all redigering och hantering av innehåll till frontend?

Se på dumpen från 3.4 beta 2. Detta är en ny vy där man kan ändra på några grundläggande saker på sin wp-sajt i realtid. Du ser sajten och ändrar direkt på sidan, smidigt. Varför skulle det stanna vid att man kan ändra bakgrundsfärg och titlel?

Tänk dig att man framöver lägger till editering av poster och pages i samma skal. Och tänk dig att vi som utvecklare kan plugga in egen funktionalitet i detta skal som man även den kan editera direkt från frontend.

Visst känns det som att teamet bakom WordPress ruvar på något nytt och bra i ver 3.4.

LESS för WordPress

Status

Dynamisk CSS (LESS) är riktigt intressant. För visst har även du velat kunna sätta variabler i ett stylesheet, för att sedan använda rakt igenom och därmed bara få ett ställa att ändra på. Det finns flea olika sätt att implementera Less på i WordPress. Artikeln ”How to implement LESS in WordPress, first approach” beskriver hur man gör det ”för hand”, men man kan även använda en färdig plugin, till exempel denna, Less.js for WordPress.

Nu börjar jobbet på wp3.4 och VK.se på WordPress

Status

Det sägs att WP 3.4 ska lägga fokus på att design och tema, WPcandy har skivit lite mer om det. Låter strålande även om jag personligen hade föredragit att man la lite kraft på att göra hela plattformer mer enterprise och till exempel byggt in en kraftfull lösning för att enkelt förflytta sig mellan dev/stage/test/prod (som tex Rails har). Annars vill jag verkligen att du läser posten ”Nu byter vi till WordPress på vk.se”, bra och intressant. Jag tror fortfarande att dagspressen har väldigt mycket att hämta i WP-lägret, långt mer är bara som bloggplattform.

Så använder du Pointers i WordPress 3.3

Ganska snart kommer WordPress i en ny version, 3.3. En spännande sak som verkar gå med är konceptet Pointers. Tanken är att man på ett enkelt sätt ska kunna flagga för nya funktionalitet i wp-admin. Tanken är inte helt ny och båda Facebook och Gmail använder något liknande för att presentera nyheter för sina användare.

Eftersom 3.3 inte är släppt än kan saker komma att ändras men vill du testa redan nu så ladda hem senaste versionen av wp, och kopiera sedan in koden här nedan i functions.php i ditt tema.

Principen är ganska enkel, först lägger du till script och style som behövs (med enqueue), därefter lägger du innehållet i din pointer i en variabel, och sist kör du lite jquery och hakar på en pointer till ett #id någonstans i wp-admin.

Vill man går det att ändra på ”position” och ”arrow” för att designa om sin pointer så den passar placeringen på skärmen optimalt, pilen åt höger eller vänster osv. I mitt fall har jag lagt in funktionen i min Related Images för att påminna användarna att konfigurera pluginen, smidigt.


add_action( 'admin_enqueue_scripts', 'mitt_script' );

function mitt_script() {
 $visa_min_pointer = get_user_setting( 'min_pointer', 0 );
 if ( ! $visa_min_pointer ) {
 wp_enqueue_style( 'wp-pointer' );
 wp_enqueue_script( 'wp-pointer' );
 wp_enqueue_script( 'utils' );
 add_action( 'admin_print_footer_scripts', 'mitt_admin_pointer_script' );
 }
 }

function mitt_admin_pointer_script() {
 $p_content = '<h3>Rubriken i min Pointer</h3>';
 $p_content .= '<p>Brödtext i min pointer</p>';
 ?>
 <script type="text/javascript">
 //<![CDATA[
 jQuery(document).ready( function($) {
 $('#menu-settings').pointer({
 content: '<?php echo $p_content; ?>',
 position: {
 my: 'right top',
 at: 'left top',
 offset: '0 -2'
 },
 arrow: {
 edge: 'left',
 align: 'top',
 offset: 10
 },
 close: function() {
 setUserSetting( 'min_pointer', '1' );
 }
 }).pointer('open');
 });
 //]]>
 </script>
 <?php
 }

Lägg till en sökruta i dina WordPress-menyer

Ibland vill man ha in annat i sina menyer än det som menyeditorn erbjuder. Till exempel kan en liten sökruta vara bra, och ligger den direkt inom en <ul> <li> blir det enklare att styla och få allt att se bra ut. Då finns detta lilla fina filter (wp_nav_menu_items) att tillgå.

add_filter('wp_nav_menu_items','search_box_function', 10, 2 );
function search_box_function ( $nav, $args ){

$return = "<li class=\"search\">";
$return .= "<form action=\""/\" method=\"get\">";
$return .= "<input type=\"text\" name=\"query\" placeholder=\"Search\">";
$return .= "<button name=\"\" type=\"submit\" value=\"Search\"></button>";
$return .= "</form>";
$return .= "</li>";
$nav = $nav.$return;

return $nav;
}

Du får in menyn via $nav och kan loppa igenom eller som i detta fallet bara lägga till ytterligare ett element i slutet av menyn, därefter returnerar du tillbaka, enkelt och väldit praktiskt. Funktionen lägger du som som vanligt i functions.php.

Jag bygger community på WordPress, håll tummarna mina vänner

Jag driver sedan några år Poetfreak.com (med per o). Det är en sajt där poeter kan dela texter med varandra och för tillfället finns kring 110 000 publicerade alster av några tusen skribenter, till detta kommer kring 200 000 kommentarer. Allt är byggt på Codeigniter MVC, vilket har fungerat väldigt bra. Nu känns bygget dock lite utdaterat och hela plattformen behöver ses över.

Jag kan såklart bygga en ny specialsydd sajt igen, med allt vad det innebär men jag har varken tid eller lust att slita med det (jag vill ju ha ett liv åxå). Det är kul men tidkrävande att uppfinna cachehantering, skriva mängder av tester eller bygga en helt egen db-arkitektur, sånt tar tid (även om det blir bra). Så, nu har jag istället dragit igång ett projekt för att porta över allt till WordPress, enkelt, snabbt och ”tillräckligt bra”.

Galet, konstigt och vansinne kan tyckas för WordPress är ju ett bloggverktyg och Poetfreak.com är en community, vilket definitivt är en helt annan kopp te. Stora skillnader finns men om man väljer att se WP som en låda för strukturerat innehåll som har API:er för att kunna stoppa in och dra ut innehåll ur lådan, jag då har vi en plattform som gör exakt det jag behöver göra!

Men andra orosmoln finns, WP har kärlek till helsides-cachning medans Poetfreak.com kräver att allt renderas i realtid med cachade fragment. WP är ganska databasintensivt, och i mitt CI-bygge har jag arbetat stenhårt för att få ner (nästan få bort) db-accesserna genom att i första hand lägga allt innehåll direkt i minnet, och sedan serva sidor från serverns ram. Potfreak.com har dessutom mängder av funktioner som WP saknar helt, till exempel ett eget meddelandesystem, intern statistik, integration med PayPal, ett publikt rest-api osv. Och sist men inte minst, all editering av innehåll sker direkt på fronten (på Poetfreak.com), det finns inget backend (motsvarande wp-admin). Allt detta blir en utmaning.

Stora fördelar finns också. Temahanteringen är fantastisk och vansinnigt lätt att använda. Då jag skapar en sida är det bara att lägga till en tpl-page och det renderar som det ska. Hantering av url:ar gör att att jag förhoppningsvis slipper routa på egen hand, det funkar, out of the box. Jag slipper skriva egen sql, och allt vad det innebär med saker som säkerhet, tester av egna index osv. Förhoppningsvis räcker WP_Query() för mina behov. Mina nya favoriter Transients API och Memcached Object cache ska kunna hantera det mesta som hör till cachning och för oinloggade fungerar sidcachning helt ok. Hantering av användare och poster samt kategorier finns klara. Det finns enkla API:er för att spara, uppdatera en post. Det finns hantering av användares behörigheter och flöden för registrering av nya användare. Och inte minst så finns det ett backend för mig att använda och konfa i. Det finns en stabil db-arkitektur och ett inbyggt sätt att lagra extra data (option-tabellen).

Mängder saker ligger och bara väntar på att användas och till det lägger vi en fantastisk dokumentation, en enormt stor användarbas, en galet enkelt hantering av uppdateringar av core. Så, jag hoppas och tror att det kommer gå bra. Jag börjar i alla fall nu direkt.

Bygg ett eget API på WordPress

WordPress har ingen inbyggd funktionalitet för att visa sitt innehåll via ett API. Det är turligt nog inte speciellt svårt att göra det på egen hand och här är grunden till en api-plugin som visar ut dina poster i ett json-format.

Först behövs en mapp under /plugins/ vi kallar den ”api”, dvs wp-content/plugins/api/. I denna mapp lägger du följande filer.

/wp-content/plugins/api/api.php
/wp-content/plugins/api/api.class.php
/wp-content/plugins/api/api/posts.php

api.php

/*
Plugin Name: Api
Plugin URI: http://fosseus.se
Description: API
Version: 1.0
Author: johannes
*/
require_once dirname( __FILE__ ) . '/api.class.php';
if (class_exists('Api')){
	$api = new Api();
}

Därefter lägger vi till klassen, api.class.php

/*
 * API wp-plugin
 * http://mikeschinkel.com/blog/restful-web-services-in-wordpress-plugin/
 */
class Api {
	

	function __construct(){
		add_action( 'init', array( $this, 'init' ), -10 );
	}

	
	function init(){

		define('RESTFUL_WEB_SERVICES_DIR', dirname(__FILE__));
		define('RESTFUL_WEB_SERVICES_URL_PATTERN','api(/?.*)?');

		$abspath = trim(str_replace('\\','/',ABSPATH),'/');
		$rest_services_dir = str_replace('\\','/',RESTFUL_WEB_SERVICES_DIR);
		$rest_services_path = trim(str_replace($abspath,'',$rest_services_dir),'/');
		define('RESTFUL_WEB_SERVICES_PATH', $rest_services_path);

		add_action( 'init', array($this,'services_flush_rewrite_rules') );
		add_filter('generate_rewrite_rules', array($this,'services_add_rewrite_rules'));
		add_action('template_redirect', array($this,'dispatch_service'));
	}

		
	// Flush the existing rewrite rules
	function services_flush_rewrite_rules(){
		global $wp_rewrite;
	 	$wp_rewrite->flush_rules();
	}

	
	// Add the rewrite rules
	function services_add_rewrite_rules( $wp_rewrite ) {
		$new_rules = array(
			RESTFUL_WEB_SERVICES_URL_PATTERN => null,
	  	);
	  	$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
	}

	
	// And in the end, dispatch it all and smile
	function dispatch_service() {
		global $wp;
		if ($wp->matched_rule==RESTFUL_WEB_SERVICES_URL_PATTERN){
			if ($wp->request == 'api') {
				die();
			} else {
				$this->view_service();		  
			}
			die();
		}
	}


	// View a single service
	function view_service() {
		global $wp;
		list($dummy,$service_name) = explode('/',$wp->request);
		if (file_exists($service_php = (RESTFUL_WEB_SERVICES_DIR . '/api/' . $service_name . '.php'))) {
			include_once $service_php;
		} else {
			header('Content-Type: text/plain');
			status_header(404);
			echo "404";
		}
	}


}

Nu skapar vi ytterligare en mapp, direkt i vår plugin. plugins/api/api/ där lägger vi filen posts.php.

$return = array();
while ( have_posts() ) : the_post();
	$item = array( 'title' => get_the_title() );
	array_push($return,$item);
endwhile;
header('Content-type: application/x-json');
echo json_encode($return);

Det är allt som behövs och du kan nu aktivera pluginen som vanligt. Glöm inte att ändra ”Permalink Settings” till ”Day and name” (dvs /-urlar). Surfa till dinsajt.se/api/posts/ så ska du få titlarna på dina poster i ett snyggt json-format.

Plugin: Content Sort screencast

Status

Jag har äntligen uppdaterat Content Sort till 2.0b, pluginen som gör att man kan sortera förstasidan på en wordpress-sajt.  Förutom optimering är nu all data flyttad från den egna tabellen till  options-tabellen. Dessutom körs de monterade posterna nu direkt in i ”the_loop” istället för i en helt egen variant. Det gör att Content Sort fungerar utan template-hack, vilket blir klart enklare.

Plugin: Related-Images 1.1 med bildtext och bildmått

Har lagt ut en liten men nyttig uppdatering av Related-Images. Man kan numera få ut den genererade bildens höjd och bredd samt beskrivning och caption. De senare två kan användas för att sätta egna bildtexter. Tyvärr sitter bildtexter direkt på bilden i WordPress, vilket gör att alla placeringar av samma bild får samma bildtext. En annan lite skum grej är att WP-Super-cache inte verkar släppa cachen då man uppdaterar media, en ändring i en bildtext kan därmed släpa lite.