it-swarm.com.de

Lokale Avatare können nicht angezeigt werden

Siehe Updates unten. Ich habe mit svn auf 3.7.1 aktualisiert. Ich habe dies zuerst auf meinem lokalen Host gemacht, um sicherzustellen, dass alles in Ordnung ist. Alles war so, also habe ich es auf dem Server gemacht. Auf dem Server werden die Avatare der Benutzer jedoch nicht angezeigt und stattdessen erhält jeder Gravatars mysteriösen Mann.

Hier ist der Code, den ich in meiner functions.php habe:

<?php switch ( $comment->comment_type ) :
case '' :
?>
<p <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
<div id="comment-<?php comment_ID(); ?>">
<?php echo get_avatar( $comment, 40 ); ?>

Wenn ich den Quellcode der generierten Seite auf meinem localhost für das Obige betrachte, erhalte ich den folgenden Code:

<img src="http://localhost/[path]/wp-content/uploads/avatars/[a number]/[imagename.jpg]"

Auf dem Server erhalte ich beim Anzeigen der Quelle den folgenden Code für denselben Benutzer:

<img src="http://gravatar.com/avatar/[alphanumeric]=http://[mywebsite.com]/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg[code]"

Ich muss irgendwo einen Fehler machen, aber für mein Leben kann ich es nicht herausfinden. Die einzige Erklärung, die ich finden kann, ist, dass Gravatar keine Anfragen von localhost entgegennimmt und deshalb so arbeitet, wie ich es gerne auf meinem localhost hätte.

Was muss ich also tun, damit die lokalen Avatare angezeigt werden (die, die sie selbst hochgeladen haben)? Ich sollte auch hinzufügen, dass ich das BuddyPress-Plugin verwende (sowohl auf localhost als auch auf dem Server).

Gibt es außerdem eine Technik, mit der die Benutzer die Dateien auf dem Server mit denen auf dem Entwicklungscomputer vergleichen können? Etwas Ähnliches wie Vimdiff?

UPDATE: Ich habe das localhost-Verzeichnis rekursiv mit cp -r in ein anderes Verzeichnis kopiert. Dann habe ich dieses Verzeichnis mit dem Remote-Server synchronisiert, sodass es ein Spiegel des Servers ist. Dann habe ich diff -NbBiwr /path/to/localhost /path/to/localhostCopyThatWasRsynced ausgeführt und keine größeren Unterschiede erhalten, abgesehen von Dingen in den .svn-Verzeichnissen. Wenn ich die kopierte Version in einem Browser ansehe, werden die lokalen Avatare angezeigt. Das ergibt langsam überhaupt keinen Sinn mehr. Ich habe auch die SQL-Datenbank aktualisiert, um sie auf dem Remote-Server wiederzugeben, und die lokalen Avatare werden auf localhost angezeigt, jedoch nicht auf dem Remote-Server.

UPDATE 2: Hier sind alle Dinge, die ich seit dem letzten Update versucht habe:

  1. wp-debug auf true setzen. Keine nennenswerten Fehler.
  2. Entfernte das gesamte Verzeichnis, machte einen neuen svn co.
  3. Alle anderen Plugins außer BuddyPress deaktiviert.
  4. Verwendete das Standard-BuddyPress-Theme.
  5. Installierte Version 3.6.1 (die letzte gute Version, die ich verwendet habe).
  6. Überprüfte und überprüfte die Verzeichnisberechtigungen.
  7. Ich habe das Avatare-Verzeichnis entfernt, und wenn jemand versucht, einen Avatar hochzuladen, erstellt er das Avatare-Verzeichnis und das Unterverzeichnis userid, aber das Bild wird nicht hochgeladen. Das Unterverzeichnis bleibt leer. Dies ist der Fehler, der am Front-End zurückgegeben wird. Upload Failed! Error was: Unable to create directory wp-content/uploads/avatars/1407/avatars/1407. Is its parent directory writable by the server? Wie Sie sehen, dupliziert er aus irgendeinem Grund das Avatars-Verzeichnis und das Userid-Unterverzeichnis. Dies geschieht sowohl auf dem Server als auch auf localhost. Localhost zeigt jedoch Avatare korrekt an.
  8. Mit Birgires Vorschlägen unten gebastelt. Nichts.
1
thequerist

Es stellte sich heraus, dass mit dem Upload-Ordner etwas nicht stimmte. Wenn jemand dieses Problem in der Zukunft hat, ist dies das, was zu tun ist.

  1. BuddyPress deaktivieren.
  2. chmod 777 uploads/
  3. Installieren Sie BuddyPress neu
  4. chmod 775 uploads/

Das war alles was es war.

1
thequerist

Ideen debuggen:

Sie könnten versuchen, festzustellen, ob dies Auswirkungen hat:

add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );

Sie sollten jedoch die Parameter überprüfen, die den bp_core_fetch_avatar-Filter durchlaufen, um festzustellen, ob sie korrekt sind (nicht getestet):

add_filter( 'bp_core_fetch_avatar', 'my_bp_core_fetch_avatar', 99, 9 );

function my_bp_core_fetch_avatar( $html, $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir )
{
    // debug:
    $args = array( 
                    'html'              => $html,
                    'params'            => join( ', ', $params ),
                    'item_id'           => $item_id,
                    'avatar_dir'        => $avatar_dir,
                    'css_id'            => $css_id,
                    'html_width'        => $html_width,
                    'html_height'       => $html_height,
                    'avatar_folder_url' => $avatar_folder_url,
                    'avatar_folder_dir' => $avatar_folder_dir,
            );

   $debug = date_i18n( 'c' );

   foreach( $args as $key => $value )
   {
       $debug .= sprintf( ' | %s: %s ', $key, $value );
   } 

    error_log( $debug . PHP_EOL , 3, '/path/to/my/debug.log' ); 

    return $html;
}

hier müssen Sie den Pfad zu Ihrer beschreibbaren debug.log-Datei ändern.

Die Datei sollte dann folgende Zeilen enthalten:

2013-11-12T12:01:16+00:00 | html: ???  | params: ???  | item_id:  ??? | avatar_dir: ??? | css_id: ??? | html_width: ??? | html_height: ??? | avatar_folder_url: ??? | avatar_folder_dir: ???

Ich habe den obigen Debug-Code aktualisiert, um zu berücksichtigen, dass $params ein Array ist.

Einige allgemeine Bemerkungen:

Es ist interessant, in die Datei /bp-core/bp-core-avatars.php zu schauen.

Das Avatar-Bild scheint über diesen Filter überschrieben zu werden:

add_filter( 'get_avatar', 'bp_core_fetch_avatar_filter', 10, 5 );

und innerhalb der bp_core_fetch_avatar_filter() callback hast du diese zeile:

 // Let BuddyPress handle the fetching of the avatar
$bp_avatar = bp_core_fetch_avatar( array( 'item_id' => $id, 'width' => $size, 'height' => $size, 'alt' => $alt ) );

und es war in dieser Funktion, fand ich den angewendeten bp_core_fetch_avatar Filter.

Ich denke, diese Funktionen sind möglicherweise eine weitere Fehlersuche wert, oder Sie könnten versuchen, die Avatare über den obigen bp_core_fetch_avatar-Filter zu korrigieren.

2
birgire