web-dev-qa-db-fra.com

Afficher les commentaires dans une popup

Je souhaite afficher les commentaires dans une fenêtre contextuelle pour la page avec id=22.

C'est l'ancre sur le clic de laquelle la popup s'ouvrira:

<a class="button button-small button-line-light comment-popup" 
    href="<?php echo get_stylesheet_directory_uri();?>/comments-detail.php">View All</a>

Si j'ai du code HTML dans comments-detail.php, la fenêtre contextuelle affiche le code HTML.

Mais lorsque j'essaie d'obtenir la liste des commentaires de la page id=22, en comments-detail.php, avec le code simple suivant:

<?php 
    $args = array(
        'post_id' => 22
    );
    $comments = get_comments( $args );
?>

alors j'obtiens l'erreur:

appel à la fonction non définie get_comments()

Qu'est-ce que je fais mal ou mon approche est-elle totalement fausse?

1
terminator

Vous réinventez la roue ici ;-)

Le problème

Vous contournez WordPress avec cette approche, ce qui explique le message d'erreur.

L'accès à n'importe quel fichier personnalisé, dans votre répertoire de thème, ne chargera pas le noyau WordPress automatiquement.

Déjà disponible

Ceci est déjà supporté par le noyau WordPress.

Vous devriez vérifier comments_popup_link() et comments_popup_script() .

En général, vous pouvez obtenir tous vos commentaires, pour un article donné, avec:

example.tld/?comments_popup=123

123 est un identifiant .

Vous pouvez remplacer le modèle de commentaire popup par défaut en plaçant votre propre version du fichier comments-popup.php dans le répertoire du thème actuel.

Celui par défaut se trouve dans /wp-includes/theme-compat/comments-popup.php.

Note sur WP 4.2.2 - Documentation en ligne incorrecte

En noyau, nous avons cette description :

  • Le chemin du template est filtrable via le hook 'comments_popup_template'.

mais ce n'est pas correct. Le template vient de:

$template = get_query_template( 'comments_popup', array( 'comments-popup.php' ) );

et dans get_query_template() nous avons le nettoyage suivant:

    $type = preg_replace( '|[^a-z0-9-]+|', '', $type );

où le type comments_popup est remplacé par commentspopup.

Le filtre correct est donc:

add_filter( 'commentspopup_template', function( $template )
{   
    return $template;
} );

Il semble que le type correct était censé être comments-popup et non pas comments_popup. Mais on peut alors se demander pourquoi le trait de soulignement est supprimé - consultez le ticket # 21213 pour en savoir plus à ce sujet.

J'ai déposé ici un ticket # 32989 , relatif à la documentation en ligne.

2
birgire