Cum să afișezi comment_form cu un shortcode și să-l elimini din poziția implicită?

5 feb. 2015, 22:59:54
Vizualizări: 13.7K
Voturi: 3

Am reușit deja să afișez formularul de comentarii în zona de conținut a postării folosind acest cod, care îmi permite să utilizez shortcode-ul [wpsites_comment_form]:

add_shortcode( 'wpsites_comment_form', 'wpsites_comment_form_shortcode' );
function wpsites_comment_form_shortcode() {
    ob_start(); // Pornim bufferizarea output-ului
    comment_form(); // Afișăm formularul de comentarii
    $cform = ob_get_contents(); // Obținem conținutul bufferizat
    ob_end_clean(); // Oprim bufferizarea și curățăm
    return $cform; // Returnăm formularul
}

Ce am nevoie acum este să elimin formularul de comentarii de la partea de jos a postării (afișarea implicită). Când îl elimin prin panoul de administrare în Postări - Editare - Comentarii - Nu permite, acesta este eliminat și din locația unde este afișat prin funcția shortcode. Deci cum pot face să apară doar acolo unde este plasat shortcode-ul?

0
Toate răspunsurile la întrebare 1
8

Versiunea #1

Următoarea soluție pare să funcționeze pentru tema Twenty Fifteen:

/**
 * Afișează formularul de comentarii prin shortcode pe paginile singular
 * Elimină formularul implicit de comentarii.
 * Ascunde mesajul nedorit "Comentariile sunt închise" cu 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 );

unde permitem ca shortcode-ul să afișeze formularul de comentarii doar pe articolele singular care acceptă comentarii.

Aici folosim CSS pentru a ascunde mesajul nedorit Comentariile sunt închise.

Versiunea #2

Iată o altă abordare fără CSS:

/**
 * Afișează formularul de comentarii prin shortcode pe paginile singular.
 * Elimină formularul implicit de comentarii.
 * Ascunde mesajul nedorit "Comentariile sunt închise" prin filtre.
 *
 * @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
Comentarii

Versiunea #1 testată și funcționează cu tema pe care o folosesc. Grozav!

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

Mă bucur să aud că a funcționat pentru tine @rodrigonomada

birgire birgire
11 feb. 2015 19:50:26

Dacă vreau să afișez și lista de comentarii (comments_template) deasupra formularului, voi avea nevoie de o altă funcție shortcode pentru asta? Este o abordare similară?

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

Am găsit ceva aici, dar nu sunt sigur că știu cum să o aplic: http://lists.automattic.com/pipermail/wp-hackers/2011-April/038832.html

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

Am încercat să reproduc "Versiunea #1" a lui birgire, menționată mai sus în răspuns, pentru a afișa lista de comentarii deasupra formularului comment_form. A funcționat parțial. Afișează comentariile și în locația implicită (jos).

Am folosit asta: 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

Am repostat această a doua întrebare în afara acestor comentarii și poate am găsit o soluție, deși poate nu este cea mai bună metodă. Aici: 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 super, nu am avut timp să verific, voi încerca să arunc o privire mâine @rodrigonomada

birgire birgire
19 feb. 2015 03:26:05

Am reușit să ajung la rezultatul de care aveam nevoie, dar parțial prin ștergerea din child-theme a părților pe care nu le-am putut elimina prin cod. Am eliminat apelul comments_template() din single.php și am eliminat apelul comments_form() din comments.php (altfel ar fi apărut acolo unde folosesc shortcode-ul pentru a afișa lista de Comentarii) Mă întreb dacă există aspecte negative în a face asta în acest fel în loc să le filtrez prin fișierul functions.php? @birgire

rodrigo nomada rodrigo nomada
20 feb. 2015 01:28:03
Arată celelalte 3 comentarii