Dienstag, 2. August 2011

Wordpress - post_title automatisch aus Custom Fields generieren lassen

Nutzt man zum Beispiel einen Wordpress Blog um zum Beispiel Produkte oder Ähnliches, was in großer Anzahl vorhanden sein soll und nutzt man den Artikel mit schmucken Custom Fields um den Artikel so zu pimpen, dann kann es manchmal sein, dass es besser wäre den Artikel Titel durch die Custom Fields generieren zu lassen um eine bestimmte Einheitlichkeit zu besitzen.

Bsp:
wordpress.de/land/XY_1-spracheXY_1-nrXY_1
wordpress.de/land/XY_2-spracheXY_2-nrXY_2
wordpress.de/land/XY_3-spracheXY_3-nrXY_3

Das händlisch und tausend oder Mehre Male zu machen ist fast absurd. Also habe ich mir mal einen Ansatz ausgedacht. Der ist bestimmt ausbaufähig, was meint Ihr?

In der Datei post.php findet Ihr die Funktionen die sich Rund um den Post beschäftigen. Bei Zeile 2300 (WP Version 3.0.5) findet ihr in dieser Datei die Update Funktion. Sucht einfach nach: if .... ($update) { ...

In der Schleife füght ihr in den TRUE Bereich (erste Bereich hinter der IF Bedingung) folgendes ein: $data['post-title_]=$meta_value;

Vor if ($update) lasst ihr euch den Meta Value ermitteln über:

$meta_values_land = get_post_meta($post_ID, land, true);
$meta_value=$meta_values_land;

Jetzt könnt Ihr Euer Post erstellen und den Titel leer lassen. Dann speichern oder auch publizieren klicken. Danach noch ein Mal publizieren drücken und dann seht ihr den Meta-Value Namen als Post_Title . Nachteil ist, dass er ganz viele Inherit Einträge in der SQL Datenbank hinterlässt. Ab und an mal damit säubern:
DELETE FROM wp_posts WHERE post_status='inherit'


Randbemerkung: Was bedeutet sanitize_title? Das findet man auch ungefähr dort. Hier wird der Title in einen Namen verändert, den man dann in rewrite Urls benutzen kann. Also aus: " Merkel ist blöd"  wird " merkel-ist-blod".

Montag, 1. August 2011

Wordpress - Paging bei custom Post Types

Das normale blättern ( Paging ) von Artikeln auf der Seite ist bei Wordpress eine vordefinierte Funktion. Probleme entstehen nur wenn man eigene Post Types benutzt. Dann werden eventuell die letzten 10 Artikel angezeigt, aber man kann nicht blättern oder das Blättern bringt keine weitere und noch älterenen Artikel zum vorschein sondern lädt ständig die selben letzten 10 Artikel.


Lege einen eigenen Loop an. Zum Beispiel du hast eine Custom Post Type names News. Dann lege ein WP (Wordpress) Loop namens loop-news.php an. Dann schreibe in deiner news-page folgendes:

        <div id="container">
            <div id="content" role="main">
<?php
$type = 'news';
$args=array(
  'post_type' => $type,
  'post_status' => 'publish',
  'paged' => $paged,
  'posts_per_page' => 10,
  'caller_get_posts'=> 1
);

$wp_query = new WP_Query($args);
?>

<?php

 get_template_part( 'loop', 'news' );?>
            </div><!-- #content -->
            <?php get_sidebar(); ?>
        </div><!-- #container -->
<?php get_footer(); ?>

in deinem loop kannst du die ausgabe noch anpassen. wenn du kein plan hast wie das geht, nutze die hier vorgesehende kommentarfunktion um deine Frage auf die Allgemeinheit loszulassen ;)

http://codex.wordpress.org/Pages