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

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

ただいまの
回答率

90.34%

  • WordPress

    9603questions

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

ワードプレスでわからないことがあります。

解決済

回答 2

投稿 編集

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

gomatan1258

score 41

昨日の質問

調べてもなかなか検索できないので教えてください。

ウィジェットについて、すごくご丁寧に教えていただいたのですが、"http://投稿一覧のURL"の部分で、記事一覧の投稿が表示されるページが複数あったときに、その記事の載っている記事一覧のページにページ遷移させたいのですが、やりかたが分かりませんので教えてください。調べ方が下手でなかなかそのやり方が書いてあるサイトにたどり着けなく、6時間はまっています。

index.php

<?php get_header(); ?>
        <div id="main" class="container">
            <div id="posts">

                <?php if(have_posts()): 
                        while(have_posts()):
                            the_post();

                ?>
                <?php $p_slug = get_page_uri(get_the_ID()); ?>    
                <div id="<?php echo $p_slug ?>"></div>

                <div id="test"></div>
                <div class="post">
                    <div class="post-header">
                        <h2>
                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </h2>
                    </div>
                    <div class="post-meta">
                        <?php echo get_the_date(); ?><?php the_category(', ') ?></div>
                    <div class="post-content">
                        <div class="post-image">

                        <?php if(has_post_thumbnail()): ?>
                        <?php the_post_thumbnail(array(100, 100)); ?>
                        <?php else: ?>
                        <img src="<?php echo get_template_directory_uri(); ?>/images.jpg" width="100" height="100">
                        <?php endif; ?>

                        </div>
                        <div class="post-body">
                            <div class="post-body-excerpt">
                                <?php the_content('',false,''); ?>
                            </div>

                            <div class="more"><a href="<?php the_permalink(); ?>">続きを読む</a></div>
                            <a href="<?php echo '#'.$p_slug ?>">ここ</a>
                        </div>

                    </div>
                </div>
                <?php endwhile;
                else:
                ?>

                <p>記事はありません!</p>

                <?php endif;
                ?>

                <div class="navigation">
                    <div class="prev"><?php previous_posts_link(); ?></div>
                    <div class="next"><?php next_posts_link(); ?></div>
                </div>
            </div><!--/posts-->
            <?php get_sidebar(); ?>
        </div><!--/main -->
        <?php get_footer(); ?>


single.php

<?php get_header(); ?>
        <div id="main" class="container">
            <div id="posts">

                <?php if(have_posts()): 
                        while(have_posts()):
                            the_post();

                ?>
                <div class="post">
                    <div class="post-header">
                        <h2>
                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </h2>
                    </div>
                    <div class="post-meta">
                        <?php echo get_the_date(); ?><?php the_category(', ') ?></div>
                    <div class="post-content">
                        <p>
                            <?php the_content(); ?>
                        </p>

                    </div>
                </div>

                <div class="navigation">
                    <div class="prev"><?php previous_post_link(); ?></div>
                    <div class="next"><?php next_post_link(); ?></div>
                </div>

                <?php endwhile;
                else:
                ?>

                <p>記事はありません!</p>

                <?php endif;
                ?>

            </div><!--/posts-->
            <?php get_sidebar(); ?>
        </div><!--/main -->
        <?php get_footer(); ?>


sidebar.php

<div id="sidebar">
                <?php dynamic_sidebar(); ?>
            </div><!--/sidebar-->

function.php

<?php 

add_theme_support( 'custom-header' );

add_theme_support('menus');

register_sidebar(
    array(
        before_widget => '<div class="widget">',
        after_widget => '</div>',
        before_title => '<h3>',
        after_title => '</h3>',
    )        
);

add_theme_support('post-thumbnails');

$cssdir = get_stylesheet_directory_uri();
wp_enqueue_script( 'theme-script', $cssdir.'/script.php', array('jquery'));

// ウィジェットでショートコードを使えるようにする
add_filter( 'widget_text', 'do_shortcode' );

// 任意のPHPファイルをショートコード化して扱えるようにする
function php_shortcode( $params = array() ) {
    extract( shortcode_atts( array(
        'file' => 'default'
    ), $params ));
    ob_start();
    include( get_template_directory() . "/$file.php" );
    return ob_get_clean();
}
add_shortcode( 'my_php', 'php_shortcode' );

?>


recent_posts.php

<?php 
$args = array(
    'post_type' => 'post', //ポストタイプ
    'posts_per_page' => 5, //表示件数
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ):
    while ( $the_query->have_posts() ):
    $the_query->the_post();
