2

以下の PHP コードを使用して、WordPress 投稿に適用されたカスタム分類法に基づいて CSS クラスを表示しています。私の分類法は CC と呼ばれ、その 3 つのオプションは x、y、z です。3 つすべてを含む投稿の場合:

 $cc_terms = get_the_terms($post->ID,'cc');
 foreach ($cc_terms as $term) { 
     echo ' '.$term->slug.'-active'; 
 }

出力: x アクティブ y アクティブ z アクティブ

私はそれをWordPressショートコード関数に変換しようとしています(echo私が知る限り機能しません)。基本的にcc_class()、1つの変数(配列ではなく)としてキャプチャする方法を理解する必要があります。その上。

function cc_meta($atts, $content = null) {
    global $post;
    extract(shortcode_atts(array('class' => 'default'), $atts));
    function cc_class() {
        $cc_terms = get_the_terms($post->ID, 'cc');
        foreach($cc_terms as $term) {
            return ' '.$term->slug.'-active';
        }
    }
    return '<div class="' . esc_attr($class) . cc_class() . '">...</div>';
}

出力:<div class="default x-active">...</div>

3 つすべてではなく、最初の項のみを使用しているため、ループでどのようreturnに機能するのか疑問に思います。foreachどうすればこれを機能させることができますか?

望ましい出力:<div class="default x-active y-active z-active">...</div>

更新 1 : 提案どおりに試してみました.=が、空白のエラーが発生します:

function cc_meta( $atts, $content = null ) {
    global $post;
    extract(shortcode_atts(array('class' => 'default'), $atts));

    $cc_terms = get_the_terms($post->ID, 'cc');
    foreach ($cc_terms as $term) {
        $return .= ' '.$term->slug.'-active';
    }
    return '<div class="' . esc_attr($class) . $return . '">...</div>';
}

更新 2 : 行を削除したglobal $postところ、うまくいきました。みんなありがとう=)

function cc_meta($atts, $content = null) {
    extract(shortcode_atts(array('class' => 'default'), $atts));
    $cc_terms = get_the_terms($post->ID, 'cc');
    foreach($cc_terms as $term) { 
        $return .= ' '.$term->slug.'-active';
    }
    return '<div class="' . esc_attr($class) . $return . '">...</div>';
}
4

1 に答える 1

7

関数の途中で return しないでください。return は最後にのみ使用してください。

これを使用する代わりにreturn

$return .= 

そしてクロージングの前}return $return;

于 2011-06-10T21:34:17.633 に答える