WordPress als CMS benötigt etwas Feintuning

WP_RecipesWordPress wird immer häufiger als CMS eingesetzt. Als Admin und Webmaster seines persönlichen Blogs, sollte man nicht übermäßig viele Plugins installieren, da diese meist viel Code schreiben und so die Webseite langsamer laden lassen.
Das wollen wir doch nicht.

Außerdem kann man mit den hier beschriebenen Codes/Hacks aus dem normalen WordPress Theme ein ganz spezielles und personalisiertes Theme erstellen.

Folgende Hacks sind eine persönliche Auswahl der besten Codes von WpRecipes.

1. Tags in einem Drop-Down Menü anzeigen lassen

In eurem Theme Ordner findet ihr eine .php Datei namens “funktions.php”. Falls euer WordPress Theme bis jetzt ohne ausgekommen ist, erstellt ihr eine.

In diese Datei kopiert ihr nun einfach folgenden Code:

<?php
function dropdown_tag_cloud( $args = '' ) {
    $defaults = array(
        'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
        'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
        'exclude' => '', 'include' => ''
    );
    $args = wp_parse_args( $args, $defaults );

    $tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags

    if ( empty($tags) )
        return;

    $return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
    if ( is_wp_error( $return ) )
        return false;
    else
        echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}

