Frage

Ich bin ein bisschen ein Problem mit mit autogenerating Kurzwahlnummern, basierend auf Datenbankeinträge.

Ich bin in der Lage, ein normales Shortcode zum Laufen zu bringen heißt:

function route_sc5() {
        return "<div>Route 5</div>";
    }
    add_shortcode('route 5','route_sc');

und die folgende Kurzwahl zu aktivieren [route 5]

wäre

Das funktioniert. Aber was ich brauche, ist die Kurzwahlnummer für jeden Datenbankeintrag erzeugt werden. so etwas wie:

$routes = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_routes") );
foreach($routes as $route)
{
    function route_sc$route->id () {
        return "<div>Route $route->id</div>";
    }
    add_shortcode('route $route->id','route_sc$route->id');
}

Die oben ist nur ein Beispiel dafür, wie ich es will an der Arbeit. Nicht wörtlich der Code, den ich verwende. Wie würde ich mich über dieses Ziel zu erreichen? ): Danke.

War es hilfreich?

Lösung

Hier ist ein Beispiel für eine dynamische Short Rückrufe mit PHP 5.3 anonyme Funktionen :

for( $i = 1; $i <= 5; $i++ ) { 
    $cb = function() use ($i) {
        return "<div>Route $i</div>";
    };  

    add_shortcode( "route $i", $cb );
}

Ich habe zu fragen, aber: Sie können nur erreichen, was Sie brauchen Short Argumente zu tun mit? dh. [route num=3]. Dann könnten Sie nur eine haben handle_route() Funktion und ein [route] Shortcode, die Dinge vereinfachen kann.

Auch wenn technisch Sie eine Kurzwahlnummer mit einem Leerzeichen im Namen enthalten können, halte ich es für eine verwirrende Unklarheit schafft. Wenn Sie sich entscheiden, Sie bestimmte Kurzwahlnummern für jede Strecke brauchen, würde ich „route5“ oder „route5“ anstatt empfehlen „Route 5.“

Andere Tipps

Danke Jungs, habe es endlich funktioniert. hier ist der Code für any1, die es in Zukunft brauchen können:

function route_sc($atts, $content = null) {
    extract(shortcode_atts(array(
    'num' => '',
    'bg' => '',
    'text' => '',
), $atts)); 
    global $wpdb;
    $bus = $wpdb->get_row( $wpdb->prepare("SELECT * FROM wp_route WHERE id = '$num'") );
    return "<div class='".$bus->text_colour."' style='background-color:".$bus->bg_colour."'>".$bus->route_id."</div></div>";
}
add_shortcode('route','route_sc');

mit der Kurzwahlnummer bei [route num="5a"]

Dynamische Funktionsnamen sind nicht möglich in PHP.

Aber man kann eval versuchen.

eval('function route_sc'.$route->id.' () { return "<div>Route '.$route->id.'</div>"; }');

Gehen über es eine andere Art und Weise: Shortcodes können Parameter übernehmen. Anstatt also [route 5] tun [route rt="5"]. Auf diese Weise Ihre Shortcode-Verarbeitungsfunktion bleibt allgemein und der Teil, dass Änderungen dynamisch sein soll. Es bedeutet auch, dass, wenn ein unerwartetes Shortcode während des Ladens der Seite gestoßen ist, können Sie es ordnungsgemäß behandeln anstelle von Wordpress einfach den Code Strippen und mit nichts zu ersetzen.

Sehen Sie hier für weitere Informationen: http://codex.wordpress.org/Shortcode_API

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top