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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

549閲覧

このページのPHPのコードを、function.phpにどうやって移したらいいのか?

_magurochan

総合スコア13

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/08/23 19:15

編集2019/09/19 04:59

このページのPHPのコードを、function.phpにどうやって移したらいいのか?
教えてください。
https://teratail.com/questions/127984#

以下、コピペしたものです。

PHP

1<?php 2 global $post; 3 $my_posts= get_posts(array( 4 'post_type' => array('post','news','rec'), //post_typeを複数指定 5 'numberposts' => 5 //表示させる記事数 6 )); 7 foreach($my_posts as $post):setup_postdata($post); 8 ?> 9<div class="news_box cFix"> 10 <div class="news_day"><?php echo get_the_date("Y.n.j"); ?></div> 11 <div class="<?php echo esc_html(get_post_type_object(get_post_type())->name); ?>"><?php echo $cat_name; ?></div> 12 <div class="news_txt"> 13 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><?php echo esc_html(get_post_type_object(get_post_type())->label ); ?> 14 </div> 15</div> 16 17<?php endforeach; ?>

またこういったときの、コピペの方法について、参考ページがあったら教えてください。

PHP

1function whats_new() 2{ 3 4 global $post; 5 $my_posts= get_posts(array( 6 'post_type' => array('post','page'), //post_typeを複数指定 7 'numberposts' => 10 //表示させる記事数 8 )); 9 foreach($my_posts as $post):setup_postdata($post); 10echo ' 11 <div class="news_day">'. get_the_date("Y.n.j") .'</div> 12<div class="'. esc_html(get_post_type_object(get_post_type())->name) .'">'. esc_html(get_post_type_object(get_post_type())->label) 13 ,esc_html(the_category(' ',' ','')) .' </div> 14 <div class="news_txt"><a href="'. get_permalink() .'">'. get_the_title() .'</a></div>' ; 15 16endforeach ; 17 18}

#追記
CHERRYさんの回答でここまで進められました。

2019.8.1 投稿 投稿リンク 2019.8.1 固定ページ 固定ページリンク

と出力されました。

あともう一歩、
下記の様に、投稿の場合のときのみ、仕切りを入れて、かつカテゴリ名を表示させたいです。

2019.8.1 投稿 / カテゴリー名 リンク付き投稿タイトル

こういった形にするには、どうしたらよいでしょうか?

#追記2
hotaruikaさんのコードを使わせてもらいました。

  • 投稿と、固定ページと、カスタム投稿タイプportfolio
  • foreachのところ、元のコードだと、**Warning: Invalid argument supplied for foreach()が出たので、(array)**を追加しました。
  • **最後に、**ショートコード にしました。

すると

2019.8.1 固定ページ 固定ページリンク

foreachに問題があるのか、記事が一つしか表示されなかったです、

実際のコードです。

php

1 2function my_get_posts() 3{ 4 $my_posts= get_posts( 5 array( 6 'post_type' => array('post','page','portfolio'), //post_typeを複数指定 7 'posts_per_page' => 10 //表示させる記事数 8 ) 9 ); 10 return $my_posts; 11} 12 13// 指定した $post_id のカテゴリ一覧を出力する関数 14function my_echo_categories( $post_id ) 15{ 16 $categories = get_the_category(); 17 foreach ( $categories as $category ) 18 { 19 $result=""; 20 $result.='<ul>'; 21 $result.='<li>' . $category->name . '</li>'; 22 $result.='</ul>'; 23 24 return $result; 25 } 26} 27 28 29 30// 取得した投稿データ群($my_posts)を使って出力する関数 31function whats_new( $my_posts ) 32{ 33 // 投稿データ群を1件ずつ処理 34 foreach((array)$my_posts as $post):setup_postdata($post); 35 36 // 投稿データを取得 37 $post_id = $post->ID; 38 $post_type_name = get_post_type_object(get_post_type())->name; 39 $post_type_label = get_post_type_object(get_post_type())->label; 40 $post_date = get_the_date("Y.n.j"); 41 $post_href = get_permalink(); 42 $post_title = get_the_title(); 43 44 // 出力 45 $result =""; 46 $result.='<div>'; 47 $result.='<div class="news_day">'. $post_date .'</div>'; 48 $result.='<div class="'. $post_type_name .'">'. $post_type_label .'</div>'; 49 if( $post_type_name=='post' ){ // 投稿の場合だけカテゴリを出力 50 my_echo_categories( $post_id ); 51 } 52 $result.='<div class="news_txt"><a href="'. $post_href .'">'. $post_title .'</a></div>'; 53 $result.='</div>'; 54 55 56 return $result; 57 endforeach ; 58 59 60 wp_reset_postdata(); 61} 62 63add_shortcode('whats_new2','whats_new');

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

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

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

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

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

m.ts10806

2019/08/24 03:26

何を実現しようとしているコードなのでしょうか。 「コピペしました」「コピペの方法」を聞いたところでそれは実現するのでしょうか。 functions.phpの機能や実装についてはドキュメントにあるはずですし解説サイトも多いはずです。 何も調べてませんか?大抵のことは他人に聞くより自分で調べて試した方が早く済みますよ。結局手元で試さなければならないわけですし。 試行錯誤した結果を追記してください。 https://teratail.com/help/question-tips
_magurochan

2019/08/30 12:12

・何を実現しようとしているコードか? 新着情報の取得と、それをトップページに表示するコードです。
guest

回答2

0

基本的には、プログラムコードが何をしているか(どの様な動作をしているか)を理解して、元のプログラムコードが関数として動作するように書き換えて、関数として、functions.php に記載することになると思います。


大雑把に言えば、

function 関数名() { 「元のコード」を php のコードに書き直したもの }

の形に書き換えるわけです。

そして、functions.php に記載した関数を実行したい場所(テンプレートファイル)で、 関数名(); と記載して呼び出します。


質問にあるような html と php コードが混在するようなコードの場合は、関数定義の中は、php のコードだけになるように 元のコードの html 部分を php の echo 等で出力するように変更する必要があります。( <?php?> を使わないようにする。 )

例:

<div class="news_day"><?php echo get_the_date("Y.n.j"); ?></div>

であれば、

echo '<div class="news_day">'. get_the_date("Y.n.j") .'</div>';

のように html も含めた echo 文に変更します。

投稿2019/08/27 05:43

CHERRY

総合スコア25171

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

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

0

function.phpにどうやって移したらいいのか?

CHERRYさんのおっしゃる通りで、functions.php には出力や取得のための関数だけを書いておきます。function xx(){} というやつです。
で出力したいテンプレートでその関数を実行するという感じです。


こういった形にするには、どうしたらよいでしょうか?

下記でいけますか?(カテゴリ名のところはCSSでご調整ください)

↓functions.php に記載

// 欲しい投稿データ群を取得する関数 function my_get_posts() { $my_posts= get_posts(array( 'post_type' => array('post','page'), //post_typeを複数指定 'numberposts' => 10 //表示させる記事数 )); return $my_posts; } // 指定した $post_id のカテゴリ一覧を出力する関数 function my_echo_categories( $post_id ) { $categories = get_the_category(); foreach ( $categories as $category ) { echo '<ul>'; echo '<li>' . $category->name . '</li>'; echo '</ul>'; } } // 取得した投稿データ群($my_posts)を使って出力する関数 function whats_new( $my_posts ) { // 投稿データ群を1件ずつ処理 foreach($my_posts as $post):setup_postdata($post); // 投稿データを取得 $post_id = $post->ID; $post_type_name = get_post_type_object(get_post_type())->name; $post_type_label = get_post_type_object(get_post_type())->label; $post_date = get_the_date("Y.n.j"); $post_href = get_permalink(); $post_title = get_the_title(); // 出力 echo '<div>'; echo '<div class="news_day">'. $post_date .'</div>'; echo '<div class="'. $post_type_name .'">'. $post_type_label .'</div>'; if( $post_type_name=='post' ){ // 投稿の場合だけカテゴリを出力 my_echo_categories( $post_id ); } echo '<div class="news_txt"><a href="'. $post_href .'">'. $post_title .'</a></div>'; echo '</div>'; endforeach ; }

↓出力したいテンプレート (single.phpなど) に記載

// 出力を実行 whats_new( my_get_posts() );

投稿2019/08/30 23:22

編集2019/08/30 23:26
hotaruika

総合スコア57

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問