php

PHP

Web制作のための備忘録
PHPまとめ

2019.05.13

WordPressのタイトルと本文の文字数制限

タイトルの文字数制限

文字数50で表示

<?php echo mb_substr($post->post_title, 0, 50); ?>

文字数50で制限して、それ以上は省略させる

<?php echo mb_substr($post->post_title, 0, 50).'…'; ?>

文字数100で制限して、100文字以内ならそのまま、100文字以上なら省略させる

<?php
if ( mb_strlen( $post->post_content, 'UTF-8' ) > 100 ) {
  $content = mb_substr( $post->post_content, 0, 100, 'UTF-8' );
  echo $content . '…';
} else {
  echo $post->post_content;
}
?>

本文の文字数制限

本文の文字数を制限して、HTMLタグを削除して表示

タイトルと同様に文字数100で制限して、100文字以内ならそのまま、100文字以上なら省略させる場合はHTMLタグを削除する必要がある。

<?php
if ( mb_strlen( $post->post_content, 'UTF-8' ) > 100 ) {
  $content = mb_substr( strip_tags( $post->post_content ), 0, 100, 'UTF-8' );
  echo $content . '…';
} else {
  echo strip_tags( $post->post_content );
}
?>

本文の文字数を制限して、HTMLタグを削除、さらに改行コードも削除して表示

HTMLタグを削除しただけでは、改行されて表示されてしまい見た目が良くない場合は以下のコードで表示させる。

<?php
if ( mb_strlen( $post->post_content, 'UTF-8' ) > 100 ) {
  $content = str_replace( '\n', '', mb_substr( strip_tags( $post->post_content ), 0, 100, 'UTF-8' ) );
  echo $content . '…';
} else {
  echo str_replace( '\n', '', strip_tags( $post->post_content ) );
}
?>
2018.06.15

WordPressでカテゴリ情報を表示する方法

WordPressでは、カテゴリ情報を取得・表示するには以下の方法がある。
記事の属するカテゴリの他に、親カテゴリや祖先カテゴリを取得したい場合があるが取得方法が違う。

現在のカテゴリ取得

<?php
$cats = get_the_category(); //現在のカテゴリーを取得
$cat = $cats[0];
$cat_id   = $cat->cat_ID; //カテゴリーIDを表示
$cat_name = $cat->cat_name; //カテゴリー名を表示
$cat_slug = $cat->category_nicename; //スラッグを表示
?>

親カテゴリ取得

<?php 
$cats = get_the_category(); //現在のカテゴリーを取得
$cat = $cats[0];

if( $cat->parent ){ //親カテゴリの場合
  $parent = get_category( $cat->parent );
  echo $parent->cat_ID; //カテゴリーIDを表示
  echo $parent->cat_name; //カテゴリー名を表示
  echo $parent->slug; //スラッグを表示
} else {
  echo $cat->cat_ID; //カテゴリーIDを表示
  echo $cat->cat_name; //カテゴリー名を表示
  echo $cat->slug; //スラッグを表示
}
?>

祖先カテゴリ取得(投稿記事で表示させる)

<?php
$cats = get_the_category($post->ID); //現在の投稿記事のIDからカテゴリー情報を取得
$cat = $cats[0]; //複数登録されている場合、一番最初のカテゴリー情報を取得
$catName = $cat->cat_name; //現在表示のカテゴリー名
$catSlug = $cat->slug; //現在表示のスラッグ
$catParent = $cat->parent; //親カテゴリーのID。なければ0。
$thisCat = $cat->cat_ID; //現在表示のカテゴリーID

if( $catParent == 0){ //一番上の親カテゴリーなら
  echo $thisCat; //カテゴリーID表示
  echo $catName; //カテゴリー名表示
  echo $catSlug; //スラッグ表示
} else {
  $ancestor = array_pop(get_ancestors( $thisCat, 'category' )); //配列の一番最後の値(一番上のカテゴリーID)を取得
  echo $ancestor; //カテゴリーID表示
  echo get_cat_name($ancestor) -> cat_name; //カテゴリー名表示
  echo get_category($ancestor) -> slug; //スラッグ表示
}
?>

祖先カテゴリ取得(カテゴリーアーカイブで表示させる)

<?php
$cat = get_queried_object(); //カテゴリーオブジェクトを取得
$catName = $cat->cat_name; //現在表示のカテゴリー名
$catSlug = $cat->slug; //現在表示のスラッグ
$catParent = $cat->parent; //親カテゴリーのID。なければ0。
$thisCat =  $cat->cat_ID; //現在表示のカテゴリーID
 
if( !$catParent ){ //現在のページが一番上の親カテゴリーなら(0なら)
  echo $thisCat; //カテゴリーID表示
  echo $catName; //カテゴリー名表示
  echo $catSlug; //スラッグ表示
} else {
  $ancestor = array_pop(get_ancestors( $thisCat, 'category' )); //配列の一番最後の値(一番上のカテゴリーID)を取得
  echo $ancestor; //カテゴリーID表示
  echo get_cat_name($ancestor) -> cat_name; //カテゴリー名表示
  echo get_category($ancestor) -> slug; //スラッグ表示
}
?>
2018.03.26

