2

私はWordpressのカスタムテンプレートに取り組んでおり、クラスごとに投稿をフィルタリングしています. <?php post_class(); ?>ページに入れるとWordpressは不要なクラスを大量に表示するので
(これが私に与えるものですclass="post-54 post type-post status-publish format-standard hentry category-3d category-web")、投稿に関連するカテゴリのみをエコーすることでそれを簡素化しようとしています.


編集:
これは私のページで投稿を呼び出すものです<?php query_posts( 'showposts=99' ); ?>

次に、このコード

<li class="<?php if ( in_category('category-3d')) { echo "3d"; }
        if ( in_category('category-animation')) { echo "animation"; }
        if ( in_category('category-motion')) { echo "motion"; }
        if ( in_category('category-shortfilm')) { echo "shortfilm"; }?>"></li>

<li class="motion"></li>私の投稿が「モーション」カテゴリにある場合は、これをください。

問題は、投稿が複数のカテゴリにある場合、最初のカテゴリのみがエコーされることです...投稿が影響を受けるカテゴリのすべての名前をエコーするように WP に指示し、それらの間にスペースを追加するにはどうすればよいですか?

私は PHP 構文の初心者なので、このような単純なものをクリーンで効果的な方法で動作させる方法をまだ学んでいます (つまり、16 行のコードを書かずに!) ... 誰かがこれについて私を助けてくれますか?


2番目の編集:
わかりました、まだ理由を理解しようとしていますが、今日、私のコード(上記)は機能しており、リストされたすべてのクラスをエコーし​​ますが、それらの間にスペースはありません...だから私のクラスを機能させるために、私は' m このようにエコー部分の最後にスペースを追加します{ echo "3d "; }。しかし、物事を機能させるには汚い方法だと思います...

各クラスタグの間に適切な方法でスペースを追加するにはどうすればよいですか? 私はこのようなものを目指していますforeach $categories as $cat { echo $cat . " "; }が、$categories と $cat はそれぞれの "if" ステートメントを参照します。

4

3 に答える 3

1

私はWPに精通していませんが、次のような関数でカテゴリを取得すると、implodeget_categories()を使用してすべてのカテゴリから文字列を作成できます。

<?php $categories = get_categories(); ?>
<?php $categories = implode(' ', $categories); ?>
<li class="<?php echo $categories; ?>">...</li>

返されているものを提供できますget_categories()か?

編集:

function get_class_attr() {
    $classes = get_post_class(); 
    $classes = substr($classes, 7, -1);

    $arr = array();
    $arr = explode(' ', $classes);
    $classes = 'class="';

    foreach($arr as $class_name) { 
        if(strpos($class_name, 'category-') !== false) {
            $classes .= substr($class_name, 9).' ';
        }
    }

    $classes = substr_replace($classes, '"', -1, 1);
    echo $classes;
}

get_class_attr(); // output: class="3d web"

また、3dは有効なクラス名ではないことに注意してください。movie3dまたは などを使用できますfilm3d

別の方法は、クラス値を少し前に作成してから次のようにするechoことです。

<?php
$classes = array();
if ( in_category('category-3d'))        { $classes[] = "3d"; }
if ( in_category('category-animation')) { $classes[] = "animation"; }
if ( in_category('category-motion'))    { $classes[] = "motion"; }
if ( in_category('category-shortfilm')) { $classes[] = "shortfilm";}

if(count($classes)) {
    $classes = implode(' ', $classes);
} else {
    $classes = '';
}
?>

<li class="<?php $classes ?>"></li>
于 2012-10-17T15:52:51.803 に答える
0

代わりに、Wordpress API のこの関数を使用することをお勧めします。これはよく読む必要があります。

このようなものが動作するはずです:

<?php $categories = get_categories(); ?>
<li class="<?php foreach ($categories as $cat) {
    echo $cat . " ";
 }?>"> -- Your li text --
</li>
于 2012-10-17T15:50:03.393 に答える
0

投稿したコードの時点で、製品が指定された 4 つのカテゴリすべてに含まれている場合は、すべてのカテゴリを追加する必要があります。各 の後に引用符の間にスペースを追加できechoますecho ' motion'

名前でチェックする必要なく、実際にすべてのカテゴリを追加する別のアプローチを使用します。

<li class="<?php echo implode( ' ', get_categories() ); ?>"> … </li>

関数の出力をフィルタリングする方法については、 http: //codex.wordpress.org/Function_Reference/get_categoriesを参照してくださいget_categories()

于 2012-10-17T15:51:05.717 に答える