Alle Artikel zum Thema “code”

Duplicate Content mit .htaccess verhindern

Vom 25.10.2011

Wie wir alle wissen… oder auch nicht ;-) mag Google keinen Duplicate Content. Was zur Hölle ist Duplicate Content? Eigentlich ist es meistens EIN Content, der aber unter verschiedenen Adressen gefunden werden kann.

So ist es bei vielen Providern so, dass eine Webseite sowohl unter ihrer Domäne www.domain.de als auch unter einer etwas kryptischeren Adresse wie z.B. http://webxyu.mein-provider.de zu erreichen ist.

Google erkennt das als den bösen Duplicate Content und fühlt sich damit hintergangen.  Es könnte ja tatsächlich pöse Puben geben, die glauben, wenn sie einen stichwortlastigen Inhalt nur oft genug an verschiedenen Stellen veröffentlichen, dann wird’s schon das Ranking hochtreiben.

Um also zu verhindern, dass Google auch die vom Provider (oft dem Kunden unbewusst) erstellte zweite Adresse ausliest bzw. mehrere Domänen auf eine umleitet…

Diesen Code in die .htaccess-Datei schreiben und gut ist!

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.meinedomain.de
RewriteRule ^(.*)$ http://www.meinedomain/$1 [L,R=301]

TinyMCE “stylesheets”-Dropdown nach eigenem Wunsch anpassen

Vom 24.10.2011

Für viele Kundenprojekte würde ich gerne dem Kunden ganz klar definierte Layout-Möglichkeiten bieten. Und NUR diese. Ich entferne in der Regel mittels Plugin “TinyMCE Advanced” alle nicht im Design vorgesehenen Formatierungsbuttons (wie “durchgestrichen”, “geordnete Liste” etc.) und möchte dann dem Kunden mittels “Stylesheets”-Dropdown die Möglichkeit geben ganz bestimmte Styles einfach anwenden zu können.

Das klappt seit einer Weile ja schon gut mittels editor-style.css, was aber daran noch stört ist, dass in der Styles-Liste “ungewollte” styles auftauchen, die ich dem Kunden eben nicht anbieten möchte.

Eine umfassende Beschreibung, um volle Kontrolle über die Styles zu erhalten habe ich bei einer Web-Kollegin alisothegeek.com gefunden. Damit erhält man die volle Kontrolle.

Custom Post Types und Taxonomien

Vom 10.08.2011

Manchmal mag es recht nützlich sein, einen Custom Post Type anzulegen, der dann auch noch verschiedene Eigenschaften hat.

Das geht recht komfortabel über ein Plugin namens Custom Post Type UI , das sowohl das Anlegen des Custom Post Types als auch der dazu gehörigen Taxonomien einfach macht. Wenn man aber sicher gehen möchte, dass auch ohne den Einsatz eines Plugins der Custom Post Type vorhanden ist, kann man den auch durch einen Eintrag in der functions.php seines Themes erstellen.

function post_type_distributors() {
	register_post_type(
                'distributoren',
                array(
                    'label' => __('Distributoren'),
                    'public' => true,
                    'show_ui' => true,
                    'supports' => array(
					'title',
					'editor'
                     )
                )
        );

       register_taxonomy( 'regionen', 'distributoren',
		array(
             'hierarchical' => true,
			 'label' => __('Regionen'),
			 'query_var' => 'regionen',
			 'rewrite' => array('slug' => 'regionen' )
		)
	);

	register_taxonomy( 'branchen', 'distributoren',
		array(
             'hierarchical' => true,
			 'label' => __('Branchen'),
			 'query_var' => 'branchen',
			 'rewrite' => array('slug' => 'branchen' )
		)
	);

}
add_action('init', 'post_type_distributors');

3 Level WordPress Menu

Vom 21.07.2011

Sicherlich könnte ein geübter Programmierer hier eine elegantere Lösung finden aber für meine Zwecke tut dieser Code genau, was er soll.

Ausgangsvoraussetzung: Ich habe eine WordPress-Seite mit drei Menüleveln.

