web-dev-qa-db-fra.com

Comment afficher le commentaire_form avec un shortcode tout en le retirant de sa position par défaut?

J'ai déjà pu afficher le formulaire de commentaires dans la zone de contenu du message avec ce code, ce qui me permet d'utiliser le shortcode [wpsites_comment_form]:

add_shortcode( 'wpsites_comment_form', 'wpsites_comment_form_shortcode' );
function wpsites_comment_form_shortcode() {
    ob_start();
    comment_form();
    $cform = ob_get_contents();
    ob_end_clean();
    return $cform;
} 

Ce dont j'ai besoin, c'est de supprimer le formulaire de commentaires au bas de la publication (affichage par défaut). Lorsque je le supprime via le panneau d'administration dans Posts - Edition - Commentaires - Ne pas autoriser, il est également supprimé de l'emplacement où il s'est affiché via la fonction de shortcode. Alors, comment puis-je l'afficher uniquement à l'endroit où le shortcode est placé?

1
rodrigo nomada

Version 1

Ce qui suit semble fonctionner pour le thème Twenty Fifteen :

/**
 * Display the comment form via shortcode on singular pages
 * Remove the default comment form.
 * Hide the unwanted "Comments are closed" message with CSS.
 *
 * @see http://wordpress.stackexchange.com/a/177289/26350
 */

add_shortcode( 'wpse_comment_form', function( $atts = array(), $content = '' )
{
    if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
    {
        ob_start();
        comment_form();
        print(  '<style>.no-comments { display: none; }</style>' );
        add_filter( 'comments_open', '__return_false' );
        return ob_get_clean();
    }
    return '';
}, 10, 2 );

où nous autorisons uniquement le shortcode à afficher le formulaire de commentaire sur des publications singulières prenant en charge les commentaires.

Ici, nous utilisons CSS pour masquer les indésirables Les commentaires sont fermés message.

Version 2

Voici une autre approche sans CSS:

/**
 * Display the comment form via shortcode on singular pages.
 * Remove the default comment form.
 * Hide the unwanted "Comments are closed" message through filters.
 *
 * @see http://wordpress.stackexchange.com/a/177289/26350
 */

add_shortcode( 'wpse_comment_form', function( $atts = array(), $content = '' )
{
    if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
    {
        ob_start();
        comment_form();
        add_filter( 'comment_form_defaults', 'wpse_comment_form_defaults' );
        return ob_get_clean();
    }           
    return '';
}, 10, 2 );

function wpse_comment_form_defaults( $defaults )
{
    add_filter( 'comments_open', 'wpse_comments_open' );
    remove_filter( current_filter(), __FUNCTION__ );
    return $defaults;
}

function wpse_comments_open( $open )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return false;
}
1
birgire