とりあえず持ってる WordPress 環境は対処済み。
]]>いいねぇ
ここも重要な備忘録満載なのでクラッシュすると怖い。
定期的にDBのバックアップは取っているけど、
できればミラーリング環境を用意したい。
こんな時どうしたらいいかわからないの。
そんな時に WordMove を使えば良いと思うよ。
まあ、まだ使ってはいないんですけどね(笑)
忘れないように取り急ぎ、記事にしておきます。
ii php-apc 4.0.7-1 all APC User Cache for PHP 5 (transit ii php-gettext 1.0.11-1 all read gettext MO files directly, w ii php-tcpdf 6.0.093+dfsg all PHP class for generating PDF file ii php5 5.6.24+dfsg- all server-side, HTML-embedded script ii php5-apcu 4.0.7-1 armhf APC User Cache for PHP 5 ii php5-cli 5.6.24+dfsg- armhf command-line interpreter for the ii php5-common 5.6.24+dfsg- armhf Common files for packages built f ii php5-gd 5.6.24+dfsg- armhf GD module for php5 ii php5-json 1.3.6-1 armhf JSON module for php5 ii php5-mcrypt 5.6.24+dfsg- armhf MCrypt module for php5 ii php5-mysql 5.6.24+dfsg- armhf MySQL module for php5 ii php5-readline 5.6.24+dfsg- armhf Readline module for php5
php5 関連を削除
$ apt-get remove php5*
以下のパッケージは「削除」されます: libapache2-mod-php5 php-apc php-gettext php-tcpdf php5 php5-apcu php5-cli php5-common php5-gd php5-json php5-mcrypt php5-mysql php5-readline phpmyadmin
先頭に rc とついていれば削除されている。
rc php5-apcu 4.0.7-1 armhf APC User Cache for PHP 5 rc php5-cli 5.6.24+dfsg-0+deb8u1 armhf command-line interpreter for the php5 scripting language rc php5-common 5.6.24+dfsg-0+deb8u1 armhf Common files for packages built from the php5 source rc php5-gd 5.6.24+dfsg-0+deb8u1 armhf GD module for php5 rc php5-json 1.3.6-1 armhf JSON module for php5 rc php5-mcrypt 5.6.24+dfsg-0+deb8u1 armhf MCrypt module for php5 rc php5-mysql 5.6.24+dfsg-0+deb8u1 armhf MySQL module for php5 rc php5-readline 5.6.24+dfsg-0+deb8u1 armhf Readline module for php5
php7.0 のリポジトリを登録
$ sudo vi /etc/apt/sources.list ファイルの最後に以下の行を追加 deb http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free $ sudo gpg --keyserver pgpkeys.mit.edu --recv-key CCD91D6111A06851 $ sudo gpg --armor --export CCD91D6111A06851 | sudo apt-key add - $ sudo apt-get update
apt-get install php7.0 php7.0-mysql php7.0-gd php7.0-mbstring php7.0-curl php7.0-xml php7.0-xmlrpc
apt-get install php php-mysql php-gd php-mbstring php-curl php-xml php-xmlrpc (自動的に php7.0 系がインストールされる)
でインストール
なんか立ち上げなおしたら「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」とか出た。
apache を入れ直したりガチャガチャやっていたのだが、apache のログを見たら Exec-php が悪さをしていた。
php7.0 用のパッチを宛てたら立ち上がった。
うん。前より早くなってるね。DBアクセスは相変わらずだけど。
WordPress もプラグインもほぼ問題なく動いてイルっぽい。
多少スピードアップもした感じ。
ただし、Exec-PHP だけはそのままでは動かない。
Parse error: syntax error, unexpected ‘new’ (T_NEW) in wp-content/plugins/exec-php/exec-php.php on line 22
とか出るので
$GLOBALS[‘g_execphp_manager’] =& new ExecPhp_Manager();
↓
$GLOBALS[‘g_execphp_manager’] = new ExecPhp_Manager();
の様に修正する。同様に、
wp-content/plugins/exec-php/includes/ にある manager.php、admin.php、cache.php、ajax.php 内に記述されている
=& も = に置換すると動くようになる。
これは phpversion() の結果 → 7.0.16
まあ Exec-PHP は使うなってことだね。便利なんだけどな。
]]>先ずどこで動かすかということで、テーマに含まれる functions.php で action を追加。
実際のアクションの内容は、同じタイトルをグループ化して最小のIDを持つレコード以外を削除する感じ
function duplecate_delete() { global $wpdb; $wpdb->query( "DELETE FROM {$wpdb->prefix}posts WHERE {$wpdb->prefix}posts.ID NOT IN ( SELECT min_id FROM ( SELECT MIN(t1.ID) AS min_id FROM {$wpdb->prefix}posts AS t1 WHERE t1.post_type = 'post' GROUP BY t1.post_title ) AS t2 ) AND {$wpdb->prefix}posts.post_type = 'post'"); } add_action('init', 'duplecate_delete', 1);
テーマを更新すると functions.php も初期化される場合もあるので備忘録として残しておこう。
]]>10, 'paged' => $paged, '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(); ?>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(); ?>
ちなみに、投稿へのリンクは p=投稿ID を指定する。
投稿のタイトル
the_content の代わりに the_excerpt を使うと抜粋(55単語で切れて最後に […]) が表示される。
]]>原因は
if(function_exists("register_field_group")) { register_field_group(array ( 'id' => 'acf_%e5%95%86%e5%93%81', 'title' => 'タイトル', 'fields' => array ( :
と、ID が化けていたため。ここを
'id' => 'acf_additional-custom-fields',
の様に書き換えてやれば正しく表示されるようになった。
そんなのわからんわ(笑)
]]>カスタムポストタイプを追加できるプラグイン。例えば「商品」のようなものを投稿と同列に作ることができる。
[CPT UI] > [Add/Edit Post Types] > [Add New Post Type] で追加 / [Edit Post Types] で編集。
「商品」というカスタムポストタイプを作る場合は
Post Type Slug:product
Plural Label:商品
Singular Label:商品
の様に指定する。後はほぼデフォルトでOK。
※ 何故Plural Label とSimgular Label があるかというと英語は複数形があるため。日本語では関係ない。
Supports にチェックしたものが新規追加/編集欄で表示される。
何も表示しない場合は明示的に None をチェック。
アイコンを替えたい場合は Menu Icon に ダッシュアイコンクラス名 を指定する。
例えばカートアイコンを指定するなら Menu Icon
特にカテゴリーやタグを追加したい場合は Bult-in Taxonomies にチェックする。
カスタムフィールドを追加するプラグイン。
[カスタムフィールド] > [新規追加] で新規追加 / [編集] で編集。
先ほど作った「商品」に「在庫数」というフィールドを追加する場合は
Show this field group ifを指定する。
[+フィールドを追加] で在庫フィールドを追加する。名前は number とか。
ユーザ一覧から選択させたい場合は、フィールドタイプ:ユーザー を指定する。
例えば上で作った商品を別のカスタムポストタイプから選択させたい場合は
フィールドタイプ:投稿オブジェクト / 投稿タイプ:product を指定する。
投稿一覧画面のカラムを編集するプラグイン。
[設定] > [Admin Columns] でカスタム投稿タイプを選択して使う。
例えば商品名を表示する場合は
タイプ:カスタムフィールド
ラベル:商品
カスタムフィールド:product
フィールドタイプ:タイトル(Post ID’s)
の様に指定する。
ユーザの場合はフィールドタイプ:ユーザ名(User ID’s)になる。
こんな感じ
query_posts('post_type=product'); // カスタムポストタイプに product を指定 if (have_posts()): while(have_posts()): the_post(); the_title(); // 商品名 // echo get_the_title(get_the_ID()); // あるいはこっちの書き方でもOK echo ' ' . get_post_meta(get_the_ID(), 'number', true) // 追加した在庫のフィールド値を取得 . "個\n"; endwhile; endif;
カスタムポスト・フィールドは遅いと聞くけれど、確かにこのやり方だとクエリーが大量に発生するので
遅くなるだろうなあ。手っ取り早いは手っ取り早いんだけれどなあ。
そこで remove_all_filters(‘the_content’); でフィルターを削除すると
今度は Exec-PHP プラグインが効かない。(フィルターで実装してたのね。)
解決策は以下、wpautop フィルタを削除する。
これで <br /> も <p> も付かなくなったけれど、<?php … ?> は使える。
備忘録としてメモして置こう。
「絶対パス」を「相対パス」に置き換えるには以下の対応をする。
テーマの編集で functions.php を編集する。
ファイルの最後に以下のコードを追記する。
// 絶対パス→相対パス変換 class relative_URI { function __construct() { add_action('get_header', array(&$this, 'get_header'), 1); add_action('wp_footer', array(&$this, 'wp_footer'), 99999); } function replace_relative_URI($content) { $home_url = trailingslashit(get_home_url('/')); $top_url = preg_replace('/^(https?:\/\/.+?)\/(.*)$/', '$1', $home_url); return str_replace($top_url, '', $content); } function get_header(){ ob_start(array(&$this, 'replace_relative_URI')); } function wp_footer(){ ob_end_flush(); } } new relative_URI();
これでかなり持ち運びしやすくなったぞ。
管理画面が絶対パスのままだった orz。こっちも相対パスにするにはフックを以下の様に修正する。
function __construct() { add_action('init', array(&$this, 'get_header'), 1); add_action('wp_footer', array(&$this, 'wp_footer'), 99999); add_action('admin_footer', array(&$this, 'wp_footer'), 99999); }
init はフロントエンドでも管理画面でも呼び出される。
wp_footer はフロントエンドでのみ呼び出される。
admin_footer は管理画面でのみ呼び出される。
その後は、まあ大体問題なく使えるけれど、余裕があるなら wp_options の siteurl と home も相対パスにしておく。
例) http://localhost/wp → /wp
参考:
http://evm-label.com/2015/04/wordpress_path01/
http://2inc.org/blog/2012/02/03/1198/
テンプレートを開いたときに読み込まれるフックと順番