Diese Grafik zeigt, welche Fälle es gibt und wie die Menüs sich verhalten sollen. In meinem Fall sollten die Menüs syntaktisch voneinander getrennt sein, also jedes Menülevel in einem eigenen “Code-Block”, der sich dann per CSS individuell stylen lässt.

CODE:

Nun zum Interessanten! Ein Teil des Codes muss nun in die Theme-Datei an die Stelle, an der das Menü auftauchen soll. Das könnte z.B. die header.php sein oder auch die sidebar.php.

<?php
	//Automatic Submenu
    global $wp_query;
 	//Wenn die Seite ein Grandparent ist, also keine Eltern hat...
    if( empty($wp_query->post->post_parent) )
      {
     		//Herausfinden ob es Kinder gibt...
			$ich=$wp_query->post->ID;
			$children = wp_list_pages("title_li=&child_of=$ich&echo=0");
				if ($children)
				{
					$parent1 = $wp_query->post->ID;
					//Menue ausgeben
					echo "<ul class='submenus'>";
					wp_list_pages("title_li=&child_of=$parent1&depth=1");
					echo "</ul>";
				}
     } 

    else
	//hat Eltern, ist also ein parent
     {
		$ich=$wp_query->post->ID;
		$children = wp_list_pages("title_li=&child_of=$ich&echo=0");
		//UND hat weitere Kinder
		if ($children)
		{
			$parent1 = $wp_query->post->post_parent;
			//MENUE 1 mit Geschwistern aktueller Seite (Kinder von $parent1)
			echo "<ul class='submenus'>";
			wp_list_pages("title_li=&child_of=$parent1&depth=1");
			echo "</ul>";

			$parent2 = $wp_query->post->ID;
			//Menue 2 mit Kindern aktueller Seite ($parent2)
			echo "<ul class='subsubmenu'>";
			wp_list_pages("title_li=&child_of=$parent2&depth=1");
			echo "</ul>";

		}
		else
		{
				if(get_grandpapa())
				{
					$parent1 = get_grandpapa();
					//MENUE 1 mit Geschwistern aktueller Seite (Kinder von $parent1)
					echo "<ul class='submenus'>";
					wp_list_pages("title_li=&child_of=$parent1&depth=1");
					echo "</ul>";

					$parent2 = $wp_query->post->post_parent;
					//Menue 2 mit Kindern aktueller Seite ($parent2)
					echo "<ul class='subsubmenu'>";
					wp_list_pages("title_li=&child_of=$parent2&depth=1");
					echo "</ul>";
				}
				else
				{
					$parent1 = $wp_query->post->post_parent;
					//NUR Menue 1 mit Geschwistern aktueller Seite (Kinder von $parent1)
					echo "<ul class='submenus'>";
					wp_list_pages("title_li=&child_of=$parent1&depth=1");
					echo "</ul>";
				}
		}
	}

	?>

Zusätzlich habe ich noch einen Schnipsel Code, den ich bei Stackxchange gefunden habe in die functions.php eingebaut.

//Three levels of hell... get ID of grandparent page
function get_grandpapa($page_id){
    $current_page = get_page( $page_id );
    if ($current_page->post_parent > 0){
        //has at least a parent
        $parent_page = get_page($current_page->post_parent);
        if ($parent_page->post_parent > 0){
            return $parent_page->post_parent;
        }else{
            return false;
        }
    }
    return false;
}

Dieser Schnipsel findet die ID der Großvaterseite heraus. So kann diese als Startpunkt für die Darstellung des Menüs verwendet werden.

Das war der ganze Zauber. So lässt sich WordPress als CMS nutzen.



Private Seiten im Menü anzeigen

Vom 29.05.2011

Problem:

Der Standard-Aufruf von Seitenmenüs in WordPress listet keine privaten Seiten. Die möchte ich aber gerne anzeigen lassen. Z. B bei Einrichtung eines privaten Benutzerbereiches.

Das Problem lässt sich z.B. mit einer Änderung der Core-Dateien regeln in der die Abfrage geändert wird. DAS will ich aber auf keinen Fall. Eine andere Lösung, die ich in einem Forum gefunden habe war eine Abfrage auf das Recht des Benutzers, private Seiten zu lesen und dann das manuelle Einfügen von Links. Auch das möchte ich nicht. Es soll doch bittschön auch komfortabel sein.

