Under huven på WordPress del2

on

Dagens artikel Under huven på WordPress del 2 kommer bland annat att handla om hur du på ett simpelt vis kan “återanvända” din funktionsfil om du byter tema. Har du några speciella funktioner som du är förtjust i? Det kanske rent av är så att du drar dig för att byta tema just för att du har vissa funktioner som det nya temat inte stöder? Det är ju så att med många funktioner så ges det speciella koder att använda i temat, exempelvis vissa typer av shortcodes – vad tror du händer om ditt nya tema inte stöder just dina shortcodes? Det är inte så svårt att räkna ut.

Möjliggör för två funktionsfiler per tema

Ja du läste rätt, man kan faktiskt använda fler än en funktionsfil till sitt tema. I många ramverk som Thesis och Genesis har man delat upp WordPress i olika filer där varje fil får sin specifika funktion. Nu behöver det inte just vara själva funktionsfilen functions.php utan alla filer som bygger temats front- respektive back end. Vi ska dra nytta av detta men utan att skapa en massa mappar och filer utan vi nöjer oss med att göra en funktionsfil som stöd till temats egen funktionsfil. Den nya funktionsfilen plockar du sedan med dig för varje nytt tema genom att kalla på den med en speciell kod vi snart ska kika på. Jag måste dock uppmärksamma om att det är viktigt att ta reda på vilka funktioner temat redan har innan du inkluderar filen – vi vill inte ha dubbla kommandon om temat nu har stöd av samma funktioner som finns i din extrafil. Så kika noga innan vilka funktioner som finns.

Steg 1 – skapa custom_functions.php

Det här är inga konstigheter. Du öppnar ett tomt dokument som du sedan sparar som custom_functions.php. Vi ska senare lägga in ett par koder så vi får nytta av den. Men innan behöver vi arbeta lite med den vanliga funktionsfilen.

Steg 2 – infoga custom_functions.php

Börja med att öppna upp din funktions.php. Direkt efter inledande php-taggen så infogar du nedanstående kod:

/*---------------------------------------------*/
/* Start functions file
/*---------------------------------------------*/

// Set path to the theme specific custom_functions.php
require_once ($includes_path . 'custom_functions.php');

/*---------------------------------------------*/
/* End path to custom_functions.php
/*---------------------------------------------*/

Eftersom minsta fel i funktionsfilen genererar programmeringsbuggar i temat så lägger jag upp hur min functions.php ser ut – inklusive första php-taggen så inga missförstånd kan uppstå. Jag använder alltid kommentarer oavsett om det är i html, css, eller php så jag vet vad det är för funktioner, var de börjar och var de slutar. Man kan aldrig vara nog så tydlig!

<?php
/*---------------------------------------------*/
/* Start Functions file
/*---------------------------------------------*/

// Set path to the theme specific custom_functionsfile
require_once ($includes_path . 'custom_functions.php');
/*---------------------------------------------*/
/* End path to custom_functions.php
/*---------------------------------------------*/
if ( ! isset( $maincol_width ) )
	$maincol_width = 640;
...osv...

Vad betyder då detta?
Jo – när vi anger require_once så talar vi om att php ska kontrollera om filen custom_functions.php är inkluderad. Är den det så behöver den ju inte inkluderas igen och igen. require_once innebär således en check om att vår php är inkluderad en gång för alla. $includes_path . är söksträngen till filen custom_functions.php. Det ska vara ett blanksteg mellan strängen – punkten – och den inkluderande filen så ändra inte på det. När du har lagt in koden sparar du filen.

Lägga till funktioner i custom_functions.php

Växla till det tomma dokumentet. Nu ska vi lägga in några koder. Observera vad jag skrev i början av artikeln – har ditt tema redan stöd för dessa funktioner ska du inte lägga in dem i custom_functions.php – hoppa då över de funktioner som redan finns.

Vill du använda kortkoder i din sidebar? Eftersom dokumentet är tomt börjar vi med den inledande php-taggen, därefter fyller vi på med det vi vill ha. Lämna ingen tom radbrytning efter den sista php-taggen på sidan, det genererar garanterat en programmeringsbugg. Faktum är att man helt ska undvika radbrytningar mellan taggarna. Däremot går det utmärkt att ha radbrytning mellan varje avslutande funktion så länge dessa finns placerade mellan <?php och ?>. Vi ska strax kika på hur det kan se ut, nu ska vi börja med att lägga in nedanstående filter i custom_functions.php.

