web-dev-qa-db-ja.com

ショートコード関数を直接呼び出して$ attsを渡す方法

Media Library Categories プラグインを使用しています。あまりドキュメントがないので、実装する方法は[mediacategories categories="6"]というショートコードを使うことにしました。

これをテーマテンプレートに直接実装したいです。だから私は試してみました:

<?php if(function_exists(do_shortcode('[mediacategories categories="6"]'))) { ?>
  <h1>Inspiration</h1>
<?php
  do_shortcode('[mediacategories categories="6"]');
}

私はまた関数を直接実装しようとしましたが、関数がそれらを使用するために$ attsを正しく渡すことができませんでした。

3
Evan Yeung

do_shortcode()は単に文字列を解析します。印刷するにはechoまたはprintを使用する必要があります。

function_exists()は関数名と一致する文字列を期待します。プラグインを見た後、私はこのコードを試すでしょう:

<?php
if ( function_exists( 'mediacategories_func' ) )
{
?>
<h1>Inspiration</h1>
<?php
    print mediacategories_func( array( 'categories' => 6 ) );
}
4
fuxia

私は通常、私のショートコードコールバックにこのようなセクションを追加します。

if (is_array($atts)) {
    extract(shortcode_atts(array(
            'primary_att' => 'primary_default',
            ...
        ), $atts));
} else {
    $primary_att = $atts;
}

これにより、 'primary'属性を(配列の中にラップせずに)直接primary_attを関数に渡すことができます。それでmediacategories_func(6);

0
wyrfel