2010-08-25 5 views
0

Je construis un plugin de filtre dans Wordpress et je remplace quelques balises spécifiques de plugin avec des morceaux de html.Preg_Replace et capturer la valeur? PHP

Exemple: [VIDEO ID = 12] sera remplacé par preg_replaced dans cette fonction

function display_video($text){ 

    $pattern = '/\[VIDEO ID\=\d+\]/'; 

    $text=preg_replace($pattern,get_video_block($id),$text); 

    return $text; 
} 

Je ne suis pas sûr de savoir comment assurez-vous que je l'offre le bon ($ id) param à ma fonction get_video_block pour chaque occurrence de remplacement.

Il n'y a pas de boucle réelle autre que dans la fonction preg_replace, alors, comment pourrais-je fournir cette valeur?

Pensées?

fonction EDIT (get_video_block):

function get_video_block($id){ 
    global $wpdb; 
    $wpdb->show_errors(); 
    $table_name = $wpdb->prefix . "video_manager"; 
    $query = "SELECT * FROM " . $table_name . " WHERE `index` = '$id'"; 
    $results = $wpdb->get_results($query, ARRAY_A); 

    $results = $results[0]; 

    $returnString = '<div class="vidBlock">'; 
     $returnString .= $results['embed_code']; 

     $returnString .= '<div class="voteBar">'; 
      $returnString .= $results['vote_text']; 
      $returnString .= '<input type="button" value="YES" class="voteButton">'; 
      $returnString .= '<input type="button" value="NO" class="voteButton">'; 
     $returnString .= '</div>'; 

     $returnString .= $results['title'] . '<br>'; 
     $returnString .= $results['description'] . '<br>'; 

    $returnString .= '</div>'; 

    return $returnString; 

} 
+1

juste curieux, si c'est un filtre wordpress avec [code attrib = ""] motif, pourquoi ne pas utiliser wordpress shortcode API? http://codex.wordpress.org/Shortcode_API – azureru

+0

Que fait 'get_video_block()'? –

+0

Je ne l'utilise pas parce que je n'en ai jamais entendu parler auparavant;) –

Répondre

4

Vous pouvez utiliser preg_replace_callback() à cette fin. Vous devrez également envelopper \d+ dans ( parenthèses ) afin qu'il puisse être capturé et utilisé dans la fonction de rappel.

function display_video($text) { 
    $callback = create_function('$matches', 'return get_video_block($matches[1])'); 
    return preg_replace_callback('/\[VIDEO ID\=(\d+)\]/', $callback, $text); 
} 

Notez que $matches[1] est utilisé parce que $matches[0] contient la chaîne entière correspondance par l'expression régulière.

Le commentaire d'Erwin peut vous être utile - WordPress a un shortcode API qui gère l'analyse des shortcodes pour vous, vous pouvez donc vous concentrer sur ce que vous voulez faire avec les attributs de shortcode.