[WordPress & PHP]最新記事やカテゴリーページ一覧を表示するウィジェット自作失敗日記的なもの

この記事はほろほろりの備忘録かつ、ほろほろりが奮闘して失敗したことを書いたことを日記みたく書いた半ばネタ記事です。一応技術的なことも書いてありますが、ほろほろりはその道のプロではありませんので、真似をされても安全性は保障しかねます

真似される場合は、自己責任でお願いいたしますm(_ _)m。

たまにある更新停止してしまっているプラグイン

最新記事を表示しているのに愛用しているプラグインが、あるのですが…

「2年前から更新されてない…!」

という衝撃の事実に震え、今後もし万が一、使用しているプラグインが止まったり表示が変になったりするという危機が頭によぎりました。

下調べ・下準備

『PHP』もガッツリではないですが、ある程度はわかるので、その危機の前(カッコよく言うと『Before Crisis』…これ知ってる人いるかな…)に「自分で対応できるようになる」という目的も兼ねて、急遽ウィジェット自作することにしましたよ。

仕方ないネ(’・ω・`)

とりあえず下調べとして、各投稿・固定ページの情報を調べるキーワードや変数的なものがないかと探してみました。

基本的には公式ですし、WordPress Codex 日本語版を頼ることになるかと思いますが、案の定、こういうこと書いてくださっている方がいらっしゃって、助かりましたm(_ _)m非常にわかりやすかったです。

外部ページリンク:もう迷わんよ。WordPressで固定ページや投稿ページが持つ様々な情報を取得する方法まとめ[基本情報・投稿タイプ・カスタムフィールド・カテゴリ・タグ・タクソノミーなど]|WEMO

一気に投稿記事をしらべるなら、↓がいいかな?と思ったので、これ使います。

wp_get_recent_posts($num)

最新記事から$numに格納した整数値分、記事の情報を取得できる関数で、引数”$num”に取得したい記事数を指定します。また、この”$num”は省略可能で、その場合はデフォルトの10件分になるようです。

詳しくは↓

外部リンク:関数リファレンス/wp get recent posts – WordPress Codex 日本語版

また、ウィジェット自作の方法は、↓のページを参考にさせていただきました。

外部ページリンク:【WordPress】自作のウィジェットを要録して使えるようにする方法|よしあかつき

functions.phpを開いてソースコードを張る –失敗編

テーマのための関数 (functions.php)を開き、↓のコードをペタリ。

wp_register_sidebar_widget(
    'my_widget',         // ウィジェットID
    'My recent posts Widget',         // ウィジェット名
    'my_recentposts_widget', // ウィジェットの表示を作る為の関数名
    array(               // オプション
            'description' => '最新の投稿記事一覧' // 説明文
	)
);
function my_recentposts_widget($args){
	echo $args['before_widget'];
	echo $args['before_title'] . '最新の投稿記事'.$args['after_title'];
	echo $args['after_widget'] . _widget();
}

function _widget(){
	$_posts = wp_get_recent_posts(5);
	echo '<ul>';
        foreach ( $_posts as $thumbnail ) {
            if ( has_post_thumbnail( $thumbnail['ID'] ) ) {
                echo '<li><a href="' . get_permalink( $thumbnail['ID'] ) . '" title="' . esc_attr( $thumbnail['post_title'] ) . '">';
                echo get_the_post_thumbnail( $thumbnail['ID'], 'thumbnail' );
	        echo '<a href="'.$thumbnail['guid'].'"><p>'.$thumbnail['post_title'].'</p></a>';
                echo '</a></li>';
            }
        }
	echo '</ul>';
}

なのですが、

え?

なぜか通らずorz とりあえず調べて、↓ページによると、変なスペースがあるとダメらしいので、

外部ページリンク:functions.phpの編集時に気を付けること!|WordPressの実

隙間をなくしてめちゃくちゃ読みずらいコードにしてみた。

wp_register_sidebar_widget('my_widget','My recent posts Widget','my_recentposts_widget',array('description' => '最新の投稿記事一覧'));
function my_recentposts_widget($args){echo $args['before_widget'];echo $args['before_title'] . '最新の投稿記事'.$args['after_title'];echo $args['after_widget']. _widget();}
function _widget(){$_posts = wp_get_recent_posts(5);echo '<ul>';foreach ( $_posts as $thumbnail ) {if ( has_post_thumbnail( $thumbnail['ID'] ) ) {echo '<li><a href="' . get_permalink( $thumbnail['ID'] ) . '" title="' . esc_attr( $thumbnail['post_title'] ) . '">';echo get_the_post_thumbnail( $thumbnail['ID'], 'thumbnail' );echo '<a href="'.$thumbnail['guid'].'"><p>'.$thumbnail['post_title'].'</p></a>';echo '</a></li>';}}echo '</ul>';}

結果↓

なぜ?

「おかしい。ローカル開発環境の方で構築したWordPressのページではちゃんと通るのに…もしやサーバーの問題か?」

心強いけど過保護なのは… –WAF設定

調べてみると、↓のページを見つけました。

どうやら、

「害なすものを退けてくれる、心強くも時には過保護な(何事!?)」

WAF設定

というものが、レンタルサーバー側で設定されていたようです。

覗いてみると、結構色々リスクになりそうなものを退けてくれているようで、見た時「やっぱりエックスサーバーさん凄い」と、専門家の凄さを改めて実感しました。
※当ブログは、エックスサーバー様からサーバーをお借りしています。

ということで、”WAF設定”を少し弄って、関係ありそうなところをOFFにしてみたら、

…???(^ω^ )

後日また模索してみます。

ちなみに、ローカル開発環境で上手く通ったやつです。↓

参考にさせていただいたページ・サイト一覧

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください