it-swarm.com.de

Erstellen einer Tabelle aus einem Shortcode, wobei wpautop für jede Zeile vermieden wird

Ich mache das wahrscheinlich alles falsch und es wird eine viel einfachere Lösung geben. Grundsätzlich versuche ich, eine Tabelle mit Tourdaten zu erstellen, die von Personen mit geringen technischen Kenntnissen bearbeitet werden kann, die jedoch mit Shortcodes umgehen können. Es gibt auch einige benutzerdefinierte Funktionen in der Tabelle (in Bezug auf die Anzeige des Datums und das Vorhandensein eines auslaufenden Ticketlinks), die mich dazu bringen, ein klobiges Tabellen-Plugin zu vermeiden.

Hier ist also der Code, mit dem ich experimentiere, der funktioniert, abgesehen von der Einführung von a
Tag für jede neue Zeile und jeden separaten Funktionscode.

Ich möchte wpautop nicht vollständig deaktivieren, da es auf der Website und auf der Seite, auf der diese Tabelle angezeigt wird, weit verbreitet ist.

[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]

Das Parsen der Tabelle wird in functions.php von der Wrapping-Funktion tour_table () und der Funktion [tour_table_line] ausgeführt, die innerhalb einer do_shortcode () -Funktion (von der Wrapping-Funktion) ausgeführt wird.

Das Grundproblem ist also, dass sich jede neue Zeile eine neue verdient
-Tag, das ein großes Leerzeichen über dem Tisch platziert.

Wenn jemand elegantere Lösungen hat oder mir helfen kann, die gesuchte Funktionalität zu finden, wäre ich für Ihre Hilfe sehr dankbar.

Wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen.

Bearbeiten, um Funktionen hinzuzufügen (wahrscheinlich ziemlich viel verschlungenen Code darin:

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

Der zusätzliche Speicherplatz ergibt sich aus wpautop(), das bei jedem Zeilenumbruch <br /> einfügt. Sie müssen diese entfernen, bevor Sie do_shortcode() aufrufen.

Verwenden Sie zusätzlich add_filter( 'the_content', 'shortcode_unautop' );. Nach meiner Erfahrung brauchen Sie beides. Wahrscheinlich ein Bug.

Ein Beispiel finden Sie in meinem Shortcode-Plugin . Es gibt auch Shortcodes für Tabellen.

Nebenbei: Shortcodes sollten niemals Teil eines Themas sein, da Sie sich oder Ihren Kunden jetzt dazu verleiten, dieses Thema zu verwenden. Siehe Justin Tadlocks Artikel .

1
fuxia

Ich benutze dies in functions.php und setze dann den Code in den Editor, den ich nicht automatisch mit <!-- noformat on -->- und <!-- noformat off -->-Zeilen kopieren möchte.

   // <!-- 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

Hast du schon von gigpress gehört? Dies würde Ihnen die Funktionalität geben, die Sie auf eine nette Art und Weise wie WordPress wünschen (benutzerfreundliche Eingabe). Es würde bedeuten, dass Sie Code wegwerfen und Ihr Thema ändern müssten, aber Sie würden auf lange Sicht viel Zeit sparen.

0
Digitalchild