web-dev-qa-db-fra.com

Obtenir la valeur d'attribut depuis le shortcode

J'ai ce shortcode

  [learn_more caption="something here:"]
  [/learn_more]

Je veux extraire la valeur de la légende et supprimer d'autres éléments. "quelque chose ici:"

C'est le code que j'ai, mais le shortcode est imprimé tel quel.

 $exclude_codes = 'learn_more';
 $wp_content = preg_replace("~(?:\[/?)(?!(?:$exclude_codes))[^/\]]+/?\]~s", '', $wp_content); 

Merci

1
Ahmad Ajmi

Merci à tous pour l'aide, en fait j'ai résolu le problème sans utiliser regex du tout. J'utilise le plug-in wp-mpdf avec wp-event-manager, lorsque j'essaie d'extraire la page de l'événement au format PDF, certains contenus ne s'affichent pas comme un titre et certains contenus, .. et c'est la cause du problème , mais après une personnalisation, j'ai pu obtenir le contenu de différents endroits et le problème est résolu.

code de wp-mdf.php dans la fonction mpdf_output

$EM_Event = em_get_event($post->ID, 'post_id');

$wp_content = '';
$header_content = '<h1></h1>';
$footer_content = '';

$header_content .= '<h2><a href="' . get_permalink() . '" rel="bookmark" title="Permanent Link to ' . the_title('','', false) . '">' . the_title('','', false) . '</a></h2>';
$header_content .= '<h3>'.$EM_Event->output('#_EVENTDATES').'</h3>';            
$header_content .= '<h3>' .$EM_Event->output('#_LOCATIONNAME') . ' - ' .$EM_Event->output('#_LOCATIONCOUNTRY'). '</h3>';

$footer_content .= '<div id="footer">'; 
$footer_content .= '<strong></strong>';
$footer_content .= "<div>";

$wp_content .= $header_content;
$wp_content .= apply_filters('the_content', $wp_content);
$wp_content .= $footer_content;
0
Ahmad Ajmi

J'ai lu votre question différemment de @ eric-holmes. Il me semble que votre code court doit fonctionner normalement dans la plupart des cas, mais que vous extrayez des informations dans des circonstances spéciales.

Le code court regex est délicat. Laissez WordPress le faire pour vous.

$pattern = get_shortcode_regex();
preg_match_all("/$pattern/",$wp_content,$matches);

Vos attributs pour les codes courts présents dans $wp_content devraient maintenant être dans $matches[3]. Vous voulez faire quelque chose comme ...

$lm_shortcode = array_keys($matches[2],'learn_more');
if (!empty($lm_shortcode)) {
    foreach($lm_shortcode as $sc) {
      $captions[] = $matches[3][$sc];
    }
}

Vous aurez toujours besoin de nettoyer la chaîne un peu car vous aurez un "caption =" mais vous êtes très en avance sur votre début, et vous pouvez le faire en même temps que vous définissez $captions avec str_replace ou preg_replace en fonction de la complexité de la correspondance.

Obtenir la valeur d'attribut depuis le shortcode

4
s_ha_dum