Kategorie: wordpress

Ein Theme mit WordPress/ Jigoshop erstellen – Teil 4

4. November 2012 - jigoshop, wordpress

4. Einzelproduktdarstellung

Die wichtigste Datei ist hier … plugins/jigoshop/templates/single-product.php. Die Umstände sind ähnlich wie bei der Produktdarstellung in der  loop-shop.php.

Also wird auch single-product.php in das Theme in den Ordner jigoshop kopiert und modifiziert.

Anschließend sieht die Datei wie folgt aus, gleicht also eher der bekannten single.php


<?php get_header('shop'); ?>
<div ...>
<div ...>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); global $_product; $_product = new jigoshop_product( $post->ID ); ?>
<?php do_action('jigoshop_before_single_product', $post, $_product); ?>
<?php nf_single_product_display($post,$_product,$loop); ?>
<?php endwhile; ?>
</div>
</div>
<?php get_footer('shop'); ?>

Die  (hier viel aufwändigere) Umsetzung der grafischen Vorlage wird in der Funktion nf_single_product_display(..) in der functions.php durchgeführt.

Ein Theme mit WordPress/ Jigoshop erstellen – Teil 3

4. November 2012 - jigoshop, wordpress

3. Produktdarstellung

Verantwortlich für die Anzeige des Shops bzw. in meinem Fall der einzelnen Produkte in ihren Kategorien ist die Datei …plugins/jigoshop/templates/loop-shop.php

Sie wird über den entsprechenden Shortcode auf den WordPress-Produktseiten (z.B.

[ jigoshop_category slug="weissweine” ]

aufgerufen.

In loop-shop.php sind bereits einige action-hooks enthalten. Diese Hooks werden über

…. plugins/jigoshop/template_actions.php  und

…. plugins/jigoshop/template_functions.php  bedient.

Alles in allem ist das etwas unübersichtlich, weil template_actions.php und  template_functions.php selbst wieder neue action-hooks erzeugen und bedienen.

Der Demo-Shop im Theme twentyeleven lässt sich damit perfekt erzeugen, aber eine Änderung der Produktanzeige nur über die Hooks ist entsetzlich mühselig.

Ich habe daher auf all diese Hooks verzichtet, in meinem Theme einen Ordner jigoshop erstellt, die loop-shop.php dort hinein kopiert und modifiziert. Ähnlich wie WordPress mit den Childthemes verfährt, greift Jigoshop auf diese Datei zu, wenn loop-shop.php geladen werden soll.

Meine loop-shop.php sieht jetzt so aus:

global $columns, $per_page;
$nf_flag=is_shop('Weinshop');
if (!$nf_flag) do_action('jigoshop_before_shop_loop');

$loop = 0;
ob_start();

if (have_posts()) : while (have_posts()) : the_post(); $_product = new jigoshop_product( $post->ID ); $loop++;

nf_product_display($post,$_product,$loop,$nf_flag);

endwhile; endif;

if ($loop==0) :

if ($nf_flag) echo '';
else echo '<p class="info">'.__('No products found which match your selection.', 'jigoshop').'</p>';

else :

$found_posts = ob_get_clean();

if ($nf_flag) {echo $found_posts;}

else {echo '<div id="product_wrapper">' . $found_posts . '</div><div class="clear"></div>';}

endif;

In der Funktion nf_product_display (…), die in der functions.php steht, wird das Produkt so wie in der Werbeagentur-Vorlage grafisch vorgegeben aus den vielen Einzelteilen über get_post_meta( $post->ID, …. ) zusammen gebaut und direkt ausgegeben.

Wenn man genau hingesehen hat, sind zwei Loops notwendig für die Produktausgabe.

Über loop-shop.php werden alle in Frage kommenden Produkte gesammelt und formatiert und über die zweite Loop in dem WordPress-Seiten-Template dann in einem Satz ausgegeben.

Für einige Funktionen wie „Preis ausgeben“ und „in den Warenkorb legen“ habe ich mich noch an Methoden der wichtigen Produktklasse plugins/jigoshop/classes/ jigoshop_product.class.php, die in der Loop für jedes Produkt neu instanziiert wird, bedient ($_product->get_price_html() bzw. $_product->add_to_cart_url())

Man sollte noch daran denken, in der Nähe des Preises den Hinweis „inkl. MwSt. zzgl. Versand“ anzufügen.

Ein Theme mit WordPress/ Jigoshop erstellen – Teil 2

4. November 2012 - jigoshop, wordpress

2. Seiten

Für die Produktseiten  lege ich ein Template an

<?php
/*
Template Name: Weinshop_leer_ohne_Kommentare
*/
?>
<?php
get_header(); ?>
<div …
<div ….
<?php if (have_posts()) : while (have_posts()) : the_post();

the_content()

endwhile; endif; ?>
</div>
</div>
<?php get_footer(); ?>

Hier ist nur das notwendigste enthalten.

Für jedes Produkt (Rotweine, Weißweine, …) erzeuge ich dann eine WordPress-Seite, der dieses Template zugeordnet wird.

Auf der WordPress-Seite wird der Jigoshop-Shortcode für das entsprechende Produkt eingetragen.

Also für Weißweine:

[ jigoshop_category slug="weissweine" ]

Ein zweites Template bekommt die WordPress-Seite „Weinshop“. Hier werden aber keine Produkte (Ausnahme: das featured product – Bestseller, aber davon später mehr) angezeigt, sondern nur allgemeine Informationen. Deshalb enthält dieses Template auch keinen Loop.

<?php
/*
Template Name: Weinshop_ ohne_Kommentare
*/
?>
<?php
get_header(); ?>
<div …
<div ….
<?php do_action('jigoshop_before_shop_loop');?>
</div>
</div>
<?php get_footer(); ?>

Der action-hook ‚jigoshop_before_shop_loop‘ wird benötigt, um Jigoshop Meldungen anzuzeigen (z.B. „Produkt erfolgreich in den Warenkorb gelegt“)

Um die Sidebar auszublenden, die wir in diesem Theme nicht benötigen, muss man in die functions.php folgendes eintragen:

remove_action('jigoshop_sidebar', 'jigoshop_get_sidebar', 10);

Damit Jigoshop zufrieden ist, lege ich noch eine WordPress-seite “shop” an und weise in der Jigoshop Konfiguration, „Katalog&Preise“ dem Eingabefeld „Basisseite Produktkatalog“ diese Seite, die aber sonst im Weinshop überhaupt keine Rolle spielt, zu.

Das nächste Eingabefeld auf der gleichen Seite  „Weiter zum Shop“ bekommt die Startseite des Shops, die Seite „Weinshop“ zugewiesen.

Als letztes müssen WordPress Seiten für die einzelnen Shop- Funktionen (Benutzerkonto, Warenkorb usw. )angelegt werden. Auf jeder Seite muss der in der Jigoshop Konfiguration „Seiten“ angezeigte Shortcode eingetragen werden.

Damit hätten wir den 2. Teil erledigt

Ein Theme mit WordPress/ Jigoshop erstellen – Teil 1

2. November 2012 - jigoshop, wordpress

In den nächsten Artikeln möchte ich beschreiben, wie ein neues Theme für einen Jigoshop entsteht.

Der Shop ist online unter diesem Link

English Summary: This is a description of how to set up a new Jigosgop theme, not a description of the installation and configuration. The foundation of the theme is an ad agency design which requires extensive modifications of the simple twentyeleven demo shop layout.

Warum Jigoshop und nicht woocommerce?

Jigoshop und woocommerce sind (noch) funktional fast identisch. Das meiste, was hier über Jigoshop gesagt wird, trifft auch auf woocommerce zu. Den Ausschlag für Jigoshop gab, dass hier alle im Projekt benötigten Zahlungsmodule in der Basisversion bereits enthalten waren, und nicht dazu gekauft werden mussten.

Vorgehensweise:

Die Vorlage für das Theme ist ein Entwurf einer Werbeagentur. Das Produkt, hochwertiger Wein, soll in einem kleinen aber feinen Weinshop vom Winzer direkt vermarktet werden.

Teil 1: Backend

Mit dem Backend (Jigoshop/ Produkte) fangen wir an. Zum Anlegen der Produkte (die Jigoshop Produkte sind „custom posts“ und heißen schlicht „product“) brauchen wir die Möglichkeit, mehrere verschiedene Bilder zu hinterlegen und über 20 Produktzusatz-Angaben zu erfassen. Der Jigoshop bringt hier bereits einiges mit (z.B. die Preiseingabe), aber leider reicht es nicht aus.

Zum Glück ist „Wein“ ansonsten ein „einfaches“ Produkt, so dass wir uns nicht auch noch mit „gruppierten“ oder „variablen“ Produkten herumschlagen müssen.

Der Jigoshop benutzt als  Produktbild das quadratische WordPress Artikelbild. Das gefällt nicht so sehr.

Produktzusatz-Angaben kann man über die mitgelieferte Metabox „Produktdaten“ machen. Die Bedienung dieser Metabox ist gewöhnungsbedürftig und lässt auch keine komfortable Eingabe von zusätzlichen Bildern zu.

Wer damit leben kann, braucht jetzt nicht weiter zu lesen, d.h. vielleicht noch den Abschnitt „Zu guter Letzt“ ganz unten. Für die Bilder gibt es noch den Plan B auch weiter unten. Die zusätzlichen Daten aus der Metabox „Produktdaten“ werden in die postmeta Tabelle der WordPress Datenbank in komprimierter Form eingetragen.

Das ist ok für wenige Produkte. Für viele Produkte sollte man einen anderen Ansatz (=eigene Datenbanktabelle) oder einen anderen Shop wählen.

Weil ich nicht so gut mit der vorhandenen Metabox leben kann (der Kunde soll die Webseite später selbst pflegen können), wird das Backend (Produkt hinzufügen) um zwei Eingabefelder für Bilder und 20 Text- bzw. Textarea-Felder in zwei neuen Metaboxen erweitert. Dazu benutze ich das von Steve Taylor  beschriebene Verfahren. Er hat auch ein Plugin  für Entwickler geschrieben, das ich aber noch nicht ausgetestet habe.

Warum kein fix & fertiges Plugin wie Magic Boxes? Das ist Geschmacksache. Ich würde dies Plugin sofort einsetzen, wenn es von WordPress anstelle von Hello Dolly ausgeliefert würde. Im Falle meines Kundenprojekts verlasse ich mich auf die Sachen, die ich kenne, und weiß, wo ich hinfassen muss, wenn es mal nicht funktioniert. Der Jigoshop ist schon kompliziert genug.

Der Code, der die Metaboxen erzeugt, sieht etwas anders aus als bei Steve Tylor:

 add_meta_box('jigo_shop_prod','weitere Produktdaten', array( &$this, 'displayCustomFields1' ), 'product','normal','core');
 add_meta_box('jigo_shop_prod_detail','Weindetails', array( &$this, 'displayCustomFields2' ), 'product','normal','core');

Hier steht explizit der Posttyp ‚product‘ drin.

So sieht es fertig aus (Ausschnitt):

Von den Jigoshop Standard Feldern wird nur das Preisfeld benutzt.

Ganz oben kann man den Bild-Uploader sehen. Informationen dazu gibt es z.B. hier

Wenn man den so nicht hinbekommt (ihr könnt auch einen Kommentar schreiben, ich helfe gerne) gibt es den Plan B: ein einfaches Textfeld erzeugen, Bilder in die Mediathek laden, Bild aufrufen, den Link kopieren und in das Textfeld eintragen. Ist etwas aufwendiger, funktioniert aber auch.

Auch in diesem ohne Zweifel aufwändigerem Verfahren werden die Daten in die postmeta Tabelle von WordPress eingetragen, allerdings ohne serialisiert zu werden. Da wir aber nur wenige Produkte haben, ist das so in Ordnung.

Und wenn es mehr werden? Die Struktur der zusätzlichen Eingabefelder ermöglicht einen leichten Übergang auf Datenspeicherung in einer eigenen Tabelle.

Zu guter Letzt:

Im Backend werden Jigoshop-Kategorien für die einzelnen Produkte angelegt, in meinem Fall also Weißwein, Rotwein, Sekt usw

WordPress nonce auf Admin-Page mit Metaboxen

4. Juli 2012 - wordpress

Die Admin Pages von WordPress sind gespickt mit nonces . Also ein guter Grund, auch mal seine eigenen Metabox-Felder mit diesem Sicherheitsschloss zu versehen.

English Summary:

This artice describes the use of nonces on WordPress admin pages with multiple metaboxes

Nach einigem Herumprobieren habe ich für mich folgende funktionierende Lösung gewählt.

Zunächst mal werden alle Eingabefelder auf einer admin-page bereits von WordPress in einem einzigen Formular gebündelt, egal ob sie aus  einer oder aus  mehreren Metaboxen stammen.

Daher braucht man auch nur ein einziges nonce, das in irgend einer der Metaboxen stehen kann. Wenn diese Metabox  gelöscht wurde, liegt nach meiner Einschätzung ein grober Fehler in der Anwendung vor. Aber es entsteht kein Schaden, weil vor dem Schreiben der Daten der Check des nicht existierenden nonces negativ ausläuft und danach verhindert wird, dass Daten in die DB geschrieben werden.

Nonce Erstellung nach Codec in irgend einer Metabox

wp_nonce_field( 'name_of_my_action','name_of_nonce_field' );

Nonce Check nach Codec kurz vor dem Schreiben der Daten

if ( !empty($_POST) && check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' ) )

Alles andere hat bei mir nicht richtig funktioniert. Wenn man z.B. kein eigenes nonce setzt, tut dies WordPress. Dieses nonce konnte ich aber nicht abprüfen.

Das Setzen und der Check der nonces funktioniert auch bei geschlossenen Metaboxen.

Plugin: Facebook Posts in WordPress Blog intregrieren

19. März 2012 - wordpress

Wer zusätzlich zu seinem WordPress Blog Posts auf Facebook veröffentlicht und die doppelte Schreibarbeit scheut, findet hier ein WordPress Plugin im ShortCode Stil.

English Summary for „Plugin: Facebook Posts in WordPress Blog intregrieren“

For those who publish in Facebook and WordPress, here is a WordPress Plugin that integrates the most recent Facebook posts in your wordpress articles.

WordPress Streamreader mit  SimplePie

Der einfachste Weg zu den Facebook Posts führt über den WordPress Streamreader feed.php, der auf SimplePie aufgebaut ist.

Wir brauchen dazu die Newsfeed URL von Facebook:
http://www.facebook.com/feeds/page.php?id=… Facebook ID ….&format=atom10

Hier ist der Plugincode:

function facebook_posts_ausgeben_handler ($atts, $conten=null) {
include_once(ABSPATH . WPINC . '/feed.php');
extract(shortcode_atts(
array('fbid'   => '','nr_of_posts' => 1),$atts));
if ($fbid==false) return;
// Get a SimplePie feed object from the specified feed source.
$rss = fetch_feed("http://www.facebook.com/feeds/page.php?id=" . $fbid . "&format=atom10");
if (!is_wp_error( $rss ) ) : // Checks that the object is created correctly
// Figure out how many total items there are. Limited by: nr_of_posts
$maxitems = $rss->get_item_quantity($nr_of_posts);

// Build an array of all the items, starting with element 0 (first element).
$rss_items = $rss->get_items(0, $maxitems);
endif;
$fb_text='';
$fb_text .="<ul style='list-style-type:none;'>";
if ($maxitems == 0) $fb_text.= '<li>No items.</li>';
else {
// Loop through each feed item and display each item as a hyperlink.
foreach ( $rss_items as $item ) :
$fb_text .="<li>";
$ww0=esc_url( $item->get_permalink() );
$ww1=$item->get_date('j F Y | g:i a');
$ww2=esc_html( $item->get_title() );
$ww3= $item->get_description() ;
$fb_text .= "<h3><a href='".$ww0."'";
$fb_text .= "title='"."Posted ".$ww1."'>";
$fb_text .= $ww2."</a></h3>";
$fb_text .= "<p>".$ww3."</p>";
$fb_text .= "</li>";
endforeach;
$fb_text .="<ul>";
}
return $fb_text;
}
}
// Start this plugin once all other plugins are fully loaded
add_action( 'plugins_loaded', create_function( '', 'global $ShortcodeFacebook; $ShortcodeFacebook = new ShortcodeFacebook();' ) );

Gestartet wird das Plugin auf der Seite/ im Artikel so:
[ fb_posts fbid=123456789012345 nr_of_posts=5 ]
ohne die Leerzeichen nach bzw. vor den eckigen Klammern.

Die Anzahl der Posts, die angezeigt werden sollen, ist optional, default ist 1 Post.

Download shortcode_facebook

In der hier vorliegenden Form ist das Plugin nur dazu geeignet, Posts von vertrauenswürdigen Sites (vorzugesweise der eigenen) zu laden, da die Posttexte und Bilder „unentschärft“ 1:1 übernommen werden.

Und so sollte es dann aussehen:

  • No items.

WordPress Plugin tinymce-templates-lite

15. Februar 2012 - tinymce, wordpress

Hier ist ein kleines Plugin, das der WordPress Konfiguration von tinymce das Template-Plugin  hinzufügt und eure Styles im Dropdown Menü anzeigt.

tinymce-templates

English Summary for „WordPress Plugin tinymce-templates-lite“:

This is a small plugin that extends the WordPress configuration of tinymce with the template plugin and displays your templates in the template dropdown.

Ich brauchte Templates in tinymce und die verfügbaren Plugins waren mir zu umfangreich und zu unpraktisch.

Bei dieser Lösung muss man seine Templates (*.htm oder *.html) nur in den Templates -Ordner des Plugins zu legen und kann sie dann in tinymce verwenden.

Hier ist ein Ausschnitt aus den wichtigsten Codezeilen.

Der Rest des Codes wird benötigt, um die Templates aus dem Ordner auszulesen und im Dropdown darzustellen.

if ( !class_exists( 'tinymce_templates_lite' ) ) {
class tinymce_templates_lite {
function tinymce_templates_lite() {
add_action( 'admin_head',array(&$this, 'tinymce_templates_lite_init'));
}
function tinymce_templates_lite_init() {
if (get_user_option('rich_editing') == 'true') {
add_filter('mce_external_plugins',array(&$this,'add_template_plugin'));
add_filter('mce_buttons',array(&$this,'register_template_button'));
add_filter('tiny_mce_before_init',array(&$this,'nf_tiny_init'));
}
}
public function register_template_button($buttons = array()) {
array_push($buttons, 'seperator','template');
return $buttons;
}
public function add_template_plugin ($plugin_array) {
$plugin_array['template']=plugins_url().'/tinymce_templates_lite/mce_plugins/plugins/template/editor_plugin.js';
return $plugin_array;
}
public function nf_tiny_init ($initArray) {
$tlist=array();
$get_temps=$this->get_templates();
$ww=count($get_temps);
if ($ww > 0) {
for ($i=0; $i<$ww; $i++) {
$expl=explode('.',$get_temps[$i]);
$tlist[]=array('title'=> $expl[0],'src'=>plugins_url().'/tinymce_templates_lite/templates/'.$get_temps[$i],'description' => $expl[0]);
}
$initArray['template_templates']=json_encode($tlist);
}
return $initArray;
}

Download tinymce_templates_lite

tinymce_templates_lite

WordPress + Google Font Faces in Tinymce Editor

7. Februar 2012 - tinymce, wordpress

Zu WordPress als Content Mangement System gehört auch ein Editor, mit dem man Seiten so stylen kann, wie sie später erscheinen sollen.
Wie ich Hintergrundbilder oder Hintergrundfarben im Editor darstelle, habe ich hier schon beschrieben. Jetzt geht es um Google Fonts. Dazu gibt es auch zwei Plugins, um alles mal auszuprobieren.
English summary for „WordPress + Google Font Faces in Tinymce Editor“:
A Short description  how to implement Google Font Faces in your tinymce editor and and plugins for download

Google Font Faces

Ich möchte hier die Schrift ‚Nobile‘ im Editor (wie auch auf dieser Webseite) verwenden.
Ausserdem soll sie im auch noch unter ‚Schriftname‘ ausgewählt werden können.

Der Code des Plugins sieht so aus:
if ( !class_exists( 'tinymce_add_google_fonts' ) ) {
class tinymce_add_google_fonts {
function tinymce_add_google_fonts() {
add_action( 'admin_head',array(&$this, 'tinymce_add_google_fonts_init'));
}
function tinymce_add_google_fonts_init() {
if (get_user_option('rich_editing') == 'true') {
add_filter('tiny_mce_before_init',array(&$this,'nf_add_google_fonts'));
}
}
public function nf_add_google_fonts ($initArray) {
$nf_stylesheet=trailingslashit( get_stylesheet_directory_uri() ) . 'css/editor/editor-style.css';
if (array_key_exists('content_css', $initArray) && !empty($initArray['content_css'])) $initArray['content_css'].=",".$nf_stylesheet;
else $initArray['content_css'] = $nf_stylesheet;
$initArray['theme_advanced_fonts'] = 'Nobile=Nobile,sans-serif;Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
return $initArray;
}
}
$tinymce_add_google_fonts = new tinymce_add_google_fonts();
}

Mit $initArray[‚content_css‘]=… wird eine neue css Datei für den Editor angelegt. Da drin  könnt ihr alles so stylen, wie ihr es wünscht. Die Datei liegt im Plugin unter stylesheets. Man muss an dieser Stelle etwas aufpassen, dass man bereits mit anderen Plugins eingefügte css Dateien nicht überschreibt.

$initArray[‚theme_advanced_fonts‘]=…  enthält alle verfügbaren Schriften. Wenn ihr hier nur die Nobile angebt, ist auch nur noch Nobile im Dropdown vorhanden. Daher sollte man die Standardschriften des Editors hinten anfügen.
Hier ist ein Auszug aus der editor-style.css

@import url("http://fonts.googleapis.com/css?family=Nobile");
body, td, pre {color:#000; font-family:Nobile,sans-serif; font-size:75%; margin:8px;}

Nobile wird als Standard festgelegt und per Import von Google geladen. So funktioniert das auch bei verschiedenen Browsern, weil Google stets die passenden Formate schickt.

Hier ist das Plugin tinymce_add_google_fonts zum Download

tinymce_add_google_fonts

Und hier noch ein Plugin um das Google Font  Nobile im Frontend einzufügen

Nobile

WordPress Plugin für Amazon AWS im Shortcode-Stil

6. Februar 2012 - Amazon, wordpress

Wenn man keinen großen Webshop mit Amazon Produkten auf seiner Webseite eröffnen möchte, kann man sich hier ein Plugin downloaden, mit dem man einzelne Produkte anzeigen und mit dem Amazon AWS experimentieren kann.

English Summary for „WordPress Plugin für Amazon AWS im Shortcode-Stil“:

For your first steps with the Amazon AWS API and single product display on your website you may downlad here a tiny WordPress plugin in shortcode-style. The code is based on Ulrich Mierendorffs Code with slight modifications. It’s displayed below to make shure that there is no modification of your AssociateTag :-).

Man braucht

  1. eine Account bei Amazon
  2. einen AssociateTag für die Region (com,de, fr, …)
  3. eine public key
  4. einen secret Key

Für die Region de ist eine gute erste Adresse http://partnernet.amazon.de

<?php
/*
Plugin Name: shortcode_amazon Plugin
URI: http://www.it-in-a-box.com/
Description: Zeigt Amazon Produkte mit  mit shortcodes an
Author: Norbert Felgendreher Author
URI: http://www.it-in-a-box.com/
Version: 1.1 */

class ShortcodeAmazon {
// constructor:
function ShortcodeAmazon() {
if ( !function_exists('add_shortcode') ) return; // Register the shortcodes
add_shortcode('amazon', array(&$this, 'amazon_ausgeben_handler'));
}

function aws_signed_request($region, $params, $public_key, $private_key) {
/* Parameters: $region - the Amazon(r) region (ca,com,co.uk,de,fr,jp)
$params - an array of parameters, eg. array("Operation"="ItemLookup",
"ItemId"=>"B000X9FLKM", "ResponseGroup"=>"Small")
$public_key - your "Access Key ID"
$private_key - your "Secret Access Key"
*/

// some paramters
$method = "GET";
$host = "webservices.amazon.".$region;
$uri = "/onca/xml";

// additional parameters
$params["Service"] = "AWSECommerceService";
$params["AWSAccessKeyId"] = $public_key;
// GMT timestamp
$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
// API version
$params["Version"] = "2011-08-01";
// sort the parameters
ksort($params);
// create the canonicalized query
$canonicalized_query = array();
foreach ($params as $param=>$value)
{
$param = str_replace("%7E", "~", rawurlencode($param));
$value = str_replace("%7E", "~", rawurlencode($value));
$canonicalized_query[] = $param."=".$value;
}
$canonicalized_query = implode("&", $canonicalized_query);
// create the string to sign
$string_to_sign = $method."\n".$host."\n".$uri."\n".$canonicalized_query;
// calculate HMAC with SHA256 and base64-encoding
$signature = base64_encode(hash_hmac("sha256", $string_to_sign, $private_key, True));
// encode the signature for the request
$signature = str_replace("%7E", "~", rawurlencode($signature));
// create request
$request = "http://".$host.$uri."?".$canonicalized_query."&Signature=".$signature;
//return $request;
// do request
//$response = file_get_contents($request);
//***************************************************
$session = curl_init($request);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($session);
curl_close($session);
//***********************************
if ($response === False)
{
return False;
}
else
{
// parse XML
$pxml = simplexml_load_string($response);
if ($pxml === False)
{
return False; // no xml
}
else
{
return $pxml;
}
}
}

function amazon_ausgeben_handler ($atts, $content=null) {

extract(shortcode_atts(
array('asin'   => ''),$atts));
if ($asin==false) return;
$params=array("Operation"=>"ItemLookup", "ItemId"=>$asin, "ResponseGroup"=>"Large","AssociateTag"=>"your Amazon associate Tag");
$public_key='your public Amazon IDKey';
$private_key='your secret Amazon Key';
$region="de";
$xml_ret=$this->aws_signed_request($region, $params, $public_key, $private_key);
if ($xml_ret===False) return;
$myTitle = $xml_ret->Items->Item->ItemAttributes->Title;
$myImage = $xml_ret->Items->Item->MediumImage->URL;
return;
}
}
// Start this plugin once all other plugins are fully loaded
add_action( 'plugins_loaded', create_function( '', 'global $ShortcodeAmazon; $ShortcodeAmazon = new ShortcodeAmazon();' ) );
?>

AssociateTag, Keys und die Region werden in die Zeilen 96-99 eingetragen.
Aufgerufen wird das Plugin so: [ amazon asin=B0051QVF7A ] (ohne die Blancs hinter und vor den eckigen Klammern).Die asin ist die amazon standard identification number

Und so sollte es dann aussehen:

Hier kann man das Plugin downloaden Download Plugin shortcode_amazon

Hintergrundbilder in WordPress 3.3

27. Januar 2012 - wordpress

Hintergrundbilder und -farben funktionieren in WordPress 3.3  erst, wenn man im Header

den Tag <body> in <body <?php body_class(“); ?>> geändert hat.

Infos zu body_class gibt es hier.