パーマリンクを複数置きたいとかそういうとき、
プログラムで複数設定する他に、同じ内容の記事を作るという方法がある。
その場合において、1個書き直したら、同じ内容を合わせて書き直すとかメンドクサイ。
もう内容持ってきちゃおう!て方法。
ブログ内検索にはかからなくなるけど、同じ記事だしいいよね!
呼び出すには、記事内でPHPを使用するためのプラグインを使って実行する。
入れてない人は入れて、入れたくない人は回れ右ですな
基本的なやり方
<?php // 記事ID。今回は仮に『4』 $post_id = 4; //指定した記事IDの情報を取得する $post = get_post($post_id, 'OBJECT' , 'raw'); // more前、more後に分割 $post_include = explode('<!-'.'-more-'.'->', $post->post_content ,2); // more前呼び出し echo $post_include[0]; ?> <!--more--> <?php // more後呼び出し echo $post_include[1]; ?>
フィルターかける
何か思っていたフィルターが、かかっていないなというときは
echo ExecPhp_Runtime::filter_user_content($post_include[0]);
のように、使いたいフィルター関数を直接実行する。
気持ち的には、上記よりも
echo apply_filters( 'the_content',$post_include[0]);
のように、記事本文をフィルターフックしたいところだが、『more』付近で想定外のことになる。
詳しくは調べてはいないので、原因は不明。
でもPHP実行プラグインの後のフィルターは通常通りかかっているわけだから、その辺の可能性は高い。
変数の引き渡しは難しい
処理が同じだし、変数だけ渡してしまいたい処理があるとして、処理が渡せない。
例えば、元記事の『元々』と表示させる部分を『書き換え』にしたいとする。
参照元記事:id=10
<?php if(!isset($aaa)) $aaa = '元々'; } echo $aaa ?>
使用する側
<?php $aaa = '書き換え'; $post_id = 10; $post = get_post($post_id, 'OBJECT' , 'raw'); $post_include = explode('<!-'.'-more-'.'->', $post->post_content ,2); echo ExecPhp_Runtime::filter_user_content($post_include[0]); ?>
結果
元々
PHPの処理のタイミングが違うから、こうなってしまう。
だから一緒にするには、同じタイミングで実行させるしかない。
文字列にして一緒に渡してしまうのである。
$tmp = "$aaa = '書き換え';".$post_include[0]; echo ExecPhp_Runtime::filter_user_content($tmp);
カンタンな変数ならいいけど、配列だとしんどい。
応用編
前半に登録していた変数を後半にも使っていて、真ん中だけ文章を変えたいとする。
参照元記事:id=11
<?php $array = array( b => '前', a => '後', ); echo $array[b]; ?> <!--more--> 元々の記事の内容 <!-- matome --> <?php echo $array[a]; ?>
使用する側
<?php $post_id = 11; $post = get_post($post_id, 'OBJECT' , 'raw'); $post_include = explode('<!-'.'-more-'.'->', $post->post_content ,2); $post_include2 = explode('<!-'.'- matome -'.'->', $post_include[1] ,2); $tmp = ExecPhp_Runtime::filter_user_content($post_include[0].'<!-'.'- matome -'.'->'.$post_include2[1]); $post_include3 = explode('<!-'.'- matome -'.'->', $tmp ,2); echo $post_include3[0]; ?> <!--more--> この記事用の内容。 <?php echo $post_include3[1]; ?>
つまり別の文字列で分割するわけでありますな。
moreは1回しか聞かないからmoreにして分割数を変えるでもいいとは思う。
コメント