?>
<p><a href="http://投稿一覧のURL" ><?php the_title();?></a></p>
<?php
endwhile;
endif;
wp_reset_query();
?>


カスタムHTMLのウィジェットを追加して以下を書き込む
[my_php file="recent_posts"]

ワードプレスのjavascriptのプラグイン

jQuery(function() {
    jQuery(".menu li").hover(function() {
        jQuery(this).children('ul').show();
    }, function() {
        jQuery(this).children('ul').hide();
    });//プルダウンメニューが表示されます

     var page;

    jQuery('.more a').on('click', function(event) {
        //aリンクの動作を停止
        event.preventDefault();
        //リンク先URLを取得
        page = jQuery(this).attr('href');
        jQuery(this).parent().load(page+' div.post-content p',function(){
            jQuery(this).parent().children().eq(0).hide();
        });
          //続きを読む ajaxでページ遷移せずにsingle.phpの一部が表示される
    });
      jQuery('a[href^=#]').click(function(){
        var speed = 500;
        var href= jQuery(this).attr("href");
        var target = jQuery(href == "#" || href == "" ? 'html' : href);
        var position = target.offset().top;
        jQuery("html, body").animate({scrollTop:position}, speed, "swing");
        return false;
    });//ページ内リンクすることができる
});

関係のないテンプレートの表記を削除しました。

昨日教えていただいたコードでrecent_posts.phpの"http://投稿一覧のURL"において、http://localhost/wordpress/blog/とすると、そのページにしか遷移しないので、それをlocalhost/wordpress/blog/2/やlocalhost/wordpress/blog/3/といった風にphpのコードを埋めてページ遷移させたいです。よろしくお願いします。

recent_posts.php

<?php
$args = array(
        'post_type' => 'post',
        'posts_per_page' => 5,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ):
while ( $the_query->have_posts() ):
$the_query->the_post();
$category = get_the_category();
$category_link = get_category_link( $category[0]->term_id );
?>
<?php $p_slug = get_page_uri(get_the_ID()); ?>
<p><a href="<?php echo $category_link.'#'.$p_slug; ?>" ><?php the_title(); ?></a></p>
<?php
endwhile;
endif;
wp_reset_query();


とやるとリンクさきのidにページ内リンクできました。

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • kei344

    2017/10/12 12:17

    もう一度書きますが、テンプレートは全て必要な内容でしょうか。また、「昨日の・・・」というタイトルは適切ではありません。あと、昨日の提示されたコードにどういった不都合があるのかも提示がありません。

    キャンセル

  • 退会済みユーザー

    2017/10/12 12:31

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • gomatan1258

    2017/10/12 13:45

    提示されたコードに不都合があるというか、使い方がわかりませんでした。

    キャンセル

回答 2

checkベストアンサー

+4

追記・修正依頼に書くには長すぎたので回答へ書きましたがこの回答では何も解決していないことを先にお伝えしておきます。
→追記したもので解決したようです。
昨日の質問の流れと今回の質問を見て、質問内容(と回答内容)がうまく伝わっていないように思ったのでまとめです。
勝手にまとめてしまいましたがこの解釈も間違っている可能性があります。

昨日の質問のはじめの時点では、

  • index.phpで記事一覧を表示している(ページングあり)
  • 特定のスラッグ(今回の場合egg)を持つ投稿が存在する
  • 「設定」→「表示設定」→1ページに表示する最大投稿数 を2にしている
  • eggを含め投稿が5件あるので3ページ分あるはず(page/2/とpage/3/が存在する)

eggの投稿が投稿一覧の何ページ目に存在するかを知りたい(最終的にそこにリンクさせたい)というのが質問内容だと思います。
もしこの順(↓)に投稿が表示されていたらhttp://localhost/wordpress/blog/page/3/にリンクしたい

apple
banana
<!-- ページ区切り -->
candy
dog
<!-- ページ区切り -->
egg

そのリンクをどこに表示したいのか、最終的に何がしたいのかが解りづらく、
質問を編集するうちにeggの事が消え、
ウィジェットの最近の投稿を使っているという情報が入り、
最近の投稿そのものをカスタマイズすることは難しいからそれと同じことができるような事ができるコードを書いて、リンク先を「投稿一覧」にすればいいという回答がついたと見ています。
この時点で質問からeggの事が消えているので「何ページ目にeggがあるかの判断」は考慮されてません。
そのため http://投稿一覧のURL としか回答されておらず、質問者さんと回答者さんの間で認識のズレがおきているのではないかと思います。

