Voir les mises à jour ci-dessous. Je suis passé à la version 3.7.1 avec svn. Je l'ai fait d'abord sur mon hôte local pour m'assurer que tout va bien. Tout était, alors j'ai procédé à le faire sur le serveur. Cependant, sur le serveur, les avatars des utilisateurs ne s'affichent pas et tout le monde découvre l'homme mystérieux de Gravatar.
Voici le code que j'ai dans mon functions.php:
<?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 ); ?>
Lorsque je regarde la source de la page générée sur mon localhost pour ce qui précède, je reçois le code suivant:
<img src="http://localhost/[path]/wp-content/uploads/avatars/[a number]/[imagename.jpg]"
Sur le serveur, lorsque je visualise la source, je reçois le code suivant pour le même utilisateur:
<img src="http://gravatar.com/avatar/[alphanumeric]=http://[mywebsite.com]/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg[code]"
Je dois faire une erreur quelque part, mais pour ma vie, je ne peux pas le comprendre. La seule explication que je puisse donner est que Gravatar n'accepte pas les demandes de localhost et c'est pourquoi il fonctionne comme je le voudrais sur mon hôte local.
Alors, que dois-je faire pour que leurs avatars locaux apparaissent (ceux qu'ils ont eux-mêmes téléchargés)? Je devrais aussi ajouter que j'utilise le plugin BuddyPress (tant sur localhost que sur le serveur).
En dehors de cela, existe-t-il une technique permettant aux utilisateurs de comparer les fichiers du serveur avec ceux de la machine de développement? Quelque chose qui ressemble à vimdiff?
UPDATE: J'ai copié le répertoire localhost de manière récursive à l'aide de cp -r
dans un autre répertoire. J'ai ensuite resynchronisé ce répertoire avec le serveur distant, ce qui en fait un miroir du serveur. Ensuite, j'ai exécuté diff -NbBiwr /path/to/localhost /path/to/localhostCopyThatWasRsynced
et je n'ai reçu aucune différence majeure, à l'exception des éléments figurant dans les répertoires .svn
. Lorsque je visualise la version copiée dans un navigateur, les avatars locaux s'affichent. Cela commence vraiment à avoir aucun sens. J'ai également mis à jour la base de données SQL pour refléter celle du serveur distant et les avatars locaux s'affichent sur localhost mais pas sur le serveur distant.
UPDATE 2: Voici tout ce que j'ai tenté depuis la dernière mise à jour:
wp-debug
sur true. Aucune erreur de note.svn co
.Upload Failed! Error was: Unable to create directory wp-content/uploads/avatars/1407/avatars/1407. Is its parent directory writable by the server?
. Comme vous pouvez le voir, elle duplique le répertoire avatars et le sous-répertoire userid pour une raison quelconque. Cela se produit à la fois sur le serveur et sur l'hôte local. Cependant, Localhost affiche correctement les avatars.Il s'avère que quelque chose n'allait pas dans le dossier de téléchargement. Si quelqu'un a ce problème à l'avenir, voici ce qu'il faut faire.
chmod 777 uploads/
chmod 775 uploads/
C'était tout ce que c'était.
Idées de débogage:
Vous pouvez essayer de voir si cela a un effet:
add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );
Mais vous devriez vérifier les paramètres qui passent par le filtre bp_core_fetch_avatar
pour voir s’ils sont corrects (non testés):
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;
}
où vous devez modifier le chemin d'accès à votre fichier debug.log
inscriptible.
Le fichier devrait alors contenir des lignes comme celle-ci:
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: ???
J'ai mis à jour le code de débogage ci-dessus, pour prendre en compte que $params
est un tableau.
Quelques remarques générales:
Il est intéressant de regarder dans le fichier /bp-core/bp-core-avatars.php
.
L'image de l'avatar semble être écrasée via ce filtre:
add_filter( 'get_avatar', 'bp_core_fetch_avatar_filter', 10, 5 );
et dans le callback bp_core_fetch_avatar_filter()
vous avez cette ligne:
// Let BuddyPress handle the fetching of the avatar
$bp_avatar = bp_core_fetch_avatar( array( 'item_id' => $id, 'width' => $size, 'height' => $size, 'alt' => $alt ) );
et c’était à l’intérieur de cette fonction, j’ai trouvé le filtre bp_core_fetch_avatar
appliqué.
Donc, je pense que ces fonctions pourraient valoir la peine d’être déboguées ou peut-être pourriez-vous essayer de corriger les avatars via le filtre bp_core_fetch_avatar
ci-dessus?