web-dev-qa-db-fra.com

Créer une table à partir de shortcode en évitant wpautop pour chaque ligne

Je fais probablement tout faux, et il y aura une solution beaucoup plus simple. Essentiellement, j'essaie de créer un tableau des dates de tournée pouvant être édité par une personne disposant de peu de connaissances techniques, mais pouvant gérer des codes courts. Il y a aussi quelques fonctions personnalisées dans la table (en ce qui concerne l'affichage de la date et le fait d'avoir un lien de ticket qui expire) qui me donnent envie d'éviter un plugin de table maladroit.

Alors, voici le code que j'expérimente, cela fonctionne en dehors de l'introduction d'un
balise pour chaque nouvelle ligne de code abrégé distinct.

Je ne veux pas désactiver wpautop complètement, car il est largement utilisé sur le site Web et ailleurs sur la page sur laquelle ce tableau apparaîtra.

[tour_table tour_name="The Tour Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[/table]

L'analyse de la table est entièrement gérée dans functions.php par la fonction d'habillage tour_table () et par la fonction [tour_table_line] exécutée dans une fonction do_shortcode () (à partir de la fonction d'habillage).

Le problème fondamental est donc que chaque nouvelle ligne gagne un nouveau
balise , qui place un espace énorme au-dessus de la table.

Si quelqu'un a des solutions plus élégantes, ou peut m'aider à obtenir la fonctionnalité que je cherche, j'apprécierais beaucoup votre aide.

Si vous avez besoin de plus de détails, s'il vous plaît faites le moi savoir.

Modifier pour ajouter des fonctions (probablement un peu de code compliqué ici:

function tour_table($atts,$content = null){
    extract( shortcode_atts( array(
        'tour_name' => '',
        'anchor_table' => ''
    ), $atts ) );

    if($anchor_table!=""){
        $hid = "id=\"tourscrollto\"";
    }else{
        $hid = "";
    }

    $theoutput = "<h3 $hid style=\"text-align: left; font-weight: strong; font-size: 12pt; margin-top: 20px;\">";
    $theoutput .= $tour_name;
    $theoutput .= "</h3><table class=\"tourdates\" style=\"font-size: 10pt;\" width=\"100%\"><tbody>";
    $theoutput .= do_shortcode($content);
    $theoutput .= "</tbody></table>";
    return $theoutput;
}

function tour_table_line($atts){
    extract( shortcode_atts( array(
        'tour_date' => '',
        'ticket_link' => '',
        'venue' => 'The Venue'
    ), $atts ) );

    $date_original = $tour_date;
    $date_unix = strtotime($tour_date);

    $theoutput = "<tr><td>";
    $theoutput .= date('D',$date_unix);
    $theoutput .= "</td><td>";
    $theoutput .= date('j M',$date_unix);
    $theoutput .= "</td><td>";
    $theoutput .= $venue;
    $theoutput .= "</td><td>";
    //$ticketlink = ticketlinkexpire($date_original,"<a href=\"$ticket_link\" target=\"_blank\">Buy Tickets</a>","");
    //$theoutput .= $ticketlink;
    $theoutput .= "</td></tr>";

    return $theoutput;

}

add_shortcode( 'tour_table' , 'tour_table' );
add_shortcode( 'tour_table_line' , 'tour_table_line' );
3
Will

L'espace supplémentaire provient de wpautop(), qui insère <br /> à chaque saut de ligne. Vous devez les éliminer avant d'appeler do_shortcode().

De plus, utilisez add_filter( 'the_content', 'shortcode_unautop' );. D'après mon expérience, vous avez besoin des deux. Probablement un bug.

Voir mon plugin shortcode pour un exemple. Il a aussi des codes courts pour les tables.

De plus: les codes courts ne doivent jamais faire partie d'un thème, car vous vous engagez, vous ou votre client, à utiliser ce thème maintenant. Voir l’article de de Justin Tadlock .

1
fuxia

J'utilise ceci dans functions.php, puis je joins le code dans l'éditeur. Je ne veux pas d'autop'd avec <!-- noformat on --> et <!-- noformat off --> lignes.

   // <!-- noformat on --> and <!-- noformat off --> function

function newautop($text)
{
    $newtext = "";
    $pos = 0;

    $tags = array('<!-- noformat on -->', '<!-- noformat off -->');
    $status = 0;

    while (!(($newpos = strpos($text, $tags[$status], $pos)) === FALSE))
    {
        $sub = substr($text, $pos, $newpos-$pos);

        if ($status)
            $newtext .= $sub;
        else
            $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

        $pos = $newpos+strlen($tags[$status]);

        $status = $status?0:1;
    }

    $sub = substr($text, $pos, strlen($text)-$pos);

    if ($status)
        $newtext .= $sub;
    else
        $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

    //To remove the tags
    $newtext = str_replace($tags[0], "", $newtext);
    $newtext = str_replace($tags[1], "", $newtext);

    return $newtext;
}

function newtexturize($text)
{
    return $text;   
}

function new_convert_chars($text)
{
    return $text;   
}

remove_filter('the_content', 'wpautop');
add_filter('the_content', 'newautop');

remove_filter('the_content', 'wptexturize');
add_filter('the_content', 'newtexturize');

remove_filter('the_content', 'convert_chars');
add_filter('the_content', 'new_convert_chars');
1
markratledge

Avez-vous entendu parler de gigpress ? Cela vous donnerait la fonctionnalité que vous voulez dans une belle wordpress (entrée conviviale). Cela signifierait que vous auriez à jeter du code et à modifier votre thème, tout en vous faisant gagner beaucoup de temps à long terme.

0
Digitalchild