function dropdown_generate_tag_cloud( $tags, $args = '' ) {
    global $wp_rewrite;
    $defaults = array(
        'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
        'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
    );
    $args = wp_parse_args( $args, $defaults );
    extract($args);

    if ( !$tags )
        return;
    $counts = $tag_links = array();
    foreach ( (array) $tags as $tag ) {
        $counts[$tag->name] = $tag->count;
        $tag_links[$tag->name] = get_tag_link( $tag->term_id );
        if ( is_wp_error( $tag_links[$tag->name] ) )
            return $tag_links[$tag->name];
        $tag_ids[$tag->name] = $tag->term_id;
    }

    $min_count = min($counts);
    $spread = max($counts) - $min_count;
    if ( $spread < = 0 )
        $spread = 1;
    $font_spread = $largest - $smallest;
    if ( $font_spread <= 0 )
        $font_spread = 1;
    $font_step = $font_spread / $spread;

    // SQL cannot save you; this is a second (potentially different) sort on a subset of data.
    if ( 'name' == $orderby )
        uksort($counts, 'strnatcasecmp');
    else
        asort($counts);

    if ( 'DESC' == $order )
        $counts = array_reverse( $counts, true );

    $a = array();

    $rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';

    foreach ( $counts as $tag => $count ) {
        $tag_id = $tag_ids[$tag];
        $tag_link = clean_url($tag_links[$tag]);
        $tag = str_replace(' ', ' ', wp_specialchars( $tag ));
        $a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
    }

    switch ( $format ) :
    case 'array' :
        $return =& $a;
        break;
    case 'list' :
        $return = "<ul class='wp-tag-cloud'>\n\t<li>";
        $return .= join("</li>\n\t<li>", $a);
        $return .= "</li>\n</ul>\n";
        break;
    default :
        $return = join("\n", $a);
        break;
    endswitch;

    return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

Nun öffnet ihr die Datei in der das Drop-Down Menü erscheinen soll. Vielleicht in eurer Sidebar?

In die jeweilige Datei fügt ihr folgenden Code ein:

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
    <option value="#">Tags</option>
    <?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>

2. Deine neusten Notizen abrufen lassen

Folgenden Code vor den Loop einfügen. Dieser Code wird die letzten 5 Notizen aufrufen. Die Menge der abzurufenden Notizen kann durch die Zahl im Code bestimmt werden.

<?php
    $sticky = get_option('sticky_posts');
    rsort( $sticky );
    $sticky = array_slice( $sticky, 0, 5);
        query_posts( array( 'post__in' => $sticky, 'caller_get_posts' => 1 ) );
?>

3. Automatisch weiteren Inhalt in die Feeds integrieren

In euren Theme Ordner findet sich die “functions.php” Falls nicht erstellt ihr einfach eine.
In diese Datei fügt ihr folgenden Code ein.
Dieser wird automatisch alle weiteren Inhalte nach eurem Beitrag mit in den Feed einfügen.
Also etwas wie “ähnliche Artikel” oder “Informationen über den Autor”, oder eure AdSense Werbung, …

function insertFootNote($content) {
        if(!is_feed() && !is_home()) {
                $content.= "<h4>Enjoyed this article?</h4>";
                $content.= "<p>Subscribe to our <a href='#'>RSS feed</a></p>";
        }
        return $content;
}
add_filter ('the_content', 'insertFootNote');

4. Die meist kommentierten Artikel auflisten

Den folgenden Code einfach an der Stelle einfügen, wo ihr eure meist kommentierten Artikel anzeigen lassen wollt. Vielleicht in der Sidebar (sidebar.php)?
Um die Anzahl der gezeigten Artikel zu ändern, einfach die “5″ in Zeile drei gegen die gewünschte austauschen.

<h2>Meist kommentierte Artikel:</h2>
<ul>
<?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 5");
foreach ($result as $post) {
setup_postdata($post);
$postid = $post->ID;
$title = $post->post_title;
$commentcount = $post->comment_count;
if ($commentcount != 0) { ?>
    <li><a title="<?php echo $title ?>" href="<?php echo get_permalink($postid); ?>">
<?php echo $title ?></a> {<?php echo $commentcount ?>}</li>
<?php } } ?></ul>

5. Meist kommentierten Artikel eines ganzen Jahres anzeigen

Die meist kommentierten Artikel aus einem bestimmten Jahr anzeigen lassen.
Der Zeitabschnitt kann beliebig angepasst werden. Den Code einfach an der Stelle einfügen, wo ihr den Code angezeigt bekommen wollt.

<h2>Most commented posts from 2008</h2>
<ul>
<?php
$result = $wpdb->get_results("SELECT comment_count,ID,post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN '2008-01-01' AND '2008-12-31' ORDER BY comment_count DESC LIMIT 0 , 10");

foreach ($result as $topten) {
    $postid = $topten->ID;
    $title = $topten->post_title;
    $commentcount = $topten->comment_count;
    if ($commentcount != 0) {
    ?>
    <li><a href="<?php echo get_permalink($postid); ?>"><?php echo $title ?></a></li>
<?php }
}
?></ul>

6. Ähnliche Artikel basierend auf den Tags anzeigen

Dieser Code wird ähnliche Artikel basieren auf den Artikel Tags anzeigen lassen. Er muss in den Loop integriert werden.

<?php
//for use in the loop, list 5 post titles related to first tag on current post
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  echo 'Related Posts';
  $first_tag = $tags[0]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5,
    'caller_get_posts'=>1
   );
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>

<a title="Permanent Link to <?php the_title_attribute(); ?>" rel="bookmark" href="<?php the_permalink() ?>"><?php the_title(); ?></a>

      <?php
    endwhile;
  }
}
?>

7. Die Zahl der Suchergebnisse anzeigen

Öffnet die “search.php” und integriert folgenden Code:

<h2 class="pagetitle">Search Results for <?php /* Search Count */ $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' — '); echo $count . ' '; _e('articles'); wp_reset_query(); ?></h2>

8. Die Seitenzahl der Kommentare im “Title Tag” anzeigen

Die “header.php” öffnen und folgenden Code zwischen das “Title Tag” einfügen.

<?php if ( $cpage < 2 ) {}
else { echo (' - comment page '); echo ($cpage);}
?>

9. Die zukünftig veröffentlichten Artikel anzeigen

Um den Lesern einen kleinen Einblick über kommende Überschriften zu ermöglichen, kopiere folgenden Code und füge ihn an gewünschter Stelle ein.

Zukünftige Artikel:

 <?php query_posts('showposts=10&post_status=future'); ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?php the_title(); ?> <?php the_time('j. F Y'); ?>

 <?php endwhile; else: ?>

Keine zukünftigen Artikel gespeichert.

