投稿者「あたい」のアーカイブ

特定タームの時に行う処理

カスタム投稿タイプのカスタムタクソノミーにて、特定のタームの時に行いたい処理について。
例えば、ターム別にカスタム投稿一覧のアイキャッチを変えたいなど。

基本はこれです。is_termとかも検索ヒットしましたが、うまくいきませんでした。has_termです。

if( has_term( 'ターム', 'タクソノミ' ) ){
'特定のタームを持つ場合の処理';
}

アイキャッチをターム別に変えたいとき。

<?php if (has_post_thumbnail()): ?>
<?php the_post_thumbnail( array(270,170) ); ?> //アイキャッチ指定時の画像
<?php elseif(has_term("aras_inno","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_aras.png" width="270" height="170"/>
<?php elseif(has_term("ms_azure","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_azure.png" width="270" height="170"/>
<?php elseif(has_term("ms_pp","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_mpp.png" width="270" height="170"/>
<?php elseif(has_term("idem","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_idempiere.png" width="270" height="170"/>
<?php elseif(has_term("holo","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_hololens.png" width="270" height="170"/>
<?php elseif(has_term("open","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_openid.png" width="270" height="170"/>
<?php else: ?><img src="<?php echo home_url(); ?>/images/common/no_image_s.png" width="270" height="170"/>
<?php endif; ?>

カスタム投稿タイプのURLを動的にする

カスタム投稿タイプのURLリライトに関連して、カスタム投稿タイプのURLを動的にしたいときのやり方です。
プラグインを使用します。

Custom Post Type Permalinks

URLを、https://ドメイン/news_list/news/ターム名/カスタム投稿タイプ個別記事スラッグ/にしたいですよね。

こういう時は、このプラグインを有効化して、設定>パーマリンク設定 からページの下部に行くと、追加したカスタム投稿タイプのパーマリンク設定欄が出てくるので、ここで「/%case_cat%/%postname%/」を追加してあげれば問題ないです。%case_cat%は、カスタムタクソノミー名です。

パーマリンクの書き換えをなるべくせずに終わる案件でありたいですよね。

カスタム投稿の記事ページを固定ページの子ページとして設定したい

例えば、固定ページ「news_list」の下層(子ページ)として、カスタム投稿タイプの記事ページ(/news20210425/)を設定したいとき多いと思います。

https://www.***.com/news_list/news20210425/のような感じです。

こういう場合、カスタム投稿タイプを追加した記述に、下記のrewriteを追加します。

register_post_type( 'news', /* post-type */
array(
'labels' => array(
'name' => '更新情報',

//省略

),

//省略

'rewrite' => array('slug' => 'news_list/news','with_front' => false)
)
);

ポイントは、

'rewrite' => array('slug' => 'news_list/news','with_front' => false)

ですが、これでは「https://www.***.com/news_list/news/news20210425/」になってしまうでは?という感じですが、これは仕方がないのです・・・
ゼロから私が構築していない(他社が作成した)サイトでやったので分からないのですが、’news_list’だけにするとURL形式は正しくなるのですがリライトされたURLに対してWordPressが混乱するのか、news_listページ用の固定ページテンプレートがindex.phpが当たってしまい、うまくいかなかったです。
index.phpの中で、

if(is_page('news_list')

で表示するテンプレートを切り替えても良かったのですが、基本的に不安定な動きなのでやめました。
これ、自分でゼロから作ったサイトでいつか検証してみたいです。

カスタム投稿タイプを複数追加するとき

ちょっとクセがあるカスタム投稿タイプについてです。
カスタム投稿タイプを一つ追加するときは下記で大丈夫なのですが・・・

add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'news',//カスタム投稿タイプのスラッグ
array(
'labels' => array(
'name' => __( '更新情報' ),//管理画面での表示
'singular_name' => __( '更新情報' )//同じ
),
'public' => true,
'menu_position' =>5,
)
);
}

複数載せるときのコツ

//カスタム投稿タイプの追加
add_action( 'init', 'create_post_type' );
function create_post_type() {

//カスタム投稿タイプ1(ここから)
register_post_type(
'custom1',
array(
'labels' => array(
'name' => __( 'カスタム投稿タイプ1' ),
'singular_name' => __( 'カスタム投稿タイプ1' )
),
'public' => true,
'menu_position' =>5,
)
);
//カスタム投稿タイプ1(ここまで)

//カスタム投稿タイプ2(ここから)
register_post_type(
'custom2',
array(
'labels' => array(
'name' => __( 'カスタム投稿タイプ2' ),
'singular_name' => __( 'カスタム投稿タイプ2' )
),
'public' => true,
'menu_position' =>5,
)
);
//カスタム投稿タイプ2(ここまで)

}

下の箇所を増やせば増やすほど増えます。

register_post_type(
'custom1',
array(
'labels' => array(
'name' => __( 'カスタム投稿タイプ1' ),
'singular_name' => __( 'カスタム投稿タイプ1' )
),
'public' => true,
'menu_position' =>5,
)
);

WordPressサイトがforbiddenになる

WordPressのサイトがforbiddenになるときは、wp-config.phpや.htaccessなどのパーミッションを確認しましょう。
それでもダメな場合、利用しているレンタルサーバー独自に必要な記述が.htaccessに入っていない場合があるので、それも探してみましょう。

特定のディレクトリだけPHPバージョンを変える方法

さくらインターネットにて、特定のディレクトリ(サイト)だけPHP5.2で動かしたいときの方法です。
(さくらインターネットコントロールパネル上の全体のPHPバージョン設定は7.4です)

【用意するファイル】

php.cgi
.htaccess

php.cgiの中身

#!/bin/sh
#exec /usr/local/php/5.6/bin/php-cgi
#exec /usr/local/php/5.4/bin/php-cgi
#exec /usr/local/php/5.3/bin/php-cgi
exec /usr/local/php/5.2/bin/php-cgi
#exec /usr/local/php/4.4/bin/php-cgi

文字コードをUTF-8かEUC-JPにしないと500エラーになるって聞いたけど、SJISでも動きました。
パーミッションだけ755にするのを忘れない。

.htaccessの中身

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

新しく.htaccess作るか、既存だったら追記する。

これらをサーバーに上げると、任意のPHPバージョンを使うことができる。

リンクの範囲を親要素のサイズにする

aタグに下記を追加するだけ!

display: block;

使いまわししまくると親要素サイズにする必要がないリンクもそうなるから気を付けて

iPhoneでvideoタグが再生ボタンしか出ないときの対処法

根本的解決じゃない。

videoタグで動画読み込んだら何故かこんな風に再生ボタンしかでない・・なんで・・となったときの対処法

結果こうしました。

<video controls>
<source src="video/sample.mp4#t=0.01" type="video/mp4">
<p>※お使いのブラウザは動画再生に対応しておりません。</p>
</video>

ようするにこういうことです。
iPhoneだとタップすると再生はするのに・・ってことだったので既に再生されているテイにするために開始時間を0.01で設定しました。
autoplayを入れるとちゃんと動くのは既に再生開始されているからだったのだと思います。

<source src="動画ファイル.mp4#t=[開始時間],[終了時間]" type='video/mp4'>

参考

src=”動画ファイル.mp4#t=10,30″ →10秒地点から30秒地点までの範囲を再生
src=”動画ファイル.mp4#t=,30″ →最初から30秒時点までの範囲を再生
src=”動画ファイル.mp4#t=,01:00:00″ →最初から1時間までの範囲を再生
src=”動画ファイル.mp4#t=10″ →10秒時点から最後まで再生

なんか投稿がうまく出ないときの最強記述

ショートコードとかで外部PHPから投稿一覧出力の記述を読み込んだ時に、何故かその出力させたページのタイトルがお知らせ一覧に出る!なんで!?!?
ということで、恐らくその外部PHPを包んでるPHPとの兼ね合いとかだと思うんですけど、まあなんというかこれで上手くいったので貼っておきます。
なんでかな~・・?

<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => 10
);
$st_query = new WP_Query( $args );
?>
<?php if ( $st_query->have_posts() ): ?>
<?php while ( $st_query->have_posts() ) : $st_query->the_post(); ?>
<?php the_time( 'Y年m月d日' ); ?><br />
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
<?php endwhile; ?>
<?php else: ?>
<p>新しい記事はありません</p>
<?php endif; ?>

古いバージョンのMySQLから新しいバージョンにダンプする時の対応

古いバージョンのMySQL(ここでは5.5)から新しいバージョン(5.7)にSQLデータベースをインポートする時のコツ!

<エクスポート時>

  • 「他のデータベースシステムまたは古いMySQLサーバとの互換性」を「MYSQL40」にする
  • 他はいつもどおり(あとで中身を編集するためzipにはしない)

そのあと、エクスポートしたSQLファイルを下記のように置換する!

TYPE=InnoDB

ENGINE=InnoDB

に置換。

TYPE~は5.7だとサポートしてないかららしい。

そしてインポートする。これはいつもどおり。