Domanda

Sto avendo un po 'di un problema con i codici brevi autogenerating, sulla base di voci di database.

Sono in grado di ottenere uno shortcode normale di lavoro cioè:

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

e il seguente shortcode per attivare sarebbe [route 5]

Questo funziona. Ma quello che mi serve è lo shortcode da produrre per ogni voce del database. qualcosa di simile:

$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');
}

È possibile che questo è solo un esempio di come lo voglio al lavoro. Non letteralmente il codice che sto usando. Come potrei fare per raggiungere questo? ): Grazie.

È stato utile?

Soluzione

Ecco un esempio di callback dinamico shortcode utilizzando PHP 5.3 funzioni anonime :

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

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

Mi chiedo, però: si può solo compiere ciò che devi fare usando argomenti shortcode? vale a dire. [route num=3]. Poi si potrebbe semplicemente avere una funzione handle_route() e uno shortcode [route], che può semplificare le cose.

Inoltre, mentre tecnicamente è possibile includere uno shortcode con uno spazio nel nome, penso che crea un'ambiguità di confusione. Se si decide avete bisogno di codici brevi specifici per ciascuna linea, mi sento di raccomandare "route5" o "route5" piuttosto che "itinerario 5".

Altri suggerimenti

Grazie ragazzi, finalmente farlo funzionare. ecco il codice per any1 che potrebbe essere necessario in futuro:

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');

con lo shortcode a [route num="5a"]

nomi delle funzioni dinamiche non sono possibili in PHP.

Ma si potrebbe provare eval.

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

Vai su di esso un modo diverso: Shortcodes può prendere parametri. Così, invece di fare [route 5] [route rt="5"]. In questo modo i vostri soggiorni funzione di elaborazione shortcode generico e la parte che cambia è lo scopo di essere dinamico. E significa anche che se si verifica uno shortcode imprevisto durante il caricamento della pagina è possibile gestire in modo corretto invece di WordPress solo nudo il codice e la sua sostituzione con niente.

Vedi qui per maggiori info: http://codex.wordpress.org/Shortcode_API

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top