PHPの要点

add_filter ( ) : 何らかの処理に対して自由にフィルターをかける

add_filter (‘存在しているフィルターの名前’, ‘処理をする関数の名前’) ;

apply_filtersとadd_filterを使ってコード管理を楽にする方法 | Fantastech(ファンタステック)

これで、本文にある「バナナ」の文字がすべて「リンゴ」に変わります。

add_filter( ‘the_content’, ‘banana_to_apple’ );
function banana_to_apple( $content ) {
$content = str_replace( ‘バナナ’, ‘リンゴ’, $content );
return $content;
}

add_theme_support : WordPressの特定の機能をテーマで有効にする。


WordPress add_theme_support() で実装される機能 – Qiita

functions.phpに以下を記述することで左図の赤枠部分が管理画面に現れる。

//アイキャッチ画像を使う
add_theme_support( ‘post-thumbnails’ );
//アイキャッチ画像のサイズを設定する
 set_post_thumbnail_size( 1568, 9999 );

after_setup_theme :テーマが読み込まれた後


アクションフックやフィルターフックを設定するタイミング。
 add_action(‘after_setup_theme’,’sampletheme_setup’)
テーマが読み込まれた後に関数sample_setupを起動する。

●ワードプレスのアクションの実行順

ワードプレスで最も先に実行されるアクションにフック(Action、Hook)するには? | ワードプレスドクター (wp-doctor.jp)

●フィルターフック/アクションフック
WordPressでよく使用するアクションフックとフィルターフックの実例3選 | 東京のWeb制作会社 クーシー(COOSY)

apply_filters: フィルターを適用する

【例1】固定ページの表示

<?php $page_id = 1903; //表示したい固定ページのページID$alternative_post = get_post( $page_id );
// ↑ 投稿格納先の変数にグローバル変数の$postは使わないようにしましょう。
//メインループに置き換えられてしまう可能性があります。
 echo apply_filters(‘the_content’, $alternative_post->post_content); //固定ページの内容
?>

【例2】
$content = apply_filters( ‘the_content’, get_the_content() );

このコードは、the_contentというフィルターを通してget_the_content関数の返り値である記事本文を取得しています。

<?php apply_filters( $tag, $value, $var ... ); ?> 
$tag
 (文字列) (必須) フィルターフック名。
 初期値: なし
 $value
 (mixed) (必須) $tag に登録されたフィルター関数が変更できる値。
 初期値: なし
 $var
 (mixed) (オプション) フィルター関数へ渡す追加の変数(複数指定可)。これは関数の中で使えるが値が返されることはない。バージョン 1.5.1 以降で利用可能。
 初期値: なし

die() : プログラムを途中で止める。

[PHP] 関数や処理を途中で抜ける (関数や処理の終了) | iPentec.com
die(終了) → 「終了」と記述し終了。

foreach : 配列の要素をまとめて処理したいときに使う。

PHPでforeach文を使う方法【初心者向け】 | TechAcademyマガジン

<?php

foreach ( <配列の変数> as <各要素が格納される変数> ) {

// ループ処理をここへ記述

}
?>

たとえば $fruits という変数を作り、これを配列にします。

<?php
$fruits = [ “りんご”, “オレンジ”, “ぶどう” ];
foreach ( $fruits as $fruit ) {

print $fruit. “<br>”;

}
?>

// 配列要素のキーと値のペアを取り出すとき

foreach (<配列の変数> as <各要素のキーが格納される変数> => <各要素が格納される変数> ) {

// ループ処理をここへ記述

}

同じように $fruits 配列を使いますが、それぞれの要素がキーと値のペアを持っています。

<?php
$fruits = [ “apple” => “りんご” , ”orange” => “オレンジ”, ”grape” => “ぶどう” ];
foreach($fruit as $key => $value){

print $value . ”は英語で書くと” . $key . “です<br>”;

}
?>

PHPでforeach文を使う方法【初心者向け】 | TechAcademyマガジン

foreachループ内で2つの配列を使う。

get_page_by_title : タイトルを指定して固定ページを取得します。

get_page_by_title – WordPress私的マニュアル (elearn.jp)

<?php // 指定の固定ページの本文を抽出
$my_post = get_page_by_title ( 'フロントページ' );
echo apply_filters ( 'the_content', $my_post -> post_content );
?>

get_template_parts() : テンプレートパーツファイルを呼び込む。