WordPressで投稿・固定ページ内にPHPファイルを読み込ませる

WordPressにて投稿記事や固定ページにPHPファイルを読み込ませたい場合がある。
そのままコードを挿入しても使用できないので、ショートコードを利用する。

まずは、functions.phpに以下のコードを追記

<?php
function Include_my_php($params = array()) {
  extract(shortcode_atts(array(
    'file' => 'default'
  ), $params));
  ob_start();
  include(get_theme_root() . '/' . get_template() . "/$file.php");
  return ob_get_clean();
}
add_shortcode('myphp', 'Include_my_php');
?>

次に、読み込ませたいPHPファイルを作成しテーマファイル内にアップロード
投稿記事や固定ページの読み込ませたい任意の箇所に以下のコードを記述する。

[myphp file='hogo']
2018.03.03

WordPressでCSSやJSファイルをfunctions.phpで読み込む方法

WordPressにおいて、jsやcssなどをheadやfooterでなくfunctions.phpにて読み込み方法

CSSの読み込み

function my_style() {
  wp_enqueue_style( 'my-style', get_template_directory_uri() . '/css/my-style.css', array(), '1.0', all );
}
add_action( 'wp_enqueue_scripts', 'my_style' );
  • array()・・・このスタイルシートの前に読み込まれるファイル名を指定
  • 1.0・・・スタイルシートのバージョン
  • all・・・スタイルシートの対応メディア

JSの読み込み

function my_script() {
  wp_enqueue_script( 'my-script', get_template_directory_uri() . '/js/my_script.js', array(), '1.0.0', false );
}
add_action( 'wp_enqueue_scripts', 'my_script' );
  • array()・・・このスクリプトの前に読み込まれるファイル名を指定
  • 1.0.0・・・スクリプトのバージョン
  • false・・・スクリプトの挿入位置(falseであればhead内、trueであればfooter内)

どちらも、ファイルパス前の記述は読み込むファイルのハンドル名。

2018.01.14

WordPressのアイキャッチ画像を表示する

WordPressでアイキャッチ画像を表示するために、まずはアイキャッチ画像を有効にしておく。
これを書いておかないとアイキャッチ画像が使えるようにならないのでfunctions.phpに必ず書いておくこと。

// アイキャッチ画像を有効にする
add_theme_support( 'post-thumbnails' );

投稿画面で設定したアイキャッチ画像を表示する場合、通常は以下のように使用する。

<?php if(have_posts()): while(have_posts()): the_post(); ?>
  <?php the_post_thumbnail( 'thumbnail' ); ?>
<?php endwhile; endif; ?>

アイキャッチ画像のサイズはthumbnail,medium,large,fullの4種類から設定する。
アイキャッチ画像が設定されていない場合、事前に準備した画像を表示させる場合は、以下のように使用する。

<?php
$image_id = get_post_thumbnail_id();
$image = wp_get_attachment_image_src( $image_id, 'thumbnail' );
$src = $image[0];
$width = $image[1];
$height = $image[2];
$alt = get_post_meta( $image_id, '_wp_attachment_image_alt', true );
?>

<?php if(have_posts()): while(have_posts()): the_post(); ?>
  <?php if (has_post_thumbnail()): ?>
    <img src="<?php echo $image[0]; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" alt="<?php echo $alt; ?>"/>
  <?php else: ?>
    <img src="<?php echo get_template_directory_uri(); ?>/images/noimage.jpg">
  <?php endif; ?>
<?php endwhile; endif; ?>
2018.01.14

WordPressの投稿一覧を表示する

WordPressを扱う上で一番活用するループ処理
メインループとサブループの新着一覧表示方法をまとめておく。

メインループ(通常投稿)

<?php if(have_posts()): ?>
<dl>
  <?php while(have_posts()): the_post(); ?>
  <dt><?php the_time('Y.m.d'); ?></dt>
  <dd><a href="<?php the_permalink(); ?>"><?php the_title() ?></a></dd>
  <?php endwhile; wp_reset_query(); ?>
</dl>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>

サブループ(カスタム投稿など)

<?php
  $args = array(
    'post_type' => 'hogo', // 投稿タイプ
    'posts_per_page' => 5, // 表示件数
    'category_name' => 'news // 表示するカテゴリースラッグ
  );
  $the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) : ?>
<dl>
  <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
  <dt><?php the_time('Y.m.d'); ?></dt>
  <dd><a href="<?php the_permalink(); ?>"><?php the_title() ?></a></dd>
  <?php endwhile; ?>
</dl>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; wp_reset_postdata(); ?>
MAIL制作・お見積りのご依頼
ご相談・お問い合わせ