WordPress

ショートコードを使って、複数の記事のタイトルリンク一覧を作成してみる:【50日目】WordPress1日1プラグイン

更新日:

ようこそのお運びで、厚く御礼申し上げます。
50日目です。今回は前回の記事へのリンクの複数バージョンです。

ショートコードを使って、複数のIDやスラッグを指定して、特定の記事へのリンク一覧を作成してみる

複数のIDやスラッグを「属性」で指定して、特定の記事へのリンクの一覧を表示するショートコードを作成します。

※前回の応用です。今回はクラス定義をしてます。

今回は前回とおなじく属性値を、記事のidを「id」、記事のスラッグを「slug」としてどちらか一つの属性値を書き、値を以下のように持たせます。
※カンマ区切りで複数のIDかスラッグを入力していきます。

140310-0004

※idとslugを両方書いた場合は、slug優先にします。

表示側には、指定した記事のリンク一覧が表示されるようになります。

140310-0002

まずは、functions.phpに書いてみます。

では、functions.phpに以下のコードを書きました。

//オブジェクト生成
new Paka3ShortCodePostLinks;

//クラス定義
class Paka3ShortCodePostLinks{
        public function __construct(){
            //1.ショートコードを作成
            add_shortcode('postLinks', array($this,'paka3_postLink'));
            //2.適用するCSSを定義
            add_action('wp_head',array($this,'paka3_postLink_css'));
        }

        //#################################
        //ショートコード
        //#################################
        public function paka3_postLink($atts) {
            extract(shortcode_atts(array(
                 'id' => 0,
                 'slug' => ""
            ), $atts));
            $ids = mb_split(",",$id);
            $slugs = mb_split(",",$slug);
            $str ="";

             //*slugからidを取得
            if($slug){
                foreach($slugs as $skey=>$sval){
        	   $post_id=get_page_by_path($sval,OBJECT,"post")->ID;
        	   $page_id=get_page_by_path($sval,OBJECT,"page")->ID;
        	   //投稿記事or固定ページ
        	   $s_id =  $post_id ? $post_id : $page_id;
                   //id見つからなかったら、$idを入れる
                   $id   =  $s_id ? $s_id : $id;

                   //*値を取得
                   $post =get_post( $id );
                    if($post) $str .= $this->paka3_postLinkView($post);
                }
            }elseif($id){
                foreach($ids as $ikey=>$id_val){
                 $post =get_post( $id_val );
                 if($post) $str .= $this->paka3_postLinkView($post);
                }
            }
            $str = $str ? "<div class='postLinks'>".$str."</div>": $str;
            return $str;
        }

        //#######################
        function paka3_postLinkView($post){
             //*表示
            $link     = get_permalink($post->ID);
            $img_src  = get_the_post_thumbnail( $post->ID,array(80,80),array('align'=>'left'));
             $img_src = $img_src ? $img_src : "<img src='".get_bloginfo('template_url')."/img/noimage.png' width=80 align=left />";
            $contents = mb_strimwidth($post->post_content, 0, 70, "...","UTF-8");

            $str =<<<EOS
              <div class="paka3_postLink">
               <a href="{$link}">
        	{$img_src}
        	<h4>{$post->post_title}</h4>
        	<p>{$contents}</p><div></div>
        	</a>
              </div>
EOS;
        return $str;
        }

        //#################################
        //CSS
        //#################################

        function paka3_postLink_css($headers){
		echo <<<EOS
		<style type="text/css">
                div.postLinks{margin:5pt 0;}
		   div.paka3_postLink{
			border:1px solid #ccc;
			padding:2pt;margin:0px 5pt;
                        margin-top:-1px;
		   }
		    div.paka3_postLink img{
			margin-right:5pt;
		    }
		    div.paka3_postLink h4{

		    }
		    div.paka3_postLink p{
			font-size:9pt;
			line-height:100%;
			color:#999;
		    }
		    div.paka3_postLink div{
			clear:left;
		    }
		</style>
EOS;
        }
}

ポイントはどこ?

※前回の応用になりますので、一度見るとよいかもしれません。

コードをプラグイン用のファイルにします

それではfunctions.phpに書いたコードを消して、
paka3_shortCodePostLinks.php」というファイルを作成し、以下のコードを記入します。

このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。

今回のまとめ

今回は50日目でしたが、やっと半分ですがプログラムを書くことよりネタを考えることの方が難しいとあらためておもいました。一日でかけるコードってのもなかなかやっかいです(笑)ブログも書くので、そのバランスが難しいですね。きっと後で見直すことにはなりそうですが、それでもやってみましょう。

-WordPress
-, , ,

Copyright© アルパカ@ラボ:大分県臼杵市でホームページ運営やWordPressやってます。 , 2019 All Rights Reserved Powered by AFFINGER5.