【例】excerpt.phpを呼び込む。
while ( have_posts() ) : //ループ開始
the_post();
get_template_part( ‘excerpt’ ); //コンテンツを表示するテンプレートを読み込む
endwhile; //ループ終了

get_the_category_by_ID(37) : カテゴリーのタイトルを取得

指定したカテゴリIDのカテゴリ名のみ取得 | Plus WordPress

<?php echo $cat_name = get_the_category_by_ID(37); ?>

get_the_date( $format, $post ) : 投稿日を取得

WordPress 投稿日の表示方法 – by Takumi Hirashima (hirashimatakumi.com)
投稿日の表示
echo get_the_date(‘Y年n月j日’); 2021年9月4日
echo get_the_date(‘Y年n月j日'(I)); 2021年9月4日(日曜日)

if ( !defined( ‘ABSPATH’ ) ) exit; wp-config.phpまでのパス

「if ( ! defined( ‘ABSPATH’ ) ) exit;」って?【WordPressプラグイン申請】 (taupe.site)

全てのPHPファイルのコードの文頭に上記コードを記述する。

if ~ else : 条件分岐

”=” ではなく ”==”

if($row[‘hyoji’]==“on”){
           echo “\t\t<td class=’chart-zhongwen’>{$row[‘zhongwen’]}</td>\n”;
        } 
else {
            echo “\t\t<td class=’chart-zhongwen’>&nbsp</td>\n”;
        }

<input value=”???”>等、phpでのタグ内の変数の入れ方 :

<?php
echo ‘<input type=”hidden” name=”No” value=”‘, $row[‘No’], ‘”>’;   
echo ‘<div class=”td0″>’, $row[‘No’], ‘</div> ‘;
echo ‘<div class=”td1″>’;
echo ‘日本語 <input class=”td11″ type=”text” name=”Japanese” size=”65″ value=”‘, $row[‘Japanese’], ‘”>’;

is_active_sidebar() : ダイナミックサイドバーが有効か確認する

is_active_sidebar – WordPress私的マニュアル (elearn.jp)
テーマ内のsidebar.phpで使用することが多いが、ウィジェットの表示でも利用される。

if ( is_active_sidebar( 'footer' ) ) {  //ウイジットが設置されているかチェック
	dynamic_sidebar( 'footer' );
}

is_home() || is_front_page() : フロントページとその他ページとテンプレートを分ける

WordPressでホーム(トップページ)とそれ以外で表示を変えるとき | StudioBRAIN

index.php 等で以下のコードでテンプレートを使い分ける。

if ( is_home() || is_front_page() ){
      get_template_part('tmp/frontpage_content_org');   
    }
    else{
    get_template_part('tmp/list');  
    }

mb_send_mail : phpでメールを送信する

サンプルコード:誰でも実装できる!PHPでメール送信を行う方法【初心者向け】現役エンジニアが解説 | TechAcademyマガジン
解説:PHPでメール送信を行う方法:mb_send_mail() | UX MILK
マニュアル:PHP: mb_send_mail – Manual

mailform.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript" charset="UTF-8"></script>
  </head>
  <body>
    <p>
      <h2>メール送信フォーム</h2>
    </p>
    <form action="./confirm.php" method="post">
      <p>
        送信先
      </p>
      <input type="text" name="to">
      <p>
        メールのタイトル
      </p>
      <input type="text" name="title">
      <p>
        本文
      </p>
      <textarea name="content" cols="50" rows="5"></textarea>
      <p>
        <input type="submit" name="send" value="送信">
      </p>
    </form>
  </body>
</html>
confirm.php
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <?php
      mb_language("Japanese");
      mb_internal_encoding("UTF-8");
      $to = $_POST['to'];
      $title = $_POST['title'];
      $content = $_POST['content'];
      if(mb_send_mail($to, $title, $content)){
        echo "メールを送信しました";
      } else {
        echo "メールの送信に失敗しました";
      };
    ?>
  </body>
</html>

mysqli_connect : MySQLサーバーへの接続

mysqli_connect ( string $host, string $username, string $passwd, string $dbname [, int $port [, string $socket ]] )

引数 $host MySQLサーバーのホスト名を指定します。 $username MySQLのユーザー名を指定します。 $passwd ユーザーの接続するデータベースのユーザー名を指定します。 $dbname 接続するデータベース名を指定します。 $port 接続するMySQLサーバーのポート番号を指定します。 $socket 使用するソケットを指定します。 
返り値 MySQLサーバーへの接続オブジェクトを返します。

MySQLサーバーへ接続(手続き型) – mysqli_connect() – PHP入門 – Webkaru

post_class() : クラス属性を出力  

print, echo, print_r, var_dump : 各々の違い

【PHP】文字列の出力。echo、print、print_r、var_dumpの違い – みるはぴ.com (miru-happi.com)

php — PHPのecho、print、print_rの違いは何ですか? (it-swarm-ja.com)

$_request[ ] : コントロールのname属性の値がリクエストパラメータ名

PHP リクエストパラメータ $_REQUEST[‘リクエストパラメータ名’] – Qiita
submitされた際に、<input>にてnameで指定された値を格納する。
echo “\t\t<td type=’hidden’ class=’tdNo1′><input class=’main-tdNo’ name=’No‘ value='{$row[‘No’]}’></td>\n”;
$val=$_REQUEST[‘No‘];    echo”  日本語 <input type=’text’ name=’Japanese’ size=’65’ value= {$val} ><br>”;

session_start(): phpの変数データを別のphpに引き継ぐ

詳細POST:session_() – Kawana Lab (xdomain.jp)

セッション(session)をPHPで使うための基本知識を解説!|TECH PLAY Magazine [テックプレイマガジン]

phpの変数データを別のphpに引き継ぐ方法3種類

Kawana lab でのzhongwen-mainの例
<form>のsubmitを使用せずにページを遷移する場合、$_REQUESTで変数の値を引き継げない。
session_start()でサーバー内に値を保存する。複数のphpにて共通の変数を使用可能となる。

注意点 : get_header()の後にsession_start()を記述すると以下の警告が出る。(原因未検討)そのためget_header()の前に記述している。
Warning: session_start(): Cannot send session cache limiter – headers already sent

page-zhongwen-rank.php
<?php
$bb=$_REQUEST['rank'];
session_start();
    // 有効期限30日
    session_cache_expire(60 * 24 * 30);
    $_SESSION["rank"] = "$bb";
	session_start();

    if (isset($_SESSION["rank"])) {
        print "<p>";
        print "ログインID:".$_SESSION["rank"];
        print "</p>";
    }
	
	print "session:".$_SESSION["rank"];
	echo"<br>";
	print "motomoto:".$_REQUEST['motomoto'];
 echo '<META http-equiv="Refresh" content="0;URL=http://kawana.php.xdomain.jp/zhongwen-hyoji/">';//1秒後に指定のURLにジャンプする。
?>

the_contents ( ) : テンプレートタグ、現在の投稿の本文を出力

the_contents ( ) : テンプレートタグ、現在の投稿の本文を出力

テンプレートタグ/the content – WordPress Codex 日本語版 (osdn.jp)

the_ID() : 投稿IDを出力

<article id=”post-<?php the_ID(); //投稿IDを表示 ?>” <?php post_class(); //投稿のカテゴリーなどに基づきクラス属性を表示 ?>>
●特定の投稿の見栄えを変更したい場合は、CSSでこのIDを利用する。

the_post_thumbnall( $size, $attr) : アイキャッチ画像を出力

WordPress アイキャッチ画像や添付画像/ Web Design Leaves

wp_enqueue_style : 指定したスタイルシートを指定する。

WordPress CSSやJavaScriptファイルの読み込み/ Web Design Leaves
・page-zhongwen.php 親テーマのstyleに替えて子テーマのcustom-style.cssを指定している。(style.cssでもよい)
・wp_enqueue_scriptsのアクションフックとセットで使用
→これだけでは親テーマのstyleの影響がなくならない。(page^zhongwen-hyoji.php等でget_header()有り無しでcssが変わる。)

<?php add_action( ‘wp_enqueue_scripts’, ‘theme_enqueue_styles’ );
function theme_enqueue_styles() { 
 wp_enqueue_style( ‘parent-style’, get_parent_theme_file_uri() . ‘/custom-style.css’ );
}

wp_nav_menu : 記述した箇所にメニューを表示する。

メニュータグ wp_nav_menu をカスタマイズしてメガメニューの礎(いしずえ)を築く | WordPressカスタマイズ事例【100ウェブ】 (100webdesign.jp)

functions.phpにregister_nav_menues()による指定が必要。

function sampletheme_setup() {
register_nav_menus(
			[
				'menu-1' => 'メイン'

			]
		);
}
add_action( 'after_setup_theme', 'sampletheme_setup' );

<?php
wp_nav_menu( //メニューを表示
[
'theme_location' => 'menu-1',
'menu_class'     => 'main-menu',
'link_before' => '●'
]
);
?>

引数の連想配列で指定すると表示に反映される。上記の例では「●」が追加されている。

■メニューリストの縦並びを横並びにする。
 CSSに以下を追加
 li { 
   display: inline;}

カテゴリー(ページ)毎に異なるsinglar.phpを使う include()

 固有の固定ページ(id:1192)の場合、singular_jogを使用、その他の場合(Lightningの場合、固定ページ、投稿ともsingular.phpを使用)、singular_default.phpを使用するように条件設定する。

子テーマの場合は”STYLESHEETPATH ”、親テーマの場合は”TEMPLATEPATH.”と記述する。

/*singular.php*/
<?php
 $post = $wp_query->post;

if ( is_page('1192') ) {
 /* カテゴリーID1 */
 include(STYLESHEETPATH .'/singular_jog.php');

}

else {
 /* それ以外 */
 include( STYLESHEETPATH .'/singular_default.php');
 }
 ?>

オリジナルPHP制作の要点 : get_header()が機能しない。style.cssがリンクされていない。
新規 .phpファイルへのリンクの方法

■get_header()が機能しない ■新規作成のphpファイルへのリンクの方法

page-zhongwen-main.phpにて以下の対応で成立
オリジナルphpの冒頭に以下を追加
/*Template Name:Chinese-main*/

phpファイルがテンプレートであることをwordpressに認識させる。

wordpess管理画面の固定ページ設定にて以下を記入

「テンプレート」にphpにて指定したTemplate Nameが表示されるので選択する。

URLスラッグを任意に指定する。

リンク先を???.phpにしない。
×:echo'<form action=”http://kawana.php.xdomain.jp/wp-content/themes/twentynineteen_child/
  page-zhongwen- 2.php” method=”post”>’;  

〇:echo'<form action=”http://kawana.php.xdomain.jp/zhongwen-2″ method=”post”>’;  


 wordpress管理画面の固定ページ設定中でテンプレートとして認識させる必要あり。
 【WordPress】オリジナルテーマ作成中にheader.phpをget_headerで読み込めない現象 | (yutaliberty.com)
■style.cssとリンクされない
 以下を追加する。
  <link rel=”stylesheet” href=”style.css”>

表からの入力によるSQLとのデータ授受(中国語学習P) – Kawana Lab (xdomain.jp)

スラッグを取得する :$slug = $post->post_name;

WordPress スラッグ(slug)を取得 (webdesignleaves.com)

<?php
  global $post;
  $slug = $post->post_name;
?>

固定ページを投稿と共通のカテゴリーで分類する :

WordPressの固定記事にカテゴリーを設定できるようにする方法 | ソフトウェア開発日記 (lightgauge.net)

function.phpに以下を追加する。

add_action( 'init', 'my_add_pages_categories' ) ; 
function my_add_pages_categories()
{
    register_taxonomy_for_object_type( 'category', 'page' ) ;
}
add_action( 'pre_get_posts', 'my_set_page_categories' ) ;
function my_set_page_categories( $query )
{
    if ( $query->is_category== true && $query->is_main_query()){
        $query->set( 'post_type', array( 'post', 'page', 'nav_menu_item' )) ;
    }
}

演算子 : ==, =>,= 等

条件式の「==」と「===」の意味と違いの3つのポイント | PLUGMIZE(プラグマイズ)

演算子役割
 == 等しい
 != 等しくない
 > より多い
 >= より多いか等しい(以上)
 < より少ない(未満)
 <= より少ないか等しい(以下)

特定の固定ページ、投稿、カテゴリーのリンクを取得 :<?php echo get_page_link(2985); ?>

<?php echo get_page_link(2985); ?>

<?php echo get_category_link(37); ?>

特定の固定ページ、投稿を表示する :

WordPressで「特定の固定ページ」を任意の場所に呼び出す方法 | OKI-Site LABO

<?php
$page_id = 191;//ページIDを指定
$page = get_post($page_id, 'OBJECT', 'raw'); //指定のページIDから情報を取得
$page_include = apply_filters( 'the_content',$page->post_content); //ページの本文をフィルターフックで整形
echo $page_include; //出力
?>