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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

Q&A

解決済

2回答

2585閲覧

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

gomatan1258

総合スコア67

WordPress

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

0グッド

0クリップ

投稿2017/10/12 02:37

編集2017/10/12 10:28

昨日の質問

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

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

index.php

php

1<?php get_header(); ?> 2 <div id="main" class="container"> 3 <div id="posts"> 4 5 <?php if(have_posts()): 6 while(have_posts()): 7 the_post(); 8 9 ?> 10 <?php $p_slug = get_page_uri(get_the_ID()); ?> 11 <div id="<?php echo $p_slug ?>"></div> 12 13 <div id="test"></div> 14 <div class="post"> 15 <div class="post-header"> 16 <h2> 17 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 18 </h2> 19 </div> 20 <div class="post-meta"> 21 <?php echo get_the_date(); ?><?php the_category(', ') ?>22 </div> 23 <div class="post-content"> 24 <div class="post-image"> 25 26 <?php if(has_post_thumbnail()): ?> 27 <?php the_post_thumbnail(array(100, 100)); ?> 28 <?php else: ?> 29 <img src="<?php echo get_template_directory_uri(); ?>/images.jpg" width="100" height="100"> 30 <?php endif; ?> 31 32 </div> 33 <div class="post-body"> 34 <div class="post-body-excerpt"> 35 <?php the_content('',false,''); ?> 36 </div> 37 38 <div class="more"><a href="<?php the_permalink(); ?>">続きを読む</a></div> 39 <a href="<?php echo '#'.$p_slug ?>">ここ</a> 40 </div> 41 42 </div> 43 </div> 44 <?php endwhile; 45 else: 46 ?> 47 48 <p>記事はありません!</p> 49 50 <?php endif; 51 ?> 52 53 <div class="navigation"> 54 <div class="prev"><?php previous_posts_link(); ?></div> 55 <div class="next"><?php next_posts_link(); ?></div> 56 </div> 57 </div><!--/posts--> 58 <?php get_sidebar(); ?> 59 </div><!--/main --> 60 <?php get_footer(); ?>

single.php

php

1<?php get_header(); ?> 2 <div id="main" class="container"> 3 <div id="posts"> 4 5 <?php if(have_posts()): 6 while(have_posts()): 7 the_post(); 8 9 ?> 10 <div class="post"> 11 <div class="post-header"> 12 <h2> 13 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 14 </h2> 15 </div> 16 <div class="post-meta"> 17 <?php echo get_the_date(); ?><?php the_category(', ') ?>18 </div> 19 <div class="post-content"> 20 <p> 21 <?php the_content(); ?> 22 </p> 23 24 </div> 25 </div> 26 27 <div class="navigation"> 28 <div class="prev"><?php previous_post_link(); ?></div> 29 <div class="next"><?php next_post_link(); ?></div> 30 </div> 31 32 <?php endwhile; 33 else: 34 ?> 35 36 <p>記事はありません!</p> 37 38 <?php endif; 39 ?> 40 41 </div><!--/posts--> 42 <?php get_sidebar(); ?> 43 </div><!--/main --> 44 <?php get_footer(); ?>

sidebar.php

php

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

function.php

php

1<?php 2 3add_theme_support( 'custom-header' ); 4 5add_theme_support('menus'); 6 7register_sidebar( 8 array( 9 before_widget => '<div class="widget">', 10 after_widget => '</div>', 11 before_title => '<h3>', 12 after_title => '</h3>', 13 ) 14); 15 16add_theme_support('post-thumbnails'); 17 18$cssdir = get_stylesheet_directory_uri(); 19wp_enqueue_script( 'theme-script', $cssdir.'/script.php', array('jquery')); 20 21// ウィジェットでショートコードを使えるようにする 22add_filter( 'widget_text', 'do_shortcode' ); 23 24// 任意のPHPファイルをショートコード化して扱えるようにする 25function php_shortcode( $params = array() ) { 26 extract( shortcode_atts( array( 27 'file' => 'default' 28 ), $params )); 29 ob_start(); 30 include( get_template_directory() . "/$file.php" ); 31 return ob_get_clean(); 32} 33add_shortcode( 'my_php', 'php_shortcode' ); 34 35?>

recent_posts.php

php