Diese Abfrage auf das Benutzerrecht hat mich aber auf eine Idee gebracht. Und hier ist meine Lösung:

1. In der Functions.php einen neuen Menübereich anlegen

function my_custom_menus() {
   register_nav_menus(
    array(
      'private-menu' => __( 'Private Seiten' )
	)
    );
}

2. Ein neues Menü mit den gewünschten Seiten erstellen

3. den folgenden Code in die Theme-Datei packen:

<?php // add private menu to your navigation menu
if(current_user_can('read_private_pages')) {
    wp_nav_menu( array( 'theme_location' => 'private-menu'));
 } ?>

Damit werden nach Anmeldung eines berechtigten Benutzers die Privaten Seiten angezeigt.

Posts aus einer Kategorie auf einer Seite listen

Vom 28.05.2011

Dieses Problem stellt sich mir immer und immer wieder. Ich möchte eine Seite namens “NEWS” haben, die sich nahtlos in mein WordPress CMS einfügt. Auf dieser Seite sollen nun meine News-Posts angezeigt werden.

Du Dummi, werden jetzt einige WordPress-Freaks sagen. Du kannst doch einfach die Kategorie anzeigen lassen. Seit den neuen Custom Menüs in WordPress kann man ja nun auch Kategorien einfach in das Menü einfügen und anzeigen lassen. Natürlich geht das. Es gibt auch einige Plugins, die ich schon probiert habe. Einen kleinen Beitrag dazu habe ich hier geschrieben Query Posts und Shortcode Any Widget benutzen um Posts auf einer Seite anzuzeigen. (<– das funktioniert) oder auch das Pages Posts Plugin sowie List Category Posts Plugin .

Ich habe zumindest einige davon ausprobiert und immer wieder das gleiche Problem gehabt (außer bei Query Posts und Shortcode Any): Es wurde zwar alles fein angezeigt, aber mein Menu-Highlighting ist zum Teufel gegangen. Ebenso haben eventuell eingerichtete Custom Sidebars nicht mehr funktioniert… Also … ein eigenes Template muss her. Eins, das die Seite als Seite belässt (also auch all ihre Eigenschaften) und trotzdem eine Liste der Posts anzeigt.

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <div class="entry">
          <?php the_content(); ?>
	</div><!--entry-->

      <p class="postmetadata"><?php edit_post_link('bearbeiten'); ?></p>
   <?php endwhile; ?>

 <?php
 //NEWS-Posts anzeigen
	$displayposts = new WP_Query();
	 //get posts from your news category
	 $displayposts->query('cat=1&showposts=3');
	while ($displayposts->have_posts()) : $displayposts->the_post();?>

         <div class="aktuell-beitrag">
		<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php edit_post_link('E', '', ''); ?>	<br />
		<div class="post-date"><?php the_time('d.m.Y') ?></div>

                <?php  the_excerpt(); ?>
	</div>

	<?php endwhile; ?>

  <?php else : ?>
    <h2 class="center">Nicht gefunden</h2>
	<div class="entry">
    <p class="center">Diese Seite wurde leider nicht gefunden. Bitte verwenden Sie die Navigation.</p>
	</div>
  <?php endif; ?>

Das Ganze muss natürlich in ein Page-Template und dann bei der gewünschten Seite ausgewählt werden.

WordPress Custom Post Types und individuelle Templates

Vom 24.05.2011

Seit der Version 2.9. gibt es ja bei WordPress die wunderbaren Custom Post Types. Diese verwende ich z.B. für Referenzen. Dazu kann man den Custom Post Type noch um individuelle Felder erweitern. Z.B. mit Plugins wie Easy Post Type oder More Fields. In meinem Fall würde ich die Referenzen gerne auf eine bestimmte Art und Weise anzeigen lassen und dazu eine ganz individuelle Formatierung verwenden.

Dazu habe ich bei WPTavern den passenden Code-Schnipsel gefunden.

