質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • WordPress

    7223questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

wordpress 個別投稿ページについて 

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 364

Lyo

score 6

現在、ワードプレスにてサイトを制作しておりますが
新着記事をクリックすると他の記事も表示されてしまいます。

<?php get_header(2); ?>
<?php get_sidebar(2); ?>
<section class="main single">
    <div id="mainvisual">
        <div id="mainvisual_inner">
            <?php get_template_part('head'); ?>
        </div>
    </div>
    <div class="inr">
        <div class="body cf">
            <div id="blog" class="contents">
                <?php
                    if (have_posts()):
                        while(have_posts()):
                            the_post();

                ?>
                <article>
                    <h3><?php the_title(); ?><span><?php the_time('Y.n.j'); ?></span></h3>
                    <div class="article_body">
                        <?php the_content(); ?>
                    </div>
                </article>
                <?php
                        endwhile;
                    endif;
                ?>
            </div>
        </div>
    </div>
</section>
<div class="clear"></div>

<?php get_footer(); ?>


こちらのコードでsingle.phpを用意しています。

原因のわかる方、宜しくお願いいたします。

追記

オリジナルテーマです。

サイドバー

<?php
/**
 * The template for displaying the sidebar
 * @package WordPress
 */
?>
<div id="nav" class="sidebar2">
  <div class="side_inr1">
    <div class="side_title1">
<img src="">
          <div class="blog">
<?php query_posts('posts_per_page=5'); ?>
<?php if (have_posts()):while(have_posts()):the_post(); ?>

<a href="<?php echo get_permalink(); ?>"><h2><p><?php the_title(); ?></p></h2></a>

<?php endwhile; endif; ?>
</div>
    </div>
  </div>
  <div class="side_inr2">
    <div class="side_title2">
      <img src="">
    </div>
    <img src="">
    <img src="">
  </div>
  <div class="side_inr3">
  <div class="side_title3">
    <img src="">
  </div>
<a href=""></a>
  <a href=""></a>
  <a href=""></a>
<a href="/contact-2/"><img src=""></a>
</div>
<div class="side_fb">
<iframe src=""></iframe>
</div>
</div>

ヘッダー

<?php
/**
 * The template for displaying the header
 * @package WordPress
 */
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="keywords" content="">
<meta name="description" content="">
<title></title>
<?php wp_head(); ?>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<link href="<?php echo get_stylesheet_directory_uri() ?>/style.css" rel="stylesheet" type="text/css" media="all">
</head>

<body>
<header>
<a href=""><h1><img class="logo2" src=""></h1></a>
</div>

</header>


footer.php

<?php
/**
 * The template for displaying the footer
 * @package WordPress
 */
?>
<div class="cb"></div>
</div>


<?php wp_footer(); ?>
</body>
</html>

function.php

<?php

// ウィジェット
register_sidebar();

add_theme_support( 'post-thumbnails', array( 'post' ) );
set_post_thumbnail_size( 100, 100, true );


function new_excerpt_more($post) {
    return '<a href="'. get_permalink($post->ID) . '">' . '...続きを読む' . '</a>';
}
add_filter('excerpt_more', 'new_excerpt_more');


?>
<?php 
// functions.phpに以下を追記
add_action('admin_menu', 'add_custom_fields');
add_action('save_post', 'save_custom_fields');

// 記事ページと固定ページでカスタムフィールドを表示
function add_custom_fields() {
  add_meta_box( 'my_sectionid', 'カスタムフィールド', 'my_custom_fields', 'post');
  add_meta_box( 'my_sectionid', 'カスタムフィールド', 'my_custom_fields', 'page');
}

function my_custom_fields() {
  global $post;
  $keywords = get_post_meta($post->ID,'keywords',true);
  $description = get_post_meta($post->ID,'description',true);

  echo '<p>キーワード(半角カンマ区切り)<br>';
  echo '<input type="text" name="keywords" value="'.esc_html($keywords).'" size="60" /></p>';

  echo '<p>ページの説明(description)160文字以内<br>';
  echo '<input type="text" style="width: 600px;height: 40px;" name="description" value="'.esc_html($description).'" maxlength="160" /></p>';
}