<?php endif; ?>

10. Artikel zufällig anordnen

Artikel zufällig anzuordnen hat zum Beispiel Vorteile um ältere Artikel nicht untergehen zu lassen.
Den Code einfach vor den Loop einfügen.

query_posts('orderby=rand');
//the Loop here...

11. Zählt die Wörter eines Artikels und zeigt sie an

Öffne “single.php” und integriere den Code wo dieser angezeigt werden soll.

<?php function count_words($str){
     $words = 0;
     $str = eregi_replace(" +", " ", $str);
     $array = explode(" ", $str);
     for($i=0;$i < count($array);$i++)
 {
         if (eregi("[0-9A-Za-zÀ-ÖØ-öø-ÿ]", $array[$i]))
             $words++;
     }
     return $words;
 }?>

 Wortzahl: <?php echo count_words($post->post_content); ?>

12. Wortzähler für WordPress

Hier noch eine weitere Möglichkeit einen Wortzähler in den Blog zu integrieren.
In eurer “functions.php” fügt ihr diesen Code hinzu:

<?php function wcount(){
    ob_start();
    the_content();
    $content = ob_get_clean();
    return sizeof(explode(" ", $content));
}?>

Um an gewünschter Stelle die gezählten Wörter eures Artikels anzuzeigen, kopiert in der jeweiligen Datei diesen Code:

<?php echo wcount(); ?>

13. Kategorien von der Suche ausschließen

In “search.php” eures Themes folgenden Code vor den Loop einfügen.
Dieser Code wird Kategorien mit den IDs 1,2,3 von der Suche ausschließen.
Natürlich nicht von der Google Suche, sondern der internen WordPress Suche auf eurem Blog.

<?php if( is_search() )  :
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("s=$s&paged=$paged&cat=-1,-2,-3");
endif; ?>

//the Loop here...

14. Bestimmte Kategorien aus dem RSS Feed ausschließen

Die “functions.php” eures Themes öffnen. Falls sie nicht existiert, dann erstellt eine.
Dieser Code schließt bestimmt Kategorien aus. Kopiert ihr einfach in die “functions.php”. Um eine bestimmte Kategorie auszuschließen benötigt ihr ihre ID.

<?php function myFilter($query) {
    if ($query->is_feed) {
        $query->set('cat','-5'); //Don't forget to change the category ID =^o^=
    }
return $query;
}

add_filter('pre_get_posts','myFilter');
?>

15. Die Zahl eurer Twitter Follower anzeigen lassen

Diesen Code einfach irgendwo in eurem WordPress Blog integrieren, er wird an der Stelle die Zahl eurer Follower anzeigen.
In der letzten Zeile des Codes müsst ihr noch die “YourUserID” durch eure ersetzen.

<?php function string_getInsertedString($long_string,$short_string,$is_html=false){
  if($short_string>=strlen($long_string))return false;
  $insertion_length=strlen($long_string)-strlen($short_string);
  for($i=0;$i<strlen ($short_string);++$i){
    if($long_string[$i]!=$short_string[$i])break;
  }
  $inserted_string=substr($long_string,$i,$insertion_length);
  if($is_html && $inserted_string[$insertion_length-1]=='<'){
    $inserted_string='<'.substr($inserted_string,0,$insertion_length-1);
  }
  return $inserted_string;
}

function DOMElement_getOuterHTML($document,$element){
  $html=$document->saveHTML();
  $element->parentNode->removeChild($element);
  $html2=$document->saveHTML();
  return string_getInsertedString($html,$html2,true);
}

function getFollowers($username){
  $x = file_get_contents("http://twitter.com/".$username);
  $doc = new DomDocument;
  @$doc->loadHTML($x);
  $ele = $doc->getElementById('follower_count');
  $innerHTML=preg_replace('/^< [^>]*>(.*)< [^>]*>$/',"\\1",DOMElement_getOuterHTML($doc,$ele));
  return $innerHTML;
}
?>

<?php echo getFollowers("YourUserID")." followers"; ?>
</strlen>

