▶ 技術めも
WordPress設定
構築
wp-cli
INSTALL
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
UPDATE
cd /path/to/wordpress/
wp core version --extra
wp core update
wp core update-db
PLUGIN UPDATE
wp plugin status
wp plugin update nginx-champuru
WP INSTALL
wp core download --locale=ja
wp core config --dbname=wordpress --dbuser=wordpress_user --dbpass=wordpress_pass --dbhost=localhost --locale=ja
コマンドラインから WordPress を操作する wp-cli 初級編
WordPress DB 作成
mysql -u root -p
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4;
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wp_user@localhost IDENTIFIED BY 'wp_pass';
どこからでも接続OK(MYSQL5.7以降)
CREATE USER 'db_user'@'%' IDENTIFIED WITH mysql_native_password BY 'db_pass';
GRANT ALL PRIVILEGES ON db_name.* TO 'db_user'@'%';
FLUSH PRIVILEGES;
バージョン8以降
mysql -u root -p
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4;
mysql> CREATE USER 'wp_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'wp_pass';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
運用
DBバックアップ
mysqldump -u mysql_user -p mysql_password --all-databases | gzip > $FILE_NAME
10日以上経過しているバックアップデータを削除
find $BACKUP_PATH -type f -name "mysql_dump_*.sql.gz" -mtime +9 -daystart | xargs rm -rf
性能&セキュリティ
IP制限
/wp-admin/ に .htaccess 設置
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
wp-login.php のあるディレクトリ .htaccess 設置
<Files "wp-login.php">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>
Admin Cookie
/wp-admin/ に .htaccess 設置
SetEnvIf Cookie cookieName=\x22?★★★★\x22? site_access_allow
Order deny,allow
Deny from all
Allow from env=site_access_allow
wp-login.php のあるディレクトリ .htaccess 設置
<Files wp-login.php>
SetEnvIf Cookie cookieName=\x22?★★★★\x22? site_access_allow
Order deny,allow
Deny from all
Allow from env=site_access_allow
</Files>
テーマの functions.php
// xmlrpc.phpの無効化
add_filter(‘xmlrpc_enabled’, ‘__return_false’);
// X-Pingback のヘッダー情報消去
function remove_x_pingback($headers) {
unset($headers['X-Pingback']);
return $headers;
}
add_filter('wp_headers', 'remove_x_pingback');
// meta のバージョン非表示
remove_action('wp_head','wp_generator');
// css, js リンクのバージョン非表示
function vc_remove_wp_ver_css_js( $src ) {
if ( strpos( $src, 'ver=')) $src = remove_query_arg('ver', $src );
return $src;
}
add_filter('style_loader_src', 'vc_remove_wp_ver_css_js', 9999);
add_filter('script_loader_src', 'vc_remove_wp_ver_css_js', 9999);
function show_adsense()
{
return '<small>スポンサーリンク</small>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 320x250 テスト -->
<ins class="adsbygoogle"
style="display:inline-block;width:300px;height:250px"
data-ad-client="XX-XXX-XXXXXXXXXX"
data-ad-slot="XXXXXXXX"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>';
}
add_shortcode('adsense', 'show_adsense');
ブログ内容に [adsense]
で広告表示
.htaccess
xmlrpc へのアクセス不可
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
画像キャッシュ
<Files ~ ".(gif|jpe?g|png|ico)$">
Header set Cache-Control "max-age=10800, public"
</Files>
wp-config.php
// wp-cron を無効
define('DISABLE_WP_CRON', true);
// プラグインの編集やテーマの編集を無効化
define('DISALLOW_FILE_EDIT' ,true);
// プラグインやテーマのアップグレードを無効化
define('DISALLOW_FILE_MODS', true);
プラグイン
- TinyMCE Advanced
- WP Nofollow Post
Open Graph protocol
header.php の上に記載
<!-- OGP -->
<?php if(is_front_page()): ?>
<meta property="og:title" content="★トップページタイトル★" />
<?php else: ?>
<meta property="og:title" content="<?php the_title(); ?> | <?php bloginfo('name'); ?>" />
<?php endif; ?>
<meta property="og:locale" content="ja_JP" />
<meta property="og:type" content="blog" />
<meta property="og:url" content="<?php the_permalink(); ?>" />
<?php
if (! is_front_page()){
if(have_posts()): while(have_posts()): the_post();
echo '<meta property="og:description" content="'.mb_substr(get_the_excerpt(), 0, 100).'" />'."\n";
endwhile; endif;
} else {
echo '<meta property="og:description" content="'; bloginfo('description'); echo '" />'."\n";
}
?>
<meta property="og:site_name" content="<?php bloginfo('name'); ?>" />
<?php
$str = $post->post_content;
$searchPattern = '/<img.*?src=(["\'])(.+?)\1.*?>/i';
if (is_front_page()){
echo '<meta property="og:image" content="'; bloginfo("template_directory"); echo '/img/top_og_image.jpg" />'."\n";
} else if (has_post_thumbnail() && !is_archive()){
$image_id = get_post_thumbnail_id();
$image = wp_get_attachment_image_src( $image_id, 'full');
echo '<meta property="og:image" content="'.$image[0].'" />';echo "\n";
} else if ( preg_match( $searchPattern, $str, $imgurl ) && !is_archive()) {
echo '<meta property="og:image" content="'.$imgurl[2].'" />';echo "\n";
} else {
echo '<meta property="og:image" content="'; bloginfo("template_directory"); echo '/img/default_og_image.jpg" />'."\n";
}
?>
<!-- /OGP -->
SEO
URL
「パーマリンク設定」>「カスタム構造」にチェックを入れて /%postname%
参考
WordPressのxmlrpc.phpとwp-cron.phpを無効化
WordPressのwp-config.phpで出来る事いろいろ