<?php 
add_filter('widget_text', 'do_shortcode'); // Makes it possible to add your shortcodes in widget
?>

Spara filen! När du skickar upp dina filer har du alltså möjlighet att använda shortcodes i din sidebar, vill du ändra eller ta bort koden öppnar du bara din custom_functions.php. Lätt som en plätt. Vi fyller på med ytterligare en kod. Vill du att sidan ska uppdatera casheminnet för din rss var fjärde timme? Då infogar vi den funktionen – och nu ska vi nyttja de php-taggar som redan finns genom att lägga in koden inom dessa. Det är ju dumt att skicka ett kommando flera gånger när man inte behöver det, eller hur. Kika noga på hur jag lägger till kommentarer och ändrar i koden!

<?php 
// Makes it possible to add your shortcodes in widget
add_filter('widget_text', 'do_shortcode'); 

//add filter to make the rss read cache clear every 4 hours
 add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 14400;' ) );
?>

Eftersom jag lägger in alla funktioner inom php-taggarna så kan jag göra en radbrytning mellan varje funktion. Därtill väljer jag att lägga in en kommentar så jag snabbt vet vad för typ av funktion det handlar om. Som sista funktion ska vi lägga till related posts shortcode.

<?php 
// Makes it possible to add your shortcodes in widget
add_filter('widget_text', 'do_shortcode'); 

//add filter to make the rss read cache clear every 4 hours
 add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 14400;' ) );

//Shortcode to display related posts (5)
function related_posts_shortcode( $atts ) {
	extract(shortcode_atts(array(
	    'limit' => '5',
	), $atts));

	global $wpdb, $post, $table_prefix;

	if ($post->ID) {
		$retval = '<ul>';
 		// Get tags
		$tags = wp_get_post_tags($post->ID);
		$tagsarray = array();
		foreach ($tags as $tag) {
			$tagsarray[] = $tag->term_id;
		}
		$tagslist = implode(',', $tagsarray);

		// Do the query
		$q = "SELECT p.*, count(tr.object_id) as count
			FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id  = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
				AND p.post_status = 'publish'
				AND p.post_date_gmt < NOW()
 			GROUP BY tr.object_id
			ORDER BY count DESC, p.post_date_gmt DESC
			LIMIT $limit;";

		$related = $wpdb->get_results($q);
 		if ( $related ) {
			foreach($related as $r) {
				$retval .= '<li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>';
			}
		} else {
			$retval .= '
	<li>No related posts found</li>';
		}
		$retval .= '</ul>';
		return $retval;
	}
	return;
}
add_shortcode('related_posts', 'related_posts_shortcode');
?>

Din shortcode som du sedan använder i posten är [related_posts]. Som du ser kan du även ställa in antal poster 'limit' => '5',

Summering

Gernom att använda en custom_functions.php som du enkelt plockar med dig genom att infoga require_once ($includes_path . 'custom_functions.php'); i temats ordinarie funktionsfil så öppnar det sig helt nya möjligheter. Du är inte längre lika låst till att ha samma typ av teman, utan alla funktioner som kräver modifiering av posterna, exempelvis olika former av kortkoder, kan du nu ta med dig och fortsätta använda tack vare denna extrafil. Vill du ta bort en specifik funktion om det nya temat redan stöder denna så öppnar du extrafilen och raderar funktionen. Lätt och behändigt. Glöm inte att radera eventuella radbrytningar efter den avslutande och sista php-taggen så du slipper en programmeringsbugg.

Lycka till!

Liknande poster:

2 Comments Add yours

  1. Hej! Grymm artikel, då jag jobbar med detta dagligen är det riktigt intressant med mer wordpress då det är mitt favorit CMS. Har du skrivit hela artikeln själv? Isåfall tänkte jag om det var okej om jag länkade till denna på sida för att mina kunder ska få en överblick också, hade varit snällt

    1. Lena says:

      Ja givetvis har jag skrivit artikeln själv. Det går bra att länka.

Leave a Reply

Your email address will not be published. Required fields are marked *