こんにちは、管理人のぴのです。
このホームページが開設されてから約1か月が経ちました。みなさん(とTweetBot)のおかげでそれなりのアクセスが毎日来ていて嬉しいかぎりです。
しかし、当然ですがアクセスの大半は最新記事になっていて、このままではせっかく書いた過去の記事が埋もれてしまいます…
というわけで、以前から考えていた「ランダムな記事にアクセスするボタン」のウィジェットを自作してみようと思います。プラグインを探せば同様のものはありますが、デザインが気に入らないのと勉強を兼ねて自作することにしました。
ウィジェットを作る
Code Snippetsを導入する
以前TweetBotを作った際に、functions.phpを直接編集すると更新時に変更が全て上書きされてしまう、という問題がありました。それを解決するために、「Code Snippets」というコードを分割管理ができるプラグインを導入しました。これにより、自分で追加したコードが更新時に上書きされない他、コード単位で有効/無効を簡単に切り替えられるようになります。
以降のコードは、「Code Snippets」の分割ファイルの中で作成していきます。
ランダム記事を取得する関数を作る
以前TweetBotを作ったときの最新記事を取得する関数が使えそうだったので、少し変更してランダムな記事を取得する関数を作りました。
function get_random_article() { //ランダム記事取得関数
$args = array(
'posts_per_page' => 1, //1ページ
'orderby' => 'rand', //ランダム順
'post_type' => 'post', //投稿記事
);
$my_posts = get_posts( $args );
wp_reset_postdata();
return $my_posts[0];
}
ウィジェット本体を作る
WP_Widgetを継承してウィジェット本体を作っていきます。
classはテーマのものを拝借して指定すると、簡単にブログカードっぽいリンクにすることができます。そのままだと少し問題があったので、style属性で描画順と上部マージンを調整しました。
また、echoする文字列内に「”(ダブルクォーテーション)」を入れるときは、エスケープして「\”」と入力することに気を付けましょう。
class RandomAccessButton extends WP_Widget{
function __construct(){
parent::__construct(
'RandomAccessButton', //ID
'ランダムアクセスボタン', //名前
array('description' => 'ランダム記事にアクセスするボタンを表示するウィジェット') //概要
);
}
public function widget($args, $instance){
echo $args['before_widget'];
//ここから本体
$random_article = get_random_article(); //ランダム記事を取得
$url = esc_url(get_permalink($random_article->ID)); //URLを取得
echo "<a href=".$url." class=\"a-wrap\" style=\"z-index:10; margin-top:10px;\">ランダム記事にアクセス</a>";
//ここまで本体
echo $args['after_widget'];
}
}
add_action( //ウィジェットとして登録
'widgets_init',
function(){
register_widget('RandomAccessButton');
}
);
ちなみにCode Snippetsで作業する場合、エラーがないかよく確認してから保存しましょう。構文エラーは教えてくれますが、文字列の部分のエラーは教えてくれません。エラーがあった場合、「WordPressに重大なエラーが発生しました」と表示され管理画面含めてアクセスできなくなります。(一敗)
ウィジェットに設定
WordPressの管理画面から「最近の投稿」や「カテゴリー」のウィジェットと同じ場所に「ランダムアクセスボタン」というウィジェットができているので好きな場所に配置しましょう。
完成
ランダムアクセスボタンができた!!!!!
おわりに
というわけで無事にランダムアクセスボタンを作ることができました。
これで忘れ去られた過去の記事にもアクセスが増えるといいな…と思っています。現在の書き方だと本当の意味で全ての記事からランダムに選ばれるので、気が向いたらウィジェットの設定で調整できるようにしようかな。
既に述べましたが、途中でエラーを吐いてWordPressにアクセスできなくなったときは本気で焦りました。管理人はPhpMyAdminでCode Snippets部分のデータベースを直接操作し事なきを得ました。ちなみにウィジェットを作ってた時間より修復してた時間のほうが長かったです。自作する人は気を付けてね!
みんなもボタンを押しまくってランダムな記事にアクセスしよう!!!ついでに「いいね」を押してくれ!!!
コメント