function post_type_add_template() {
$post_type = get_query_var('post_type');
if (!empty($post_type)) {
locate_template(array("{$post_type}.php","index.php"), true);
  exit;
}
}
add_action('template_redirect', 'post_type_add_template'); 

Dieser Code muss in die functions.php eingefügt werden und sucht dann nach einer Theme-Datei, die denselben Namen hat wie der jeweilige Custom Post Type. Wenn ich also wie in meinem Fall den Type “Referenzen” habe, muss ich nur eine Theme-Datei mit Namen “referenzen.php” einfügen und schon ist der Käs gegessen.

Text innerhalb von WordPress Posts oder Seiten ersetzen

Vom 11.05.2011

Heute habe ich mal wieder aus einer Notwendigkeit heraus einen Code-Schnipsel gefunden, der mir sicherlich auch in Zukunft noch gute Dienste leisten wird.

Um einen beliebigen Text mit “Suchen und Ersetzen” – Funktionalität in allen WordPress-Seiten und –Posts zu ersetzen kann im PHPMyAdmin in das SQL-Befehlsfenster folgender Code verwendet werden:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'ALTER TEXT', 'NEUER TEXT')

Damit werden ALLE Vorkommnisse von “ALTER TEXT” durch “NEUER TEXT” ersetzt.

Zu beachten ist hier natürlich das Prefix. Wenn in der wp_config.php ein anderer Tabellenprefix festgelegt wurde, muss natürlich wp_posts durch meinprefix_posts ersetzt werden.

Ausgehende Links mit Google Analytics überwachen

Vom 04.05.2011

Um zu sehen, wie oft die Besucher auf einen externen Link auf der eigenen Seite klicken, muss man bei Google Analytics etwas tricksen. Standardmäßig wird nur die Aktivität innerhalb der eigenen Site aufgezeichnet. Wenn ich aber nun z.B. einen Link zu meinem Ebay-Shop oder einer Partnerseite habe, dessen Popularität ich im Auge behalten möchte muss ein wenig im Link-Code gebastelt werden.

Zuerst einmal muss natürlich im Head der betreffenden Seite (also zwischen <head> und </head> der Google Tracking Code eingefügt sein:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-xxxxxxxx']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

Damit nun Klicks auf den externen Link auch erfasst werden, muss der Link-Code folgendermaßen angepasst werden:

<a href="http://www.amazon.de/" target="_blank" onClick="_gaq.push(['_trackPageview', '/ausgehend/amazon']);">http://www.amazon.de/</a>

Bis die Ergebnisse in Analytics sichtbar sind, können einige Tage vergehen. Also nicht die Geduld verlieren und erst einmal abwarten.

Wenn alles geklappt hat, kann man per Filter alle ausgehenden Links auf einmal anzeigen lassen. Der einzige Wermutstropfen bei dieser Methode ist die Tatsache, dass ein Seitenaufruf simuliert wird, der zur Gesamtsumme der Aufrufe addiert wird. Will man nur einen Link überwachen ist das aber sicherlich übersichtlich.

So sieht es dann aus:

stat

Der Vollständigkeit halber sei erwähnt, dass es noch eine weitere Methode gibt, um diese Aufgabe zu erfüllen. Man kann das Ganze auch mit dem “Ereignistracking” erledigen. Infos zu Ereignistracking.

Wie ich das Internet liebe… CSS3 PIE!

Vom 06.08.2010

Vor kurzer Zeit habe ich durch einen Artikel beim Smashingmagazine inspiriert meine ersten Versuche in CSS3 gestartet (mein erstes CSS-3 Monster). Wunderschön, aufregend und erotisch, was diese neue Technik den Benutzern moderner Browser (not IE) bietet, welche Schönheit und welche Möglichkeiten sich offenbaren! Doch leider leider, wie so oft mit schönen, erotischen Dingen – können diese nicht mit dem Internet Explodierer angezeigt werden.

Die Lösung fand ich beim DesignReviver. CSS3Pie. Ein kleines Stück Code, das den IE befähigt, die Wunder der MODERNEN Internettechnik kennen zu lernen. Ob er das jedoch verdient hat bleibt eine Frage, die anderswo diskutiert werden muss ;-)