<?php
/*
Plugin Name: Meta Description T3
Plugin URI: http://www.bueltge.de/
Description: Benutzerdefiniertes Feld Description auslesen, Tutorial Teil 3
Version: 1.3
Author: Frank Bueltge
Author URI: http://www.bueltge.de/
Update Server: http://www.bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/


$fb_meta_field get_option('fb_meta_field');

if (
'insert' == $HTTP_POST_VARS['action'])
{
    
update_option("fb_meta_field",$HTTP_POST_VARS['fb_meta_field']);
}

// Innerhalb von the_loop reicht das
function fb_meta_description() {
  global 
$id$post_meta_cache$fb_meta_field// globale Variablen

  
if ( $keys get_post_custom_keys() ) {
    foreach ( 
$keys as $key ) {
      
$values array_map('trim'get_post_custom_values($key));
      
$value implode($values,', ');
      if ( 
$key == $fb_meta_field ) {
        echo 
"$value";
      }
    }
  }
// Ende Funktion fb_meta_description()

function fb_meta_description_option_page() {
?>

<!-- Start Optionen im Adminbereich (xhtml) -->
  <div class="wrap">
    <h2>WP Tutorial Optionen</h2>
    <form name="form1" method="post" action="<?=$location ?>">
      <input name="fb_meta_field" value="<?=get_option("fb_meta_field");?>" type="text" />
      <input type="submit" value="Speichern" />
      <input name="action" value="insert" type="hidden" />
    </form>
  </div>

<?php
// Ende Funktion fb_meta_description_option_page()

// ausserhalb von the_loop
function fb_meta_description_outside($field) {
    global 
$wpdb;
    
    if (empty(
$between)) $limit 1;
    if (
$order != 'ASC'$order 'DESC';
    
$aktuellesDatum current_time('mysql');

    
/** unsere SQL-Anweisung:
     SELECT meta_value FROM $wpdb->posts AS posts, $wpdb->postmeta AS postmeta 
     WHERE posts.ID = postmeta.post_id 
     AND postmeta.meta_key = '$field' 
     AND posts.post_date < '$aktuellesDatum' 
     ORDER BY posts.post_date $order 
     LIMIT $limit
    */
    
$sql  "SELECT "//waehlt eine bestimmte Spalte, mehrere Spalten oder abgeleitete Spaltenwerte
    
$sql .= "meta_value FROM $wpdb->posts AS posts, $wpdb->postmeta AS postmeta "//Tabelle _posts und _postmetadata
    
$sql .= "WHERE posts.ID = postmeta.post_id "//wenn ID in _posts und post_id in _postmeta gleich sind
    
$sql .= "AND postmeta.meta_key = '$field' "//waehlt bestimmte Zeilen - meta_key in _postmeta von Variable $field
    
$sql .= "AND posts.post_date < '$aktuellesDatum' "//kleiner als aktuelles Datum
    
$sql .= "ORDER BY posts.post_date $order LIMIT $limit"//sortiert die Ausgabe,sonst bekommen wir immer die erste
    
    
$results = array(); 
    
$values = array();
    
$results $wpdb->get_results($sql);
    if (!empty(
$results))
        foreach (
$results as $result) { $values[] = $result->meta_value; };
    return 
fb_meta_description_value($field$values);
}

function 
fb_meta_description_value($field$meta_values) {

    if (empty(
$between)) $meta_values array_slice($meta_values,0,1);
    if (!empty(
$meta_values))
        foreach (
$meta_values as $meta) {
            
$values[] = apply_filters('the_meta'$meta);
        }

    if (empty(
$values)) $value '';
    else {
        
$values array_map('trim'$values);

            switch (
$size sizeof($values)) {
                case 
1:
                    
$value $values[0];
                    break;
                case 
2:
                    
$value $values[0] . $values[1];
                    break;
                default:
                    
$value implode(array_slice($values,0,$size-1)) . $values[$size-1];
            }
    }
    return 
$value;
}

// Adminmenu Optionen erweitern
function fb_meta_description_add_menu() {
  
add_option("fb_meta_field","description"); // optionsfield in Tabelle TABLEPRÄFIX_options
  
add_options_page('WP Tutorial-Plugin''WP Tutorial'9__FILE__'fb_meta_description_option_page'); //optionenseite hinzufügen
}

// Registrieren der WordPress-Hooks
add_action('admin_menu''fb_meta_description_add_menu');
?>