16. Den letzten Twitter Eintrag auf eurem Blog anzeigen

Einfach den Code an gewünschter Stelle einfügen. Vielleicht in der Sidebar.php?
Den “TwitterUsername” müsst ihr natürlich noch durch euren ersetzen.

<?php

$username = "TwitterUsername";

$prefix = "<h2>Mein letzter Tweet:";

$suffix = "";

$feed = "http://search.twitter.com/search.atom?q=from:" . $username . "&rpp=1";

function parse_feed($feed) {
    $stepOne = explode("<content type=\"html\">", $feed);
    $stepTwo = explode("</content>", $stepOne[1]);
    $tweet = $stepTwo[0];
    $tweet = str_replace("< ", "< ", $tweet);
    $tweet = str_replace(">", ">", $tweet);
    return $tweet;
}

$twitterFeed = file_get_contents($feed);
echo stripslashes($prefix) . parse_feed($twitterFeed) . stripslashes($suffix);
?>

17. Social Buttons im Blog einfügen

Facebook Button

<a href="http://www.facebook.com/sharer.php?u=<?php the_permalink();?>&t=<?php the_title(); ?>">Share on Facebook</a>

Digg it!

<a href="http://www.digg.com/submit?phase=2&url=<?php the_permalink();?>">Digg It</a>

Stumbleupon

<a href="http://www.stumbleupon.com/submit?url=<?php the_permalink(); ?>&title=<?php the_title(); ?>">Stumble upon it</a>

Zu Del.ici.ous hinzufügen

<a href="http://delicious.com/post?url=<?php the_permalink();?>&title=<?php the_title();?>">Add to delicious</a>

Technorati

<a href="http://technorati.com/faves?sub=addfavbtn&add=<?php the_permalink();?>">Share on technorati</a>

Twitter

<a href="http://twitter.com/home?status=Currently reading <?php the_permalink(); ?>">Tweet this</a>

18. Eine LogIn Box für den WordPress Blog

Wenn man WordPress als CMS benutzt und sich mehrere Benutzer anmelden wollen, ist es oft sehr sinnvoll eine LogIn Box zu erstellen.
Hier der Code für eine Login Box zum Beispiel in der Sidebar oder im Header, oder einfach auf einer extra Login Seite …

Den folgenden Code einfach kopieren und an der Stelle einfügen, wo eure Loginbox erscheinen soll.
Dann müsst ihr noch in der letzten Zeile eure URL hinzufügen.

<?php if (!(current_user_can('level_0'))){ ?>
<h2>Login</h2>
<form action="<?php echo get_option('home'); ?>/wp-login.php" method="post">
<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?/>" size="20" />
<input type="
password" name="pwd" id="pwd" size="20" />
<input type="
submit" name="submit" value="Send" class="button" />
    <p>
       <label for="
rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me</label>
       <input type="
hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?/>" />
    </p>
</form>
<a href="
<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
<?php } else { ?>
<h2>Logout</h2>
<a href="<?php echo wp_logout_url(urlencode($_SERVER['REQUEST_URI'])); ?>">logout</a><br />
<a href="http://XXX/wp-admin/">admin</a>
<?php }?>

P.S.:

Hmm, sind doch nur 18. Codes geworden, weil zwei von denen komisch angezeigt wurden.
Hier noch die Links zu den Codes die ich nicht einfügen konnte (Warum auch immer):

-> Den gesuchten Text von Suchmaschinen im Artikel hervorheben

-> Willkommensmeldung zu einem bestimmten Datum anzeigen

Wünsche viel Spaß beim Coden ;)

Related Posts Plugin for WordPress, Blogger...
ÜBER DEN AUTOR

Roman

PG Hey, willkommen auf meinem Blog! Ich bin 24 Jahre alt und studiere Fahrzeug und Flugzeugtechnik an der FH München. In meiner Freizeit betreibe ich diesen Blog und gehe gerne fotografieren. Um mehr über mich und diese Seite zu erfahren, oder Kontakt mit mir aufzunehmen, habe ich die "About-Seite" eingerichtet. Viele Grüße