Wordpress

Problem: Auf einer Kundenseite war auf den meisten Seiten im Footer des Themes die Übersetzung von Strings mittels WPML String translation und

1
_e('der Text der übersetzt wird', 'Sprachdomain')

in der richtigen Sprache sichtbar. Auf einigen wenigen Seiten war nur der deutsche String sichtbar, die Übersetzung in französisch funktionierte dort nicht. Die Tips aus den WPML-Foren halfen allesamt nicht, Stichwort „Look for strings while pages are rendered“ auf der String Translation Seite, bewirkte zwar das gewünschte Ergebnis, ist aber nur eine temporäre Lösung. Bei weiteren Recherchen fand ich heraus, dass das Problem nur auftrat, wenn das Plugin Contact Form 7 installiert ist.

Lösung:

Das Plugin Contact Form 7 Multilingual muss installiert und aktiviert sein, nur so wird der richtige String ausgegeben. Keine Ahnung warum ich damals diesen Plugin nicht verwendet habe, nach dem Aktivieren desselben funktioniert nun alles wie erwartet.

Beim Umzug zu einem neuen Hoster oder der Kopie einer Webseite kann das Umbenennen des Datenbank-Prefix einer WordPress Datenbank dazu führen, dass der Administrator nich mehr ins Backend einloggen kann.

Es reicht nicht in der Options-Tabelle den Wert zur neuen Url bei siteurl sowie home zu ändern, es müssen auch alle Werte in den Tabellen Options sowie Usermeta geändert werden, welchen den alten Prefix beinhalten.

Datenbank-Prefix

Es reicht nicht nur siteurl und home zu ändern

 

Datenbank-Prefix suchen

Dazu kann man in Phpmyadmin folgende Abfrage zum Suchen solcher Einträge erstellen:

1
SELECT * FROM 'neuerprefix_options' WHERE 'option_name' LIKE 'alterprefix_'

sowie

1
SELECT * FROM 'neuerprefix_usermeta' WHERE 'meta_key' LIKE 'alterprefix_'

Datenbank-Prefix ersetzen

Anschliessend die Einträge direkt oder mit der Suchen-Ersetzen Funktion auf den neuen Prefix ändern. Dann klappt es auch wieder mit dem Einloggen.

Gefunden bei endurtech.com

Nach einer Umstellung der URL auf eine Umlautdomain in WordPress zeigte der Browser

ERR_TOO_MANY_REDIRECTS (zu viele Weiterleitungen).

Die üblichen Fehlerbehebungen wie Cache leeren, Cookies löschen und Plugins deaktivieren half alles nichts.

Erst ein Post von PAS solutions half mir auf die Sprünge: Die Urls müssen punycodiert werden, also statt zB. sönicht.ch muss xn--snicht-wxa.ch in die Felder WordPress-Adresse und WordPress-Url unter Einstellungen eingetragen werden.

Manchmal möchte man eine Landingpage der eigentlichen Webseite vorschalten, damit Besucher nicht den Passwortschutz oder die Baustelle der Webseite sehen. Somit wird beim Aufruf der Seite direkt index.html aufgerufen, durch Anhängen von index.php an die URL kann die WordPress Seite angezeigt werden.

Eigentlich sehr einfach machbar in dem File .htaccess:

1
DirectoryIndex index.html index.php

ABER: WordPress ignoriert dies, darum im functions.php des Themes folgende Zeile einfügen:

1
remove_filter('template_redirect', 'redirect_canonical');

Anschliessend Browser-Cache löschen und neu laden.

Menü mit aufklappbarer Suche

Immer wieder benötigt: Ein Such-Icon am Ende der horizontalen Navigation, welches sich auf Klick öffnet/schliesst.

Bearbeitet werden 3 Dateien: functions.php, searchform.php (falls vorhanden, ansonsten neu anlegen) und style.css (oder das jeweilige Stylesheet).

functions.php

Fügt am Ende des Hauptmenüs einen zusätzlichen Menüpunkt mit der Suche ein.

1
2
3
4
5
6
7
8
9
function fb_add_search_box ( $items, $args ) {
 
       // only on primary menu (or your menu-name)
       if( 'main-nav' === $args -> theme_location )
             $items .= '<li class="menu-item menu-item-search">' . get_search_form( FALSE ) . '</li>';
 
       return $items;
 }
 add_filter( 'wp_nav_menu_items', 'fb_add_search_box', 10, 2 );

searchform.php

Angepasstes Suchfeld.

1
2
3
4
5
6
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
	<label>
	<input type="submit" class="search-submit button" value="<?php echo esc_attr_x( 'Search', 'yourtheme' ) ?>" />
		<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Suchen...', 'yourtheme' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'yourtheme' ) ?>" />
	</label>
</form>

style.css

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
.menu-item-search .search-field {
	background-color: transparent;
	background-image: url(../images/lupe.svg);
	background-position: 5px center;
	background-repeat: no-repeat;
	background-size: 24px 24px;
	border: none;
	cursor: pointer;
	height: 37px;
	margin: 3px 0;
	padding: 0 0 0 34px;
	position: relative;
	-webkit-transition: width 400ms ease, background 400ms ease;
	transition:         width 400ms ease, background 400ms ease;
	width: 0;
}
 
.menu-item-search .search-field:focus {
	background-color: #fff;
	border: 1px solid #32B561;
	cursor: text;
	outline: 0;
	width: 200px;
}
.search-form
.search-submit { 
display:none;
}

Zusammengestellt aus folgenden Quellen:

Ab und zu benötigen wir mehr als nur das Standard-RTE Feld im Backend von wordPress. Das Plugin Multiple Content Blocks ist eine einfache Möglichkeit mehrere Inhaltsblock pro Template zu erstellen.

An gewünschter Stelle wird lediglich

1
the_block(' Label des Blocks ');

eingefügt.

Wenn nach dem Einfügen der neue Block im Backend nicht gezeigt wird,  reicht es die entsprechende Seite einmal im Frontend aufzurufen. Dann erscheint der Block auch im Backend.