1<?php 2$args = array( 3 'post_type' => 'post', //ポストタイプ 4 'posts_per_page' => 5, //表示件数 5 ); 6 $the_query = new WP_Query( $args ); 7 if ( $the_query->have_posts() ): 8 while ( $the_query->have_posts() ): 9 $the_query->the_post(); 10?> 11<p><a href="http://投稿一覧のURL" ><?php the_title();?></a></p> 12<?php 13endwhile; 14endif; 15wp_reset_query(); 16?>

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

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

javascript

1jQuery(function() { 2 jQuery(".menu li").hover(function() { 3 jQuery(this).children('ul').show(); 4 }, function() { 5 jQuery(this).children('ul').hide(); 6 });//プルダウンメニューが表示されます 7 8 var page; 9 10 jQuery('.more a').on('click', function(event) { 11 //aリンクの動作を停止 12 event.preventDefault(); 13 //リンク先URLを取得 14 page = jQuery(this).attr('href'); 15 jQuery(this).parent().load(page+' div.post-content p',function(){ 16 jQuery(this).parent().children().eq(0).hide(); 17 }); 18 //続きを読む ajaxでページ遷移せずにsingle.phpの一部が表示される 19 }); 20 jQuery('a[href^=#]').click(function(){ 21 var speed = 500; 22 var href= jQuery(this).attr("href"); 23 var target = jQuery(href == "#" || href == "" ? 'html' : href); 24 var position = target.offset().top; 25 jQuery("html, body").animate({scrollTop:position}, speed, "swing"); 26 return false; 27 });//ページ内リンクすることができる 28});

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

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

recent_posts.php

php

1<?php 2$args = array( 3 'post_type' => 'post', 4 'posts_per_page' => 5, 5); 6$the_query = new WP_Query( $args ); 7if ( $the_query->have_posts() ): 8while ( $the_query->have_posts() ): 9$the_query->the_post(); 10$category = get_the_category(); 11$category_link = get_category_link( $category[0]->term_id ); 12?> 13<?php $p_slug = get_page_uri(get_the_ID()); ?> 14<p><a href="<?php echo $category_link.'#'.$p_slug; ?>" ><?php the_title(); ?></a></p> 15<?php 16endwhile; 17endif; 18wp_reset_query();

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/10/12 02:42

前回の質問を読まなくてもわかるように質問を編集されることをお勧めします。
kei344

2017/10/12 03:05

テンプレートは全て必要な内容でしょうか。「ウィジェット」と書かれていますが、「どの」ウィジェットかすら書かれていません。
gomatan1258

2017/10/12 03:10

申し訳ございません。サイドバーにあるワードプレスに最初からついているカスタムHTMLのウィジェットです。
kei344

2017/10/12 03:11

この「質問への追記・修正の依頼」の部分はデフォルトで表示されませんので、質問タイトルおよび本文を編集することをお勧めします。
kei344

2017/10/12 03:17

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

2017/10/12 04:45

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

回答2

0

ベストアンサー

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

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

  • 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件ずつの場合にはどうにかなるんではないでしょうか。
書き方が完ぺきではないと思いますが

html

1<?php 2$args = array( 3 'post_type' => 'post', 4 'posts_per_page' => 10, 5 ); 6 $the_query = new WP_Query( $args ); 7 if ( $the_query->have_posts() ): 8?> 9<ul> 10<?php 11 while ( $the_query->have_posts() ): 12 $the_query->the_post(); 13$x++; 14$pageno = $x-1; 15$pageno = $pageno/2; 16$pageno = floor($pageno)+1; 17?> 18<li><a href="<?php echo home_url('/'); ?>page/<?php echo $pageno; ?>" ><?php the_title(); ?></a></li> 19<?php endwhile; ?> 20</ul> 21<?php endif; wp_reset_query(); ?>

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

html

1<?php 2$args = array( 3 'post_type' => 'post', 4 'posts_per_page' => 20, 5 ); 6 $the_query = new WP_Query( $args ); 7 if ( $the_query->have_posts() ): 8$x =''; 9?> 10<ul> 11<?php 12 while ( $the_query->have_posts() ): 13 $the_query->the_post(); 14$x++; 15$pageno = $x; 16$pageno = $pageno/2; 17$pageno = ceil($pageno); 18?> 19<?php if($pageno==1): ?> 20<li><a href="<?php echo home_url('/'); ?>" ><?php the_title(); ?></a></li> 21<?php else : ?> 22<li><a href="<?php echo home_url('/'); ?>page/<?php echo $pageno; ?>" ><?php the_title(); ?></a></li> 23<?php endif; ?> 24<?php endwhile; ?> 25</ul> 26<?php endif; wp_reset_query(); ?>

投稿2017/10/12 07:47

編集2017/10/12 14:57
dit.

総合スコア3235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/12 08:25

頭良いですね。 もう少し早くこの回答を頂けてたら無意味な回答をしなくて済んだのですが まぁ、読解力が足りないって事なんでしょうかね。
dit.

2017/10/12 08:35

結局解決には至っていないので意図が読めたところで何にもなっていないのですよね… ただ、「最新の5件だけをリスト表示」してリンクさせるなら、カウントして条件分岐でトップページ、page2、page3だけどうにかすれば良いのかな?と今更思いました。 ちょっとパソコンの前から離れてしまったのでテストできませんが
gomatan1258

2017/10/12 09:07

自分の説明不足を読み取っていただいてありがとうございます。5件だけでなく、6,7、8,9・・・件と増えていきます。
dit.

2017/10/12 09:34

投稿が増えるのはわかりますが、そのリンクは全部の投稿分リストアップするのですか? ウィジェットの「最新の投稿」は何件表示するように設定していたのでしょうか。 最新の5件しかリスト表示しないのであれば3ページ目まで分岐させれば良いのではと思っただけです。 質問者さんのやりたいことがつかめないのですが、私だったらサイドに表示されてる記事一覧から「犬について」と書いてあるリンクを押したら「犬について」の記事が読めるべきだと思います。 「犬について」と「猫について」の一覧が出るのはどうなんでしょう? 「どうして一覧にリンクしたいのか」を明確にするわけにはいかないですか?
dit.

2017/10/12 09:34

↑の犬とか猫とかは例なのであしからず
gomatan1258

2017/10/12 10:16

当方は記事のページsingle.phpに遷移すると初めて訪問した人などがほかのページに移動しにくくなってしまうような気がします。自分でも、ワードプレスで記事のページに飛ぶとすごく違和感があります。
dit.

2017/10/12 12:20

正直「単一の投稿ページに飛ぶことに違和感がある」というのがわからないのですが、そういう風にとらえる方もいるということですね。 追記で2件ずつの場合のコードを書いてみました。 付け焼刃なのでもっといい計算の仕方があるかもしれませんが。
gomatan1258

2017/10/12 12:58

自分の意図してるものです。分かりにくい質問して申し訳ありませんでした。ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/10/12 13:11

>投稿ページに飛ぶことに違和感がある 自分もこれに関しては気持ちが分かりません。 テレビの8chを観ようとリモコンを押したら8chと10chが映るようなもんだと思います。 それが2画面なら良いですが、Webページの場合、動線は上から下なので記事一覧が抜粋表示ではなく全文表示の場合、後の記事は下に隠れて見えなくなることになります。まぁ、人それぞれなのでとやかく意見しないでおきます。 風呂に入りながらcountすれば~と考えてましたが、同じような考えで(;^ω^) というかそれしか無理でしょうね。ページ番号を持ってるわけではないので。 ところで、WordPressには/pgae/1は無く、0も無く/page/も無いのが0と同等なので、その問題と$x++;でPHP Noticeになりますよ。
dit.

2017/10/12 13:39

ay03さん、page/1の件の指摘どなたかから入るだろうなとは思っていました。 Twenty Fifteenでサイドバー部分に回答したコードを書きpage/1のままテストしたのですがうまく表示されてしまったので放置してしまいました。 1の場合は分岐させた方が丁寧でしたね。 ご指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/10/12 14:12

ループの前に$x ='';を…
dit.

2017/10/12 14:57

詰めが甘かったです…
gomatan1258

2017/10/13 08:14

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

2017/10/13 08:27

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

2017/10/13 08:49

ありがとうございます。
guest

0

質問の仕方が下手です。

前回も今回も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 06:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gomatan1258

2017/10/12 07: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 08:26 編集

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

2017/10/12 08:38

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問