web-dev-qa-db-ja.com

カスタムメタフィールドからショートコードを機能させる方法

ページ用の単純なテキストカスタムメタフィールドを作成しました。私は問題なくサイトのフロントエンドに印刷された平文を入力することができます。

ショートコードも追加したいです。フィールドにショートコードを追加すると、ショートコードはプレーンテキストとしてフロントエンドに出力されます。

私が使っているコード:

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

私は以下のコードを使うことを検討しましたが、あまり運がありません。

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

どんな助けも大歓迎

ありがとう

3
rikardo85

これを行うには、 'the_content'フィルタを使用します。そのようにして、Wordpressはその内容をエディタフィールドから来たものとして扱い、すべてのショートコードを実行します。

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

Pタグでコンテンツがラップされるので注意してください。それを解決するために、あなたはそれを削除する簡単な置き換えをすることができます:

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

それが役に立てば幸い :)

1
André Gumieri

これを機能させるために必要なものがすべて揃っているようです - それらを接続するだけです。下のスニペットを試してください

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