09. Juli 2010 - 16:09 Uhr

Quick-Fix für WordPress-Berechtigungen in Version 2.9.x

Wenn man eine relativ alte WordPress-Version immer wieder aktualisiert hat, kommt es bei der Konvertierung zur nächsten Version scheinbar irgendwann zu einem Problem mit der Berechtigungsstufe für das Backend. Ich habe ein kleines Script geschrieben, mit dem die Berechtigungen neu gesetzt werden. Ob das bei der Version 3.x auch noch funktioniert kann ich aktuell noch nicht sagen.

WICHTIG: ZUERST EIN BACKUP DER DATENBANK MACHEN! Dann das untenstehende Script in eine neue PHP-Datei (z.B. “update-users.php”) kopieren und ins gleiche Verzeichnis wie die “wp-config.php” legen. Dann über den Browser aufrufen. Update der Datensätze in der Datenbanktabelle wp_usermeta überprüfen (absteigend sortieren nach “umeta_id”). Zum Abschluß die Datei wieder löschen. FERTIG.

Hier das Script:
——————————————————

<?php

// WordPress-Config-Datei importieren
// Import WordPress-Config-File

include ('wp-config.php');

// Verbindung zum Datenbank-Server aufbauen
// Connect to database

$cid=mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

// Array für Rollen
// Array for user-roles

$user_roles=array('administrator'=>'10', 'editor'=>'7', 'author'=>'2', 'contributor'=>'1');

// Bisherige Einträge für meta_key "wp_user_level" löschen
// Delete actual entries with meta_key "wp_user_level"

$result=mysql(DB_NAME, "DELETE FROM ".$table_prefix."usermeta WHERE meta_key LIKE 'wp_user_level' ");

// Für jeden Eintrag aus dem Rollen-Array
// For each entry of the user-roles array

while (list($key,$value)=each($user_roles)) {

  echo "$key | $value<br/>\n";

  // Alle User mit der entsprechenden Rolle einlesen
  // Get all users for the given user-role

  $result=mysql(DB_NAME, "SELECT * FROM ".$table_prefix."usermeta WHERE meta_key LIKE '".$table_prefix."capabilities' AND `meta_value` RLIKE '".$key."' ORDER BY user_id ASC");

  echo "SELECT * FROM ".$table_prefix."usermeta WHERE meta_key LIKE '".$table_prefix."capabilities' AND `meta_value` RLIKE '".$key."' ORDER BY user_id ASC<br/>\n";

  while ($daten = mysql_fetch_array($result, MYSQL_ASSOC)) {

    echo $daten[user_id]."<br/>\n";

    // und für jeden Eintrag die Berechtigung neu setzen
    // and set a new user-level for each entry

    $result2=mysql(DB_NAME, "INSERT INTO ".$table_prefix."usermeta VALUES ('','".$daten[user_id]."', 'wp_user_level', '".$value."')");

  } // END OF while ($daten = mysql_fetch_array($result, MYSQL_ASSOC))

} // END OF while (list($key,$value)=each($user_roles))

mysql_close($cid);

?>

——————————————————

UND? Hat es funktioniert? Ich würd mich über ein Feedback freuen.

Bookmarken und Empfehlen: Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • TwitThis
  • Facebook
  • MySpace
  • LinkedIn
  • Google Bookmarks
  • Technorati
  • StumbleUpon
  • MisterWong
  • Digg
  • Y!GG
  • email
blog comments powered by Disqus