web-dev-qa-db-fra.com

Comment obtenir un shortcode à partir d'un méta-champ personnalisé

J'ai créé un simple méta-champ texte personnalisé pour les pages. Je peux réussir à saisir du texte brut qui s'imprime sur la face avant du site sans aucun problème.

Je veux aussi ajouter des shortcodes. Si j'ajoute un shortcode au champ, ce shortcode sera imprimé au début sous forme de texte brut.

Le code que j'utilise:

<?php $meta = get_post_meta($post->ID, 'intSlider', true); ?>
   <div id="sliderWrap">
     <div id="slider" class="floatLeft">
        <? echo $meta; ?>
     </div>
   </div>

J'ai étudié la possibilité d'utiliser le code ci-dessous sans trop de chance:

<?php echo ( do_shortcode( get_post_meta( $post->ID , 'intSlider' , true ) ) ); ?>

Toute aide très appréciée

Merci

3
rikardo85

Vous pouvez le faire en utilisant le filtre 'the_content'. De cette façon, Wordpress traitera le contenu tel qu'il provient du champ de l'éditeur et exécutera tous les codes courts:

<?php $meta = get_post_meta($post->ID, 'intSlider', true); ?>
<div id="sliderWrap">
    <div id="slider" class="floatLeft">
        <? echo apply_filters('the_content', $meta); ?>
    </div>
</div>

Soyez juste prudent, car cela encapsulera le contenu autour des balises P. Pour résoudre ce problème, vous pouvez effectuer un simple remplacement pour le supprimer:

...
<?php
    $content = apply_filters('the_content', $meta);
    $content = str_replace(array('<p>', '</p>'), '', $content);
?>
...

J'espère que ça aide :)

1
André Gumieri

Il semble que vous ayez tous les éléments nécessaires pour que cela fonctionne - il vous suffit de les connecter. Essayez l'extrait ci-dessous

/**
 * get_post_meta returns either the value of the custom field or false
 * so we need to be sure we have the string before trying to output the shortcode
 */

$meta = get_post_meta($post->ID, 'intSlider', true);
?>
<div id="sliderWrap">
  <div id="slider" class="floatLeft">
    <?php
    //this will just echo the value saved
    // -- echo $meta;

    // this should render the shortcode if available - as long asthe $meta has the square brackets i.e [shortcode-name]
    if( $meta ) {
      echo do_shortcode( $meta );
    }else{
      //this is just in place for debugging
      echo '$meta was empty';
    }
    ?>
</div>
1
Welcher