useful」カテゴリーアーカイブ

特定のディレクトリだけ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バージョンを使うことができる。

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

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

<エクスポート時>

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

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

TYPE=InnoDB

ENGINE=InnoDB

に置換。

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

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

マルチサイト子サイトの管理画面wp-adminのみにbasic認証をかける

※あまりうまく行かないので検証が必要

まず、前に書いたサイトや管理画面含めて全部にかける方法。

これに関連して、管理画面(wp-admin)だけにbasic認証をかける方法です。


ここまではと同じです。

フォルダの中の構成をこういう感じにします。

一番上の階層のindex.phpはのものから中身の変更は無いです。

次に、/wp-admin/の中。

まず、.htaccess。

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options -Indexes
AuthUserFile /home/サイトのパス/hoge/wp-admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
order deny,allow

wp-admin/が追加になってますね。

.htpasswdは変更無いです。

次にindex.php

<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/

/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/../../wp-blog-header.php' );

階層が一個下がるので、../を追加してあげてください。

これでwp-adminだけにbasic認証が付きますよ。
セキュアです。

CSS3の『flexbox』だけでフッターを一番下(最下部)に固定する

flexboxだとフッター固定がかんたん!
大好きなfooterFixed.jsもあるんですけど、これ結構他JSと干渉しやすいので、これが今の所ベスト対処ですじゃ。

いい加減一発で固定されてほしいよね。

てことで以下。

<body>
<div id="wrapper">
<main>

コンテンツが入ります。

</main>

<footer>

フッターが入ります。

</footer>
</div>
</body>
body,
#wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}

footer {
margin-top: auto;
}

これだけですじゃ。
最近更新が多いのは仕事しまくってるからですじゃ。

固定ページにページャー作成する

これはホントに保存版。
固定ページに投稿一覧を出力してページャー作成したいときって、なんでいつもこんなに時間がかかるんだろう・・
ってくらいうまく行かない!!!ということで我ながらカスタマイズして動いたものをどうぞ。

これを固定ページにインクルードして読み込む。

備忘録なので、「posts_per_page」とか「cat」とか、出力されるループ処理とかは適宜変えるとよろしい。

<?php
$paged = (int) get_query_var('paged');

$args = array(
'posts_per_page' => 10,
'cat' => 3,
'orderby' => 'post_date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish'
);
$the_query = new WP_Query($args);

if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
?>
<dl>
<dt><i class="far fa-calendar-alt"></i><?php echo get_the_date('Y年m月d日'); ?></dt>
<dd>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</dd>
</dl>

<?php endwhile; else: ?>
<p><?php echo "お探しの記事、ページは見つかりませんでした。"; ?></p>
<?php endif; ?>

<?php
if ($the_query->max_num_pages > 1) {
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%/',
'current' => max(1, $paged),
'total' => $the_query->max_num_pages
));
}
wp_reset_postdata();
?>

fontawesome5でリンクの前にアイコン&アイコンの下線を消す

こんな感じです。↓
\f0daの部分はフォントオ~サムのサイトに書いてあるのを適宜入れる。

a.arr:before {
font-family: 'Font Awesome 5 Free';
content: '\f0da';
font-size: 0.9em;
margin: 0px 3px;
font-weight: 900;
}

でもこんな感じになって不格好!!

というときはコレを追記。
解決解決。

display:inline-block;

ユーザ新規追加の時に役割が出ない!

マルチサイト化されたサイトにありがちらしい、ユーザ追加画面で役割のプルダウンが出ないってやつ。
これかなり苦戦しました。

こういう状況。(英語版だけど)

これを直すにはphpMyAdminをいじる必要がある。

該当するサイトのoptionsテーブルの「option_name」のカラムに「wp_user_roles」という値があります。
これを「wp_X_user_roles」に変える。

たとえば、「wp_6_options」とか、所謂ID=6のサイトだった場合、「wp_6_user_roles」に変えてあげる、

これで出るようになる。

海外のフォーラムか何かで見つけたんだけど、ホント結局は頼りになるのは世界70億人のみんなでした。

