Come visualizzare comment_form con uno shortcode rimuovendolo dalla posizione predefinita

5 feb 2015, 22:59:54
Visualizzazioni: 13.7K
Voti: 3

Sono già riuscito a far apparire il form dei commenti nell'area del contenuto del post con questo codice, che mi permette di usare lo shortcode [wpsites_comment_form]:

add_shortcode( 'wpsites_comment_form', 'wpsites_comment_form_shortcode' );
function wpsites_comment_form_shortcode() {
    // Avvia l'output buffering
    ob_start();
    // Mostra il form dei commenti
    comment_form();
    // Ottieni il contenuto del buffer
    $cform = ob_get_contents();
    // Pulisci e termina l'output buffering
    ob_end_clean();
    return $cform;
} 

Quello che mi serve è rimuovere il form dei commenti dalla parte inferiore del post (visualizzazione predefinita). Quando lo rimuovo dal pannello di amministrazione in Post - Modifica - Commenti - Non consentire, viene rimosso anche dalla posizione dove viene visualizzato tramite la funzione dello shortcode. Quindi come posso fare per visualizzarlo solo dove è posizionato lo shortcode?

0
Tutte le risposte alla domanda 1
8

Versione #1

Il seguente codice sembra funzionare per il tema Twenty Fifteen:

/**
 * Mostra il modulo dei commenti tramite shortcode sulle pagine singole
 * Rimuove il modulo dei commenti predefinito.
 * Nasconde il messaggio indesiderato "I commenti sono chiusi" con 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 );

dove consentiamo allo shortcode di visualizzare il modulo dei commenti solo sui post singoli che supportano i commenti.

Qui utilizziamo CSS per nascondere il messaggio indesiderato I commenti sono chiusi.

Versione #2

Ecco un altro approccio senza CSS:

/**
 * Mostra il modulo dei commenti tramite shortcode sulle pagine singole.
 * Rimuove il modulo dei commenti predefinito.
 * Nasconde il messaggio indesiderato "I commenti sono chiusi" tramite filtri.
 *
 * @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;
}
6 feb 2015 13:02:33
Commenti

La versione #1 è stata testata e funziona con il tema che sto utilizzando. Fantastico!

rodrigo nomada rodrigo nomada
11 feb 2015 12:56:39

Sono contento che abbia funzionato per te @rodrigonomada

birgire birgire
11 feb 2015 19:50:26

Se volessi visualizzare anche la lista dei commenti (comments_template) sopra il modulo, avrei bisogno di un'altra funzione shortcode per questo? È un approccio simile?

rodrigo nomada rodrigo nomada
18 feb 2015 19:45:42

Ho trovato qualcosa qui, ma non sono sicuro di sapere come applicarlo: http://lists.automattic.com/pipermail/wp-hackers/2011-April/038832.html

rodrigo nomada rodrigo nomada
18 feb 2015 19:51:34

Ho provato a imitare la "Versione #1" di birgire condivisa sopra nella risposta per visualizzare l'elenco dei commenti sopra il comment_form. Ha funzionato parzialmente. Visualizza i commenti anche nella posizione predefinita (in fondo).

Ho usato questo: add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' ) { if( is_singular() && post_type_supports( get_post_type(), 'comments' ) ) { ob_start(); comments_template(); return ob_get_clean(); } return ''; }, 10, 2 );

rodrigo nomada rodrigo nomada
18 feb 2015 20:12:46

Ho ripubblicato questa seconda domanda oltre questi commenti e forse ho trovato una soluzione, anche se potrebbe non essere il modo migliore. Qui: http://stackoverflow.com/questions/28593898/how-to-display-the-comments-template-with-a-shortcode-in-wordpress/28594128

rodrigo nomada rodrigo nomada
19 feb 2015 03:17:28

ok perfetto, non ho avuto tempo di verificarlo, cercherò di darci un'occhiata domani @rodrigonomada

birgire birgire
19 feb 2015 03:26:05

Sono riuscito ad ottenere il risultato che mi serviva ma in parte eliminando dal mio child-theme le parti che non riuscivo a rimuovere tramite codice. Ho rimosso la chiamata comments_template() da single.php e ho rimosso la chiamata comments_form() da comments.php (altrimenti sarebbe apparso dove uso lo shortcode per visualizzare l'elenco dei commenti) Mi chiedo se ci siano aspetti negativi nel fare così piuttosto che filtrarli tramite il file functions.php? @birgire

rodrigo nomada rodrigo nomada
20 feb 2015 01:28:03
Mostra i restanti 3 commenti