よくいる文系プログラマの戯言

プライベートでの開発を適当に書き留めます

初めてWordPressでオリジナルテーマを作りながらハマったところ::その1

ここ数日、初めてWordPressでオリジナルテーマを制作しています。 比較的スムーズにいっているですが、ハマったところもいくつかあったので、メモしておきます。

①カスタム投稿のリンク無しタクソノミー出力

<?php
while ( $music->have_posts() ) : $music->the_post(); 
    $terms = get_the_terms($post->ID, 'classify2');
    foreach ($terms as $term) {
        $taxonomy = $term->name;
    }

色々調べたんですが、うまくいかなかったので、Codex見ながら我流で書きました。(とても簡単に書けました。)

最初は、the_taxonomies(); で出力したんですが、「○○の分類:」とかが頭についてしまい、しかもそれをうまく消せなかったので(ただ技術がないだけかもしれない)、断念。 次に、get_the_term_list(); を使おうとするも、ごにょごにょやってもうまくいかない。

で、最終的にこうなりました。

ここに至るまでも、「タクソノミー名」がいまいち何たるかわからなかったんですが、 「Custom Post Types」というプラグインでいうところの、「分類名」であることを把握して何とか事なきを得ました。

②カスタム投稿タイプのラベル名の変更

カスタム投稿の話なので、ついでに記録。 バラバラの投稿タイプで投稿されたものを一カ所に更新情報として表示させようとしたときの問題。

<article class="notice02">
    <h2>What's New</h2>

    <?php
    $args = array(
        'numberposts' => 5,
        'orderby' => 'post_date',
        'order' => 'DESC',
        'post_type' => 'any'
    );
    $postslist = get_posts( $args );
    foreach ($postslist as $post) :  setup_postdata($post); ?>
        <?php $category = esc_html(get_post_type_object(get_post_type())->label ); ?>
        <ul>
            <li><time><?php the_time('Y/m/d'); ?></time></li>
            <li class="label02"><a href="<?php echo $category; ?>/"><?php echo $category; ?></a></li>
            <li class="updates01"><a href="<?php echo $category; ?>/"><?php trim_str_by_chars( get_the_title(), 12 ); ?></a>を更新しました。</li>
        </ul>
    <?php endforeach; ?>    

</article>

普通に出力すると、通常のブログとして表示させようとしたところのラベル名が「投稿」になってしまい、よくない。 ので、functions.phpにこう書きました。

<?php
//デフォルトの「投稿」と「固定ページ」の変更
add_action( 'init', 'rev_post_type' );
function rev_post_type() {
    register_post_type( 'post', /* post-type */
        array(
            'labels' => array(
            'name' => __('BLOG'),
            'singular_name' => __('BLOG')
        ),
        'public' => true,
        'menu_position' =>5,
        'rewrite' => array('slug' => 'blog')
        )
    );
}

スラッグも一緒に変えないと、あとで大変な事になります。

③the_excerpt(); とかタイトルの長さを変えたりする

the_excerpt(); のカスタマイズには「Advanced Excerpt」というのを使いました。非常に便利です。 タイトルの長さを変えるのは、以下のように書きました。

<?php
function trim_str_by_chars( $str, $len, $echo = true, $suffix = '...', $encoding = 'UTF-8' ) {
    if ( ! function_exists( 'mb_substr' ) || ! function_exists( 'mb_strlen' ) ) {
        return $str;
    }
    $len = (int)$len;
    if ( mb_strlen( $str = wp_specialchars_decode( strip_tags( $str ), ENT_QUOTES, $encoding ), $encoding ) > $len ) {
        $str = wp_specialchars( mb_substr( $str, 0, $len, $encoding ) . $suffix );
    }
    if ( $echo ) {
        echo $str;
    } else {
        return $str;
    }
}

で、出力はこう↓↓

<?php
trim_str_by_chars( get_the_title(), 12 );

④新しい投稿に「NEW!」をつける機能

<?php
function newPost() {
    $days = 7; //Newを表示させたい期間の日数
    $today = date_i18n('U');
    $entry = get_the_time('U');
    $kiji = date('U',($today - $entry)) / 86400 ;
    if( $days > $kiji ){ echo 'New!'; };
}

こちらは、functions.phpに書きました。 そのまんまですね。

⑤ページングを実装するときに書いたところ

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts('post_type=post&paged='.$paged);

if(have_posts()):
$loop = new WP_Query( 
    array( 
        'post_type' => 'post', 
        'paged' => $paged,
        ) 
    );  

以上、今晩ももうちょい進めます。