投稿ページの「次へ>」と「<前へ」の自動リンクを同一カテゴリ内の遷移にしたい

正直、prevとnext機能の書き方はテーマ毎に千差万別です。
なので、とりあえず以下の箇所にtrueを入れておけば良いんじゃないかなって感じです。
ふわっとしてますが自分はなんとか上手く行ったのでメモです。

get_previous_post( true );

大体こういうのは「single.php」とか、凝ってるテーマだと「part-single.php」みたいなのに書いてあります。
trueっていうので同一カテゴリーのリンクを取得するみたいですね。
便利。

WordPressにおけるカテゴリーの優先度

投稿の一覧出力にカテゴリーの見出しを付けるで出力したい投稿にカテゴリーを付与しました。
しかし、カテゴリー関係なく全部の投稿を一括でarchiveページに表示したいとき少し厄介です。

まずarchive.phpによって生成されるarchiveページは1カテゴリしか表示できないです。(うまくいかないから多分)
なので、大体は各投稿にarchiveページ用の共通カテゴリーをもう一つ付与してその共通カテゴリーのarchiveページということで一括一覧表示する対応だと思いますが、上記の投稿の一覧出力にカテゴリーの見出しを付けるをやろうとすると、なぜか共通カテゴリーの方が優先されてユニークなカテゴリが取得できません。
(ユニークとは言ってますが、共通カテゴリと差別化するだけで実際一個一個違うわけではありません)

なぜか調べたところ、今回共通カテゴリは「Information」というアルファベットにしてました。
他のユニークなカテゴリは日本語でした。
どうやら、get_the_categoryで取得するカテゴリーはアルファベット(AtoZ)→日本語(五十音)の順で優先度が決まるみたいです。
実際、適当な漢字にしたら期待される結果を得ることができました。でも、どうしてもカテゴリスラッグをアルファベットにしたいときってあると思います。
今回がそれです。

そこで、不本意ですがプラグインの力を借りました。

Category Order and Taxonomy Terms Order

です。

なんか、これ何かしらどうにかしたらプラグイン使わずともできるんじゃない?って思いますが、自分では時間がかかりすぎます(非力)
これでカテゴリーの順序(優先度)を変更できるので期待される結果を得ることができます。

投稿の一覧出力にカテゴリーの見出しを付ける

こゆやつ。

まずWordPressのカテゴリを作るとこから始める。

スラッグ名=$catslug。

$catnameは設定した日本語とかのカテゴリ名が出るよ。

私が作ったやつ。
これを出したいところに入れる。

<div class="pr_area">
<h2>Information</h2>
<div class="pr_content">
<?php
$posts = get_posts(array(
'posts_per_page' => 5, // 表示件数
));
?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
<?php
$cat = get_the_category();
$catname = $cat[0]->cat_name; //カテゴリー名
$catslug = $cat[0]->slug; //スラッグ名
?>

<p class="newslist"><span class="time"><?php the_time('Y/m/d') ?></span><span class="news_cat <?php echo $catslug; ?>"><?php echo $catname; ?></span><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p>

<?php endforeach; endif; ?>
<div class="btn_center">
<a class="button" href="<?php echo home_url(); ?>/category/news/">一覧はこちら</a>
</div>
</div>
</div>

CSS

取得したカテゴリスラッグ名分だけ、以下のul li span.cat-a を作る。
cat-aのところは適宜スラッグ名を入れる。

ul {
list-style: none;
margin: 0;
padding: 0;
}
ul li {
clear: both;
margin: 0 0 1em;
}
ul li span {
display: block;
float: left;
width: 6em; /*カゴテリー名による*/
margin: 0 10px 10px 0;
padding: 5px;
text-align: center;
font-size: 10px;
}
ul li span.cat-a {
background: #e3efef;
}
ul li span.cat-b {
background: #efe3ec;
}
ul li span.cat-c {
background: #efefe3;
}
ul li span.ymd {
display: inline;
float: none;
padding: 0 5px;
font-size: 13px;
color: #999;
}