条件分岐やなんやかんやうまく使えばできそうな気がしたんですが私には無理でした。


追記
とりあえず2件ずつの場合にはどうにかなるんではないでしょうか。
書き方が完ぺきではないと思いますが

<?php
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ):
?>
<ul>
<?php
    while ( $the_query->have_posts() ):
    $the_query->the_post();
$x++;
$pageno = $x-1;
$pageno = $pageno/2;
$pageno = floor($pageno)+1;
?>
<li><a href="<?php echo home_url('/'); ?>page/<?php echo $pageno; ?>" ><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif; wp_reset_query(); ?>

再度追記
ページの計算をややこしく考えすぎました。

<?php
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 20,
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ):
$x ='';
?>
<ul>
<?php
    while ( $the_query->have_posts() ):
    $the_query->the_post();
$x++;
$pageno = $x;
$pageno = $pageno/2;
$pageno = ceil($pageno);
?>
<?php if($pageno==1): ?>
<li><a href="<?php echo home_url('/'); ?>" ><?php the_title(); ?></a></li>
<?php else : ?>
<li><a href="<?php echo home_url('/'); ?>page/<?php echo $pageno; ?>" ><?php the_title(); ?></a></li>
<?php endif; ?>
<?php endwhile; ?>
</ul>
<?php endif; wp_reset_query(); ?>

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/13 17:14

    色々教えていただいてありがとうございます。$pageno = $pageno/2;のところを$pageno = $pageno/(get_option('posts_per_page'));にしても大丈夫ですか?

    キャンセル

  • 2017/10/13 17:27

    提示したコードは1ずつカウントしてその数字を2で割って、小数点以下を切り上げる という処理をしています。
    設定から1ページ辺りの記事数を変えたときにこちらも変わってほしいということですよね。
    ページ遷移自体はたぶん問題ないと思います。
    まずはやってみたらいいんじゃないですかね

    キャンセル

  • 2017/10/13 17:49

    ありがとうございます。

    キャンセル

+1

質問の仕方が下手です。

前回も今回もJavaScriptは要りません。index.phpもsingle.phpもsidebar.phpも……

何でもかんでもペタペタ張り付ければ良いってものではないです。

自分の頭の中で想っていることだけ書いても他人には伝わりません。

URLが複数あるならそう書けば良いのに、記事一覧に飛べたら良いということだったので複数あることまで考慮してません。

今回の質問でURLが複数あるのは分かりましたが
http://localhost/wordpress/blog/
http://localhost/wordpress/blog/2
http://localhost/wordpress/blog/3
この2や3に相当するものが何なのか一切書かれてません。

勝手に想像して、多分カテゴリーだとすると

テンプレートタグ/get the category
https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_category

関数リファレンス/get category link
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_category_link

これらを利用してURLが取得できます。

<?php
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ):
    while ( $the_query->have_posts() ):
    $the_query->the_post();
$category = get_the_category();
$category_link = get_category_link( $category[0]->term_id );
?>
<p><a href="<?php echo $category_link; ?>" ><?php the_title(); ?></a></p>
<?php
endwhile;
endif;
wp_reset_query();


最後は?>で閉じなくても問題ありません。

カテゴリーでなければ上手く読み替えて試行錯誤してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/12 16:48

    カテゴリーでもこういったことができると大変勉強になりました。ありがとうございます。2や3はページを示していて、1ページ目に入りきれなかったら2ページに飛ぶといった感じになっています。ただいま表示設定で1ページ目の投稿件数を2件にしていて合計5個記事があるので1ページ目に2個、2ページ目に2個、3ページ目に1個となっています。
    説明不足で申し訳ございません。カテゴリーではなく記事のあるページ番号でページの移動はできませんか?よろしくお願いします。例えば3件目の投稿だったら
    http://localhost/wordpress/blog/2/に飛んで、5件目の投稿だったらhttp://localhost/wordpress/blog/3/に飛ぶといった感じです。

    キャンセル

  • 2017/10/12 17:25 編集

    現在5件の記事も当然そのうち6、7…と増えるんですよね?
    ずーっと5件じゃないですよね?

    キャンセル

  • 2017/10/12 17:38

    ご返答ありがとうございます。ずっと5件ではなく6,7と増えていきます。

    キャンセル

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

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

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

  • WordPress

    9603questions

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