WordPressのウィジェットにプラグインなしでPHP記述・カスタム投稿表示での例

ウィジェットエリアに出力したいもので、PHPコードで記述したい場合、通常の「テキスト」や「カスタムHTML」では不可能です。

それを実現するプラグインなどを使う事も出来ますが、テーマのfunction.phpに少し手を加えるだけで、ウィジェットエリアのどこにでも「テキスト」を使ってショートコードで簡単に出力させる方法です。

 

プラグインはイヤだなーと探していたら、われらが「るなさん」のサイトに紹介されていました!
※るなさんは、高速・高機能・無料テーマ「Luxelitas(ルクセリタス)」の開発者様です。

参考:WordPress でプラグイン使わずにウィジェットで PHP コード動かす

 

今回は、るなさんが紹介して下さっている方法を使って、カスタム投稿で作成した記事をサイドバーに一覧表示する方法をまとめてみます。

 

カスタム投稿タイプをプラグインなしで作成する方法については以下をご覧ください。

WordPressでカスタム投稿タイプをプラグインなしで作成する-コピペで簡単
カスタム投稿とは? ワードプレス規定の「投稿」や「固定ページ」とは別に、投稿タイプをカスタマイズし、作成する事が出来ます。 通常の投稿とは別の目的になる記事を分類する事ができ、自由に投稿タイプを使えるので、例えば、「商品紹介」、「会員プロフ...

 

ご紹介する方法は、FTP操作と、function.phpへの追記が必要です。

 

 


 

PHPをショートコードで利用できるようにする

以下、説明はカスタム投稿タイプを表示する内容ですが、PHPコードをウィジェットエリアで利用するための手順は共通です。

 

 

PHPファイルを用意する

実際に記述したいPHPコードを書いたPHPファイルを用意します。

今回はカスタム投稿で作成した記事をサイドバーにリスト形式で出力する方法なので、以下のように記述したファイルを用意。

<ul>
<?php
    $posts = new WP_Query( array(
            'post_type' => 'my_news',
            'posts_per_page' => 3
        )
    );
    if ( have_posts() ) : while ( $posts->have_posts() ) : $posts->the_post();
?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
<?php endwhile; endif; wp_reset_query(); ?>
</ul>

投稿タイプ

‘post_type’ => ‘my_news’,

上記「my_news」の部分は、カスタム投稿で作成した投稿タイプ名に置き換えて下さい。

 

表示する行数

‘posts_per_page’ => 3

上記であれば3つ表示します。お好みの数字に変更して下さい。

 

任意のファイル名で保存します。例:my_news.php

 

FTPでアップロード

作成したPHPファイル(my_news.php)を「function.php」があるのと同じ場所へアップロードします。

例えばルクセリタス(子テーマ使用)の場合は以下の場所

public_htmlwp-contentthemesluxech

 

FTPの使い方については以下をご覧ください。

FTPクライアントの使い方(FFFTP)とワードプレスのファイル構成
今回は、私が何十年も変わらず使っているソフト「FFFTP」でFTPクライアントの使い方と、ワードプレスでのファイル構成を紹介します。 既にワードプレスが稼働している方向けの説明になっています。 ワードプレスをこれからインストールされる方は以...

 

 

function.phpの編集

function.phpファイルは最悪ワードプレスが動かなくなる可能性のある重要ファイルですので、バックアップを用意して下さい。

function.phpを触らずにPHPコードを処理単位で記述・管理できるプラグインもあります。
詳しくは以下をご覧ください。

function.phpを直接触らず、いざという時はセーフモードもあるプラグイン
function.phpを直接編集するカスタマイズの際は、注意しないとワードプレス自体が動かなくなってしまう事があります。 当然、バックアップをとっておいたり、注意深く編集はしますが「万一」の場合のドキドキはありますよね。 そこで今回は、f...

 

子テーマの「function.php」に、必要事項を追記します。

※子テーマにfunction.phpがない場合や、子テーマ自体がない場合は、親テーマでも行えますが、親テーマを編集すると、アップデートなどでカスタマイズしたものは消えてしまいますので注意。

 

functions.php を書き間違えると、WordPress そのものが動作しなくなります!

※バックアップをとるなど、必要な対応をしてから自己責任でお願いします。

 

//ウィジェットでPHPを有効に
add_filter( 'widget_text', function( $ret ) {
 $php_file = 'my_news';
 if( strpos( $ret, '[' . $php_file . ']' ) !== false ) {
  add_shortcode( $php_file, function() use ( $php_file ) {
   get_template_part( $php_file );
  });
  ob_start();
  do_shortcode( '[' . $php_file . ']' );
  $ret = ob_get_clean();
 }
 return $ret;
}, 99 );

 

PHPファイル名

$php_file = ‘my_news’;

作成したPHPファイル名に置き換えて下さい。

 

以上で準備は完了です。

 

ウィジェットに出力する

ウィジェットで出力したいエリアに「テキスト」を追加します。

 

ショートコードでファイル名を記述します。

 

[PHPファイル名]

 

 

結果

「info」というカスタム投稿タイプに2つの記事がある例

 

サイドバーに一覧(リスト)表示

 

カスタム投稿記事が表示されない場合

上記のリンクをクリックしたり、直接アドレス入力でも記事が見れない場合

 

404エラーになり表示されない!

 

 

パーマリンクの設定を更新します。
設定→パーマリンク設定

 

何も変更をせず「変更を保存」を押します。

 

 

 

綾糸: 綾糸 主婦 1990年代、汎用機時代のエンジニア 趣味で長くやっていたweb制作は、未だにエディタでの手コーティング 現在は自宅でゆるりとweb制作やライターをしています