J'ai une installation WordPress 3.5.1 sur mon WordPress Shack , avec le plugin Facebook 1.3.1 installé et le thème TwentyTwelve 1.1. J'ai les paramètres sur Facebook - zone de commentaires afin que je puisse afficher la boîte de commentaires sur les messages et les pages. Dans Paramètres - Lecture, j'ai coché une page statique en tant que page d'accueil, "Bienvenue". J'ai coché la case "Autoriser les commentaires" pour chaque page de mon site.
Cependant, la boîte de commentaires Facebook est affichée sur chaque page, à l'exception de la page d'accueil "Bienvenue".
C'est certainement un problème avec la page d'accueil, car si je sélectionne les "derniers messages" à afficher sur la page d'accueil, la zone de commentaires s'affiche sur la page d'accueil.
Comment puis-je faire en sorte que la zone de commentaires soit également affichée sur la page d'accueil?
J'ai bien sûr posté ceci sur les forums d'assistance WordPress pour Facebook, mais je ne reçois aucune réponse.
Le problème peut être résolu en remplaçant la ligne 319 dans facebook.php
par la suivante:
if (is_home()) {
De cette façon, la page de couverture n'est pas traitée comme une page home mais comme une page standard, pour laquelle les paramètres de fonctionnalité de Facebook peuvent être appliqués (et seront gérés correctement).
Voici une version non-hackish . Mettez ce qui suit dans votre functions.php
:
add_action('template_redirect', 'force_facebook_comments');
function force_facebook_comments() {
if (is_front_page()) {
$features = get_option('facebook_home_features');
$features['comments'] = true;
update_option('facebook_home_features', $features);
add_filter('comments_template', array('Facebook_Comments', 'comments_template'));
}
// If you want to handle the 'home' page differently, undo the above stuff
// elseif (is_home()) {
// $features = get_option('facebook_home_features');
// $features['comments'] = false;
// update_option('facebook_home_features', $features);
// remove_filter('comments_template', array('Facebook_Comments', 'comments_template'));
// }
}
Je n'ai pas le plugin pour tester cela, mais je regarde les lignes à bidouiller, comme indiqué par @tf:
if ( is_home() || is_front_page() ) {
$enabled_features = get_option( sprintf( $option_name, 'home' ) );
} else if ( is_archive() ) {
// all archives wrapped in one option
// is_post_type_archive || is_date || is_author || is_category || is_tag || is_tax
$enabled_features = get_option( sprintf( $option_name, 'archive' ) );
} else {
$post_type = get_post_type();
if ( $post_type )
$enabled_features = get_option( sprintf( $option_name, $post_type ) );
}
Je pense qu'il est possible de court-circuiter la troisième option -} else {
- en utilisant apply_filters( 'pre_option_' . $option, false );
.
Quelque chose comme:
foreach( array( 'post', 'page' ) as $pt )
add_filter( "pre_option_facebook_{$pt}_features", "callback" );
function callback()
{
// let the option work normally
if( !is_front_page() )
return false;
return get_option( 'facebook_home_features' );
}