Schlagwort-Archive: Wordpress

Zwei-Faktor-Authentifizierung für WordPress mit Two-Factor

Wer seinen Blog zusätzlich absichern möchte, sollte eine Zwei-Faktor-Authentifizierung mit seinem Smartphone in Betracht ziehen. Dabei wird nicht nur das Passwort abgefragt, sondern zusätzlich auch ein temporär und individuell generiert Code (eben der zweite Faktor) abgefragt. Dieser Code wird über die App „Google Authenticator“ erzeugt.

Anleitung

  1. Google Authenticator auf dem Smartphone installieren (Android oder Apple)
  2. Für WordPress das Plugin Two-Factor (https://de.wordpress.org/plugins/two-factor/) installieren.
  3. In WordPress aufrufen: „Benutzer -> Dein Profil“. Dort gibt es jetzt den Abschnitt „Two-Factor-Einstellungen“.
  4. Die Haken bei Aktiviert und Primär nach Wunsch setzen. Dann wie gewohnt den QR-Code scannen oder alternativ die App „Google Authenticator“ öffnen und den abgebildeten Key unter dem QR-Code händisch eingeben.
  5. Um die initiale Authentifizierung abzuschließen muss noch der in der App generierte sechstellige Zahlencode in das Feld „Authentifizierungscode“ eingegeben werden.

Fertig

Beim nächsten Login muss man in einem zweiten Schritt zusätzlich zum Passwort auch den temporären Authentifizierungs-Code eingeben.

Danke an Themecoder für den Hinweis auf das Plugin Two-Factor.

Alle Preise in Woocommerce ändern – auf die smarte Art

Wer schon einmal nach dem Schlüsselwort price in einem Datenbankdump von Woocommerce und WordPress gesucht hat, weil er seine Artikelpreise gerne auf einen Schlag ändern möchte, der wird einfach nur verzweifeln.

Es gibt allein in wp_post_meta 12 Möglichkeiten, Preise einzugeben. Und das ist noch nicht einmal alles.

Annahme: Wir wollen unsere Preise einer Inflation von 2 Prozent anpassen. Wie geht man vor?

Tabelle wp_postmeta

UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_regular_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_sale_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_regular_price_tmp' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_sale_price_tmp' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_price_tmp' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_min_variation_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_max_variation_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_min_variation_regular_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_max_variation_regular_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_min_variation_sale_price' AND meta_value != ''
UPDATE wp_postmeta SET meta_value = meta_value*1.02 WHERE meta_key = '_max_variation_sale_price' AND meta_value != ''

Tabelle wp_options

DELETE FROM wp_options WHERE (option_name LIKE '_transient_wc_var_prices_%' OR option_name LIKE '_transient_timeout_wc_var_prices_%')

Die letzte Zeile ist besonders wichtig, da Woocommerce  einen Transient-Cache nutzt, um Seiten schneller darstellen zu können. Indem man diesen Speicher auf einen Schlag löscht, wird er automatisch beim nächsten Aufruf eines Produktes neu generiert.

Eine simple API für WordPress, Teil 2

Wir kommen nun dazu, mit Hilfe unserer kleinen API einen WordPress-Artikel anzulegen.

Dazu müssen wir uns kurz mit den internen Funktionen beschäftigen, die WordPress für dieses Unterfangen zur Verfügung stellt.

Es ist zunächst die Funktion “wp_insert_post“.

wp_insert_post( array $postarr, bool $wp_error = false )

Mit ihrer Hilfe kann man Artikel (oder auch Seiten) anlegen und bearbeiten.

Es gibt viele Parameter. Wir betrachten zunächst die wichtigsten:

  • post_content – der Inhalt des Artikels
  • post_title – die Überschrift des Artikels
  • post_status – der Status des Artikels und

Stellen wir uns ein simples Array zusammen:

$postarr => array(
	'post_content' => '<p>Das ist ein <b>Test äöüß</b><br>Und noch eine Zeile</p>',
	'post_title' => 'Meine erste Überschrift',
	'post_status' => 'publish'
	)

Die Werte sollten sich von selbst erklären. Ich empfehle, wenn immer möglich beim Testen Umlaute zu nutzen, um später keine bösen Überraschungen zu erleben.

Ich setze “post_status” auf “publish“, da ich die Artikel sofort veröffentliche. Wer aber noch händisch nachkontrollieren oder erstmal sichergehen möchte, der setzt “post_status” auf “draft“.

Der neue Client

Der Client muss entsprechend angepasst werden.

<?php
$username='mueller';
$password='geheim';
$serverurl='http://domain.tld/maschine/';
$postdata_array=array(
	'function' => 'wp_insert_post', 
	'wp_post_array' => array(
		'post_content' => '<p>Das ist ein <b>Test äöüß</b><br>Und noch eine Zeile</p>',
		'post_title' => 'Meine erste Überschrift',
		'post_status' => 'publish'
		)
	);

$postdata = http_build_query(
	array(
		'postdata_string' => serialize($postdata_array)
	)
);

$auth = base64_encode($username.':'.$password);
$header = array("Authorization: Basic $auth",
	'Content-type: application/x-www-form-urlencoded'
	);

$opts = array('http' =>
	array(
		'method'  => 'POST',
		'header'  => $header,
		'content' => $postdata,
		'timeout' => 5000,  //5 Sekunden
	)
);

$context  = stream_context_create($opts);
$result = file_get_contents($serverurl, false, $context);

header('Content-Type: text/html; charset=utf-8');
print $result;
exit();
?>

Der Aufbau hat sich nicht sehr gegenüber Teil 1 verändert.

Der neue Server

Beim Server hat sich ein wenig mehr getan.

<?php
define('WP_USE_THEMES', false);
header('Content-Type: text/html; charset=utf-8');
if (count($_GET)>0) $postdata_array=unserialize(array_shift($_GET));
if (count($_POST)>0) $postdata_array=unserialize(array_shift($_POST));

require('../wp-load.php');

if ($postdata_array['function']=='wp_insert_post') {
	print wp_insert_post($postdata_array['wp_post_array']);
}
exit();

Wir müssen nun die Verbindung unseres Servers zu WordPress herstellen. Das passiert ganz einfach durch die Zeile:

require('../wp-load.php');

Die Datei “wp-load.php” die sich im Hauptverzeichnis des Blogs befindet, stellt automatisch alle Daten und Komponenten zur Verfügung, die wir für den Umgang mit WordPress benötigen.

Die Zeile:

define('WP_USE_THEMES', false);

Sorgt noch dafür, dass wir keine Komponenten laden, die lediglich für das Frontend des Blogs benötigt werden.

Der Rest dürfte sich von selbst erklären. Interessant ist Zeile 10, in der der eigentliche Befehl zum Anlegen ausgeführt wird und als Ergebnis die ID des neuen Artikels (WordPress-Jargon: Post) an den Client zurückgegeben wird. Diese ID ist wichtig und sollte irgendwo auf Seiten des Clients gespeichert werden, denn später werden wir sie benötigen, um Artikel zu korrigieren, zu löschen oder mit anderen Daten anzureichern. Die ID ist immer eindeutig und wird niemals doppelt vergeben.

Rufen wir den Client auf:

http://localhost/client.php

Das Ergebnis gibt uns die ID 4025 zurück.

Und schauen wir mal ins Backend des Blogs.

Voilà – Das ist unser Artikel.

Bis dahin war es noch nicht ganz so schwer. Bisher hatten wir nur die Pflicht, jetzt folgt die Kür. Im nächsten Teil werde ich zeigen, wie man dem Artikel auch ein Bild zuordnet.

WordPress plugin: Display SQL Stats

Displaying SQL result data as graphical chart on the dashboard with use of Google Chart Tools.

Showing chart in dashboard

Showing chart in dashboard

Settings

Settings

Download from WordPress repository.

Changelog

0.7 (2014/02/05)

  • adding/removing SQL statements more stylish

0.6.5 (2013/12/27)

  • fix bug on automatic detection of column types
  • better formatting of debug information

0.6.4 (2013/11/08)

  • only enrich header when on dashboard

0.6.3.1 (2013/10/17)

  • fixing small bug on min/max values when using more than one barcharts

0.6.3 (2013/10/15)

  • placing automatic max/min values on barcharts for better visualisation

0.6.2 (2013/09/14)

  • bug fix on emtpy results
  • switch charts on/off

0.6.1 (2013/09/14)

  • bug fix on wrong date display

0.6 (2013/09/14)

  • Check on WordPress 3.6.1
  • New chart types: Bar Chart
  • auto detecting of column types: date, number, string

0.5 (2013/09/10)

  • Use different chart types (Pie Chart, Scatter Chart, Bubble Chart)

0.4 (2013/08/21)

  • Use multiple SQL statments and charts

 0.3 (2013/08/17)

  • Tested with WP 3.6
  • New default demo SQL to demonstrate how to insert additional columns

0.2 (2013/04/25)

  • NEW: Notepad function to store different SQL statement, ideas or whatever

0.1 (2013/04/16)

  • first test version

WordPress plugin: 404-to-start send every page not found error to start page

WordPress 3.9.1 ok

“404-to-start” plugin will send every 404 page not found error directly to start page or any other custom page/site you like to overcome problems with search engines. With optional email alert. This will help you solve problems with external bad links which are not under your influence. Chose between 301 – Moved permanently (default) and 302 – Moved temporarily. screenshot-1

Download from WordPress repository.

Changelog

1.5.7.4 (07.06.2014)

1.5.7.3 (04.12.2013)

  • New search engines

1.5.7.2 (24.11.2013)

  • New search engines

1.5.7.1 (11.11.2013)

  • small bug fix where you could get too many mails

1.5.7 (11.11.2013)

  • Now even sends mail alerts if redirect is turned off

1.5.6 (11.11.2013)

  • New search engines

1.5.5 (10.11.2013)

  • New search engines

1.5.4 (28.09.2013)

  • New search engines

1.5.3 (26.09.2013)

  • New search engines

1.5.2 (23.07.2013)

  • New search engines

1.5.1 (13.05.2013)

  • Better search engine detection

1.5 (30.03.2013)

  • Bug fixing
  • Better search engine detection

1.4.3 (25.03.2013)

  • Translation

1.4.2 (24.03.2013)

  • Exclude logged in users from triggering email alert
  • Exclude search engine agents from triggering email alert

1.4.1 (18.03.2013)

  • Putting more information into alert mail

1.4 (17.03.2013) =

  • Email alert

1.3.2 (27.02.2013)

  • Replacing deprecated function

1.3.1 (10.01.2013)

1.3 (03.03.2011)

  • Set custom target Url (any page or site you like)

1.2 (24.02.2011)

  • tested with WordPress 3.1

1.1 (10.02.2010)

  • new settings menu
  • chose between 301 and 302 redirect
  • tested with WordPress 3.0.5

1.0 (02.01.2010)

  • first Version