// カスタムフィールドの値を保存
function save_custom_fields( $post_id ) {
  if(!empty($_POST['keywords']))
    update_post_meta($post_id, 'keywords', $_POST['keywords'] );
  else delete_post_meta($post_id, 'keywords');

  if(!empty($_POST['description']))
    update_post_meta($post_id, 'description', $_POST['description'] );
  else delete_post_meta($post_id, 'description');
}

function my_description() {

// カスタムフィールドの値を読み込む
$custom = get_post_custom();
if(!empty( $custom['keywords'][0])) {
  $keywords = $custom['keywords'][0];
}
if(!empty( $custom['description'][0])) {
  $description = $custom['description'][0];
}
?>
<?php if(is_home()): // トップページ ?>
<meta name="robots" content="index, follow" />
<meta name="keywords" content="トップページに表示させるkeywords(半角カンマ区切り)">
<meta name="description" content="トップページに表示させるdescription" />
<?php elseif(is_single()): // 記事ページ ?>
<meta name="robots" content="index, follow" />
<meta name="keywords" content="<?php echo $keywords ?>">
<meta name="description" content="<?php echo $description ?>">
<?php elseif(is_page()): // 固定ページ ?>
<meta name="robots" content="index, follow" />
<meta name="keywords" content="<?php echo $keywords ?>">
<meta name="description" content="<?php echo $description ?>">
<?php elseif (is_category()): // カテゴリーページ ?>
<meta name="robots" content="index, follow" />
<meta name="description" content="<?php single_cat_title(); ?>の記事一覧" />
<?php elseif (is_tag()): // タグページ ?>
<meta name="robots" content="noindex, follow" />
<meta name="description" content="<?php single_tag_title("", true); ?>の記事一覧" />
<?php elseif(is_404()): // 404ページ ?>
<meta name="robots" content="noindex, follow" />
<title><?php echo 'お探しのページが見つかりませんでした'; ?></title>
<?php else: // その他ページ ?>
<meta name="robots" content="noindex, follow" />
<?php endif; ?>
<?php
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/04/15 16:51

    使用されているテーマは自作テーマでしょうか?それとも公開されているテーマでしょうか?後者の場合は入手先をリンクつきで質問文に追記してください。自作テーマの場合は関連する箇所(functions.phpやヘッダやサイドバー部分)全てのコードを提示ください。

    キャンセル

回答 1

checkベストアンサー

+3

サイドバーで使用している query_posts が原因です。WP_Query に置き換えて処理する必要があります。

【WordPressで押さえておきたい!get_posts,WP_Query,query_posts の違いと用例|TECHNICAL BLOG|株式会社エムハンド】
http://www.m-hand.co.jp/program/4119/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/15 18:23

    ありがとうございます!

    <?php
    $args = array( 'post_type' => '$my_post');
    ?>
    <?php
    // the query
    $the_query = new WP_Query( $args ); ?>

    <?php if ( $the_query->have_posts() ) : ?>

    <!-- the loop -->
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <?php endwhile; ?>
    <!-- end of the loop -->
    </ul>
    </div>
    <?php wp_reset_postdata(); ?>
    <?php else : ?>
    <p>
    <?php _e( '記事がありません' ); ?>
    </p>
    <?php endif; ?>

    こう記述してみたのですが、うまく反応しません、、

    キャンセル

  • 2017/04/15 18:24

    どこの話でしょうか?

    キャンセル

  • 2017/04/16 21:00

    サイドバーの

    <?php query_posts('posts_per_page=5'); ?>
    <?php if (have_posts()):while(have_posts()):the_post(); ?>

    <a href="<?php echo get_permalink(); ?>"><h2><p><?php the_title(); ?></p></h2></a>

    <?php endwhile; endif; ?>

    を上記に入れ替えました。

    キャンセル

  • 2017/04/16 21:53

    「うまく反応しません」とはどのような状況でしょうか。コメントのものであればそもそもループ内に出力がありませんが、ソースを見ても「空」の状態なのか、「記事がありません」と出るのか。また、その際にメインのループが表示されないとか、詳しく記載ください。

    また、サイドバーと「get_template_part('head');」無しで記事1件のみの表示になるかどうか確認してみてください。

    キャンセル

  • 2017/04/16 22:23

    現在は記事がありませんと表示されました。

    サイドバーとget_template_part('head');なしですと1件のみ表示されました。

    キャンセル

  • 2017/04/16 23:00

    $args = array( 'post_type' => '$my_post'); は $args = array( 'post_type' => $my_post ); でしょうか。

    サイドバーと「get_template_part('head');」のどちらかだけなのか、両方消さなければ1件にならないのかなど、問題を切り分けてどの部分が問題か確認していってください。

    キャンセル

  • 2017/04/17 11:35

    ありがとうございます!

    single.phpの記事部分は1件のみ表示されるようになりました!

    しかし、single.phpのサイドバー部分の新着記事表示は未だに記事がありませんと表示されます。
    $args = array( 'post_type' => '$my_post'); を$args = array( 'post_type' => $my_post ); に変更してみたのですがそうしますとデザイン崩れが発生し、さらに記事も表示されません。

    $args = array( 'post_type' => '$my_post'); で投稿記事を抜き出せていないことが原因だとは思うのですが。。

    キャンセル

  • 2017/04/17 11:41

    $my_post に適切な値が入っていないのでは?

    キャンセル

  • 2017/04/17 12:11

    こちらには投稿の全記事から新着記事を表示したいので$args = array( 'post_type' => 'post');等に変えてみたのですがうまくいかないのですが。。$my_postは全記事抜き出すということではないのでしょうか?

    すみません。

    キャンセル

  • 2017/04/17 13:10

    > $my_postは全記事抜き出すということではないのでしょうか?
    聞いたことがありません。そういう機能は無いと思います。( $my_post を自分で定義していないのであれば)

    $the_query = new WP_Query( array( 'posts_per_page' => 5 ) );
    ではどうでしょう?

    キャンセル

  • 2017/04/17 13:21

    そうなんですね。自分で定義する方法がわかっていないだけなんですね。。

    サイドバーを
    <?php
    $the_query = new WP_Query( array( 'posts_per_page' => 5 ) ); ?>

    <?php
    // the query
    $the_query = new WP_Query( $args ); ?>
    <?php if ( $the_query->have_posts() ) : ?>

    <!-- the loop -->
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <?php endwhile; ?>
    <!-- end of the loop -->
    </ul>
    </div>
    <?php wp_reset_postdata(); ?>
    <?php else : ?>
    <p>
    <?php _e( '記事がありません' ); ?>
    </p>
    <?php endif; ?>

    にしてみましたが、特に変化なく「記事がありません」と表示されております。

    キャンセル

  • 2017/04/17 13:26

    kei344さんが、コメントに書かれていますが、「そもそもループ内に出力がありません」
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>のあとに
    表示したいコードを入れてください。

    キャンセル

  • 2017/04/17 13:30

    <?php
    $the_query = new WP_Query( array( 'posts_per_page' => 5 ) );
    $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); ?>
    kiji
    <?php } /* while */ wp_reset_postdata(); } else { ?><p>記事なし</p><?php }; /* have_posts() */ ?>

    これではどうなりますか?元の記述を削除してから置き換えてください。

    キャンセル

  • 2017/04/17 13:51

    お二方ありがとうございます。

    そちらのコードに変更いたしますと「記事なし」
    と表示されます。

    キャンセル

  • 2017/04/17 15:02

    <?php
    $the_query = new WP_Query( array( 'posts_per_page' => 5 ) ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); ?>
    kiji
    <?php } /* while */ wp_reset_postdata(); } else { ?><p>記事なし</p><?php }; /* have_posts() */ ?>

    すみません、ちょっと間違えました。これでも記事は無いと出ますか?

    キャンセル

  • 2017/04/17 15:21

    ありがとうございます。

    kiji kiji kiji kiji kiji

    このように表示されます。

    キャンセル

  • 2017/04/17 15:35

    さっきのコードの「kiji」部分を下記に置き換え。

    <a href="<?php echo get_permalink(); ?>"><h2><p><?php the_title(); ?></p></h2></a>

    キャンセル

  • 2017/04/17 15:42

    表示されました!!本当にありがとうございます!!

    理解はできていないのですが。。本当に助かりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • WordPress

    7223questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。