• whiteowl_blackrabbit

    (@whiteowl_blackrabbit)


    私はhtmlやcssはだいたいわかりますが、WordPressは初めて触っていてphpの知識は
    ほとんどないレベルです。

    やろうとしていることは、トップページの新着情報欄にカスタム投稿タイプの記事も含めた全記事から新着n件(現在は7件に指定)を表示させたいです。
    下記のサイトを参考に試してみたのですが、どうにもうまくいきません。
    http://www.warna.info/archives/1703/

    functions.phpへの記述は

    //+++++++++++++++++++++++++++++++++++++++++
    function chample_latest_posts( $wp_query ) {
        if ( is_home() && ! isset( $wp_query->query_vars['suppress_filters'] ) ) {
            $wp_query->query_vars['post_type'] = array( 'post', 'page' );
        }
    }
    add_action( 'parse_query', 'chample_latest_posts' );
    //+++++++++++++++++++++++++++++++++++++++++

    トップページの該当箇所の記述は

    //+++++++++++++++++++++++++++++++++++++++++
    <div id="headline">
    <h2><span>New Release</span></h2>
    <?php $posts = get_posts('numberposts=7&offset=0&category=0'); foreach ($posts as $post): ?>
    
    <li><a>"><?php the_title(); ?></a>  <span class="headline_day"><?php the_time('Y年m月d日') ?></span>  <span class="headline_category">[ <?php the_category(', ') ?> ]</span></li>
    <?php endforeach; ?>
    </div>
    //+++++++++++++++++++++++++++++++++++++++++
    としています。

    こうすると、新着記事の表示はするのですが、カスタム投稿タイプ分が含まれません。

    為念、やってみていくつかわかったことは、
    functions.phpの array( ‘post’, ‘page’ ); 部分は機能していない(postやpageを
    aaaなどの無効な文字に置き換えてもトップページの表示に変化がなかった)ことと、
    ‘news’ などを追加してみた(カスタム投稿タイプ名がnewsなので)けど変化なし
    だった(新着記事の表示はするがカスタム投稿タイプ分が含まれない表示)
    という感じです。

    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター jim912

    (@jim912)

    whiteowl_blackrabbitさん、こんにちは。

    get_postsでは、デフォルトでsuppress_filtersが有効になるため、functions.phpの条件分岐ではじかれ、指定が適用されていないものと思われます。
    get_postsの引数で、suppress_filtersを無効として指定するか、query_postsなどを用いれば、指定した投稿タイプも含まれると思われます。

    トピック投稿者 whiteowl_blackrabbit

    (@whiteowl_blackrabbit)

    jim912さん、こんばんわ。コメントありがとうございます。

    さっそく試したところ、出来ました。

    無効として指定するのはやり方がわからなかったのですが、get_posts を query_posts に書き換え、array( ‘post’, ‘page’ ) の部分を page を外して news にすることで実現できました。

    ありがとうございます。

    ただ、一つ難が…。<?php the_category(‘, ‘) ?> でタイトルの後に属するカテゴリを表示していたのですが、カスタム投稿だとカテゴリに相当するものがないようなので [ ] と空欄になってしまいます (;_;)

    カスタム投稿タイプのサイト上のタイトルを表示させる方法はありますでしょうか?
    追加質問になって申し訳ありません。よろしくお願いいたします。

    モデレーター jim912

    (@jim912)

    whiteowl_blackrabbitさん

    「カスタム投稿タイプのサイト上のタイトル」というのが何を指すのか少々わかりかねます。
    もし、カスタム分類ならばget_the_termsを使用してください。

    トピック投稿者 whiteowl_blackrabbit

    (@whiteowl_blackrabbit)

    jim912さん、こんにちわ。再びコメントありがとうございます。
    わかりにくい説明ですみませんでした。

    「カスタム投稿タイプのサイト上のタイトル」とは、
    news というカスタム投稿タイプは お知らせ として使っており、
    サイト上では お知らせ と表記しています。
    (固定ページを利用してカスタム投稿タイプ:news の記事一覧ページを
    作り、カスタムメニューに「お知らせ」と表示させています)
    サイトの設計上はカスタム投稿タイプnewsには、さらなる分類(タクソノミー)
    の必要はないです。

    ですが、カスタム分類(news)を投稿(post)のカテゴリーの代替として
    使えるのであれば…と思ったのですが、ここでまたつまづきました。

    newsにカスタム分類を追加したのですが、ダッシュボード上での表示が
    [お知らせ]となっているところをマウスオーバーすると お知らせ と 新規追加 と
    いうタブが出てしまいます。
    もともとお知らせにさらなる分類が不要なため、カスタム分類の名前も
    お知らせ なので お知らせ が二つになってしまうのです。

    これだと、更新担当者が混乱してしまうのでタクソノミーの機能を流用する方法は
    難しそうだ…というところで行き詰ってしまっています。

    説明がたどたどしくてすみません。よろしくお願いします。

    モデレーター jim912

    (@jim912)

    whiteowl_blackrabbitさん

    newsがお知らせのみで特にカテゴライズが必要ないのであれば、カスタム分類を割り当てる必要はないかと思います。

    ちょっと複雑になりますが、get_post_typeで投稿タイプを取得して、postだったらthe_categoryをnewsだったら、「お知らせ」と表示すれば良いのではと思います。

    トピック投稿者 whiteowl_blackrabbit

    (@whiteowl_blackrabbit)

    jim912さん、こんにちわ。コメントありがとうございます。

    なかなか理解できなくて恐縮なのですが、
    get_post_type → query_posts としたものを、もう一度 get_post_type へ
    戻してなおかつ表示させるには、最初のコメントでいただいた「suppress_filtersを無効として指定する」というのをしないといけない…のだと思い、
    <?php $posts = get_posts('numberposts=7&offset=0&category=0&suppress_filters=false'); foreach ($posts as $post): ?>
    と書き換えてみましたが、これだとカスタム投稿タイプ分(ポストタイプ:news)の記事が含まれませんでした。

    それと、もしかしたら見当違いかもしれませんが、当初参考にさせてもらったサイトの本文をもう一度読んでたところ、下記の記述がありました。

    注意点として、他に query_posts や get_posts を使っている箇所がある場合、影響が出る可能性があります。その場合は、 $wp_query->query_vars の内容で分岐条件を追加してあげて下さい。

    この部分をあまりよく理解できなかったので読み落としてたのですが、同じページ中に「他に query_posts や get_posts を使っている箇所」があります。

    新着記事を表示しているDIVエリアより前に

    <?php bloginfo('description'); ?>
    <?php if(is_home()): ?>
    <?php query_posts('pagename=message'); ?>
    <?php if(have_posts()):
    while(have_posts()): the_post(); ?>
    <?php the_content(); ?>
    <?php endwhile; endif; ?>
    
    <?php else: ?>
    
    <?php if(have_posts()):
    while(have_posts()): the_post(); ?>
    <?php the_content(); ?>
    <?php endwhile; endif; ?>
    
    <?php endif; ?>

    と書いています。

    これがうまくいかない原因でしょうか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「新着情報表示にカスタム投稿タイプを含めたい」には新たに返信することはできません。