webentwicklung-frage-antwort-db.com.de

Funktionsweise von Shortcodes aus benutzerdefinierten Metafeldern

Ich habe ein einfaches benutzerdefiniertes Text-Metafeld für Seiten erstellt. Ich kann problemlos Klartext eingeben, der auf dem Frontend der Site gedruckt wird.

Ich möchte auch Shortcodes hinzufügen. Wenn ich dem Feld einen Shortcode hinzufüge, wird der Shortcode als einfacher Text im Frontend gedruckt.

Der Code, den ich benutze:

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

Ich habe versucht, den folgenden Code zu verwenden, aber nicht viel Glück gehabt:

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

Jede Hilfe sehr geschätzt

Vielen Dank

3
rikardo85

Sie können dazu den Filter 'the_content' verwenden. Auf diese Weise behandelt Wordpress den Inhalt so, wie er aus dem Editor-Feld stammt, und führt alle Shortcodes aus:

<?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>

Seien Sie vorsichtig, da der Inhalt um P-Tags herum eingeschlossen wird. Um das zu lösen, können Sie es einfach durch Ersetzen entfernen:

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

Ich hoffe es hilft :)

1
André Gumieri

Es sieht so aus, als hättest du alle Teile, die du brauchst, um diese Arbeit zu machen - du musst sie nur verbinden. Probieren Sie das folgende Snippet aus

/**
 * 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