カスタムWordPressウィジェットの作成方法(ステップバイステップ)

ウィジェットを使用すると、WordPressサイトのサイドバーまたはウィジェット対応エリアにコンテンツ以外の要素を追加できます。バナー、広告、ニュースレター登録フォーム、その他の要素をウェブサイトに追加するために使用できます。

ソーシャルメディアフィード、最新の投稿、HTMLタグなどのユニークな機能をパーソナライズされたタッチで埋め込むカスタムウィジェットを作成することもできます。

WPBeginnerでは、カスタムウィジェットを使用して、ウェブサイトのサイドバーにさまざまな種類のコンテンツを表示しています。この記事では、カスタムWordPressウィジェットを作成する方法をステップバイステップでご紹介します。

カスタムWordPressウィジェットの作成方法(ステップバイステップ)

注意: このチュートリアルは、WordPress開発とコーディングを学習しているDIY WordPressユーザー向けです。

WordPressウィジェットとは何ですか?

WordPressウィジェットには、ウェブサイトのサイドバーやウィジェット対応エリアに追加できるコードの断片が含まれています。

それらを、サイトにさまざまな要素や機能を追加するために使用できるモジュールと考えてください。

デフォルトでは、WordPressには標準のウィジェットセットが付属しており、どのWordPressテーマでも使用できます。詳細については、WordPressでウィジェットを追加して使用する方法に関する初心者向けガイドを参照してください。

WordPressウィジェットセクション

WordPressでは、開発者が独自のカスタムウィジェットを作成することもできます。

多くのプレミアムWordPressテーマとプラグインには、サイドバーに追加できる独自のカスタムウィジェットが付属しています。

例えば、コードを書かずにサイドバーにお問い合わせフォーム、カスタムログインフォーム、フォトギャラリー、メールリストサインアップフォームなどを追加できます。

とはいえ、WordPressで独自のカスタムウィジェットを簡単に作成する方法を見てみましょう。

WordPressでカスタムウィジェットを作成する前に

WordPress コーディングを学習している場合は、ローカル開発環境が必要です。これにより、サイトが公開されていることを気にせずに、自由に学習し、テストを行うことができます。

WordPressをインストールできます。ローカル環境にMacでMAMPを使用するか、WindowsでWAMPを使用してインストールできます。

すでにライブサイトがある場合は、ローカルホストに移動できます。詳細については、ライブWordPressサイトをローカルサーバーに移動する方法に関するガイドを参照してください。

その後、カスタムウィジェットコードをWordPressに追加するにはいくつかの方法があります。

理想的には、サイト固有のプラグインを作成して、そこにウィジェットコードを貼り付けることができます。これにより、WordPressテーマに依存しないコードをWordPressに追加できます。

テーマのfunctions.php ファイルにコードを貼り付けることもできます。ただし、そのテーマがアクティブな場合にのみ利用可能になります。

カスタムコードをウェブサイトに簡単に追加できる WPCode プラグインも利用できます。

このチュートリアルでは、訪問者を歓迎するだけの簡単なウィジェットを作成します。ここでの目標は、WordPressウィジェットクラスに慣れることです。

準備はいいですか?始めましょう。

基本的なWordPressウィジェットの作成

WordPressには、組み込みのWordPressウィジェットクラスが付属しています。新しいWordPressウィジェットはすべてWordPressウィジェットクラスを拡張します。

WordPress開発者のハンドブックには、WP Widget クラスで使用できる19の方法が記載されています。

ただし、このチュートリアルの目的上、次の方法に焦点を当てます。

  • __construct() : ここでウィジェットID、タイトル、説明を作成します。
  • widget : これは、ウィジェットによって生成される出力を定義する場所です。
  • form : このコードの部分は、バックエンド用のウィジェットオプションを持つフォームを作成する場所です。
  • 更新:これは、ウィジェットオプションをデータベースに保存する部分です。

カスタムウィジェットを作成するには、次のコードスニペットを functions.php ファイルまたは WPCode(推奨)にコピー&ペーストしてください。

<?php

// Creating the widget
class wpb_widget extends WP_Widget {
	function __construct() {
		parent::__construct(
		// Base ID of your widget
			'wpb_widget',

			// Widget name will appear in UI
			__( 'WPBeginner Widget', 'textdomain' ),

			// Widget description
			[
				'description' => __( 'Sample widget based on WPBeginner Tutorial', 'textdomain' ),
			]
		);
	}

	// Creating widget front-end
	public function widget( $args, $instance ) {
		$title = apply_filters( 'widget_title', $instance['title'] );

		// before and after widget arguments are defined by themes
		echo $args['before_widget'];
		if ( ! empty( $title ) ) {
			echo $args['before_title'] . $title . $args['after_title'];
		}

		// This is where you run the code and display the output
		echo __( 'Hello, World!', 'textdomain' );
		echo $args['after_widget'];
	}

	// Widget Settings Form
	public function form( $instance ) {
		if ( isset( $instance['title'] ) ) {
			$title = $instance['title'];
		} else {
			$title = __( 'New title', 'textdomain' );
		}

		// Widget admin form
		?>
        <p>
            <label for="<?php echo $this->get_field_id( 'title' ); ?>">
				<?php _e( 'Title:', 'textdomain' ); ?>
            </label>
            <input
                    class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
                    name="<?php echo $this->get_field_name( 'title' ); ?>"
                    type="text"
                    value="<?php echo esc_attr( $title ); ?>"
            />
        </p>
		<?php
	}

	// Updating widget replacing old instances with new
	public function update( $new_instance, $old_instance ) {
		$instance          = array();
		$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';

		return $instance;
	}

	// Class wpb_widget ends here
}

// Register and load the widget
function wpb_load_widget() {
	register_widget( 'wpb_widget' );
}

add_action( 'widgets_init', 'wpb_load_widget' );

WordPressサイトにカスタムコードを追加する最も簡単な方法は、WPCodeを使用することです。これは、サイトを壊すリスクなしにコードスニペットを管理および挿入するのに役立つ最高のコードスニペットプラグインです。

まず、サイトにWPCodeプラグインをインストールして有効化する必要があります。ヘルプが必要な場合は、WordPressプラグインのインストール方法に関するガイドを参照してください。

有効化したら、WordPress管理パネルからコードスニペット » + スニペットを追加に移動してください。ここで、「カスタムコードを追加(新規スニペット)」オプションを選択します。

新しいスニペットを追加

その後、コードプレビューエリアにカスタムウィジェットコードを貼り付けることができます。

また、「コードタイプ」ドロップダウンメニューをクリックし、「PHPスニペット」オプションを選択する必要があります。

カスタムウィジェットコードを入力

次に、下にスクロールして、コードの挿入方法を選択できます。

WPCodeでは、コードを実行する場所を選択できます。このチュートリアルでは、デフォルトオプションを使用して、どこでも実行できます。

WPCodeでの挿入方法

それが完了したら、一番上に戻ってスニペットを保存できます。

スニペットをアクティブにするには、トグルを「アクティブ」にクリックするだけです。

WPCodeでスニペットをアクティブ化して保存する

詳細については、WordPressサイトにカスタムコードを追加する方法に関するガイドをご覧ください。

WordPressにコードを追加した後、WordPress管理パネルのAppearance » Widgetsページに移動する必要があります。

次に、「プラス」追加ブロックアイコンをクリックし、「WPBeginner Widget」を検索して、新しいウィジェットを選択します。

WPBeginnerウィジェットを追加

このウィジェットには、入力するフォームフィールドが1つしかありません。

テキストを追加し、「更新」ボタンをクリックすると変更が保存されます。

ウィジェットにテキストを追加して保存

これで、WordPressウェブサイトにアクセスして、カスタムウィジェットが実際に動作していることを確認できます。

デモサイトでの表示例を以下に示します。

新しいカスタムウィジェットの例

WordPressクラシックエディターにカスタムウィジェットを追加する

サイトに新しいウィジェットを追加するためにクラシックウィジェットエディターを使用している場合、プロセスは同様になります。

利用可能なウィジェットのリストに「WPBeginner Widget」という新しいウィジェットが表示されます。このウィジェットをサイドバーにドラッグアンドドロップする必要があります。

次に、タイトルを入力し、「保存」をクリックしてウィジェット設定を保存します。 

WordPressクラシックエディターにウィジェットを追加する

新しいカスタムウィジェットがウェブサイトに表示されるようになります。

さて、コードをもう一度見てみましょう。

まず、「wpb_widget」を登録し、カスタムウィジェットをロードしました。その後、ウィジェットのバックエンドでウィジェットが何をするか、どのように表示するかを定義しました。

最後に、ウィジェットに加えられた変更の処理方法を定義しました。

さて、いくつか質問したいことがあるかもしれません。たとえば、textdomainの目的は何ですか?

WordPressは翻訳とローカライゼーションを処理するために「gettext」を使用しています。このtextdomain_eは、「gettext」に文字列を翻訳可能にするように指示します。詳細については、翻訳準備完了のWordPressテーマを見つける方法に関するガイドをご覧ください。

テーマのカスタムウィジェットを作成している場合は、textdomainをテーマのテキストドメインに置き換えることができます。

または、WordPress翻訳プラグインを使用してWordPressを簡単に翻訳し、多言語WordPressサイトを作成することもできます。

ボーナス:WordPressウィジェットにカスタムスタイルを追加する

WordPressウィジェットを作成したら、カスタムスタイルを追加することもできます。これにより、ウェブサイトの外観が向上し、一貫性が維持され、重要な情報に注目を集めることができます。

これを行うには、外観 » ウィジェット ページにアクセスし、カスタマイズしたいウィジェットを追加します。右側のブロックパネルに、色とタイポグラフィを変更するためのオプションが表示されます。

デフォルトのWordPressウィジェットのスタイリングオプション

ただし、ウィジェットにそのオプションが表示されない場合は、「詳細設定」タブを展開してCSSクラスを追加することでカスタマイズできます。

これで、その特定のCSSクラスを対象とするカスタムCSSをWordPressテーマに追加できます。

ブロックエディターでウィジェットにカスタムCSSクラスを追加する

そのためには、外観 » カスタマイズ ページに移動し、追加CSSタブに切り替えます。ここに、CSSルールを追加するボックスとともに、ウェブサイトのプレビューが表示されます。

カスタムCSSを使用してウィジェットの外観をカスタマイズできるようになりました。詳細については、WordPressウィジェットにカスタムスタイルを追加する方法に関するチュートリアルをご覧ください。

CSS ルールを追加する

この記事で、カスタムWordPressウィジェットを簡単に作成する方法を学べたことを願っています。また、WordPressでウィジェットブロックを無効にする方法に関するガイドや、WordPressで非アクティブなウィジェットを削除する方法に関するチュートリアルもご覧ください。

この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterFacebookでもフォローできます。

開示:当社のコンテンツは読者によってサポートされています。これは、当社のリンクの一部をクリックすると、当社が手数料を得る可能性があることを意味します。WPBeginnerがどのように資金提供されているか、それがなぜ重要か、そしてどのように私たちをサポートできるかについては、こちらをご覧ください。当社の編集プロセスはこちらです。

究極のWordPressツールキット

無料のツールキットにアクセスしましょう - すべてのプロフェッショナルが持つべきWordPress関連の製品とリソースのコレクションです!

読者とのインタラクション

30 CommentsLeave a Reply

  1. 「wpb_text_domain」という文字列はサンプルコードに見つかりません。サンプルコードが更新され、記事の文言が更新されなかったと推測しますか?

    また、確認ですが、「wpb_text_domain」はサンプルコードの「web_widget_domain」で合っていますか?

    事前にフィードバックをいただけると幸いです。

    • この点をご指摘いただきありがとうございます。この記事を更新し、より明確に説明します。

      管理者

  2. 素晴らしいチュートリアルをありがとうございます。テストプラグインにコードを追加したところ、説明通り完璧に動作しました。Appearance » Widgets のリストでウィジェットが表示され、サイドバーに追加できます。
    しかし、ページエディターのリストに新しいウィジェットが表示されません。何か見落としていることはありますか?別の登録や設定が必要ですか?
    重ねてお礼申し上げます。

  3. これは現在WordPressで「レガシーウィジェット」として表示されています。ウィジェットを作成する新しい方法はありますか?

  4. これは素晴らしいです。単純なコピー&ペーストの例はまさに私が探していたものでした。ありがとうございます!

  5. CRUDプラグインを作成しましたが、それを1つのページで使用する必要があります。そのプラグインをページで使用する方法を教えていただけますか?

    • プラグインをどのように設定したかによります。フロントエンド表示にショートコードを使用するか、管理画面側に表示したい場合はオプションAPIを検討することができます。

      管理者

  6. カスタムウィジェットを1つ以上作成するにはどうすればよいですか?
    また、ウィジェットでラジオボタン、チェックボックス、ドロップダウン、テキストなどの他のフィールドを設定するにはどうすればよいですか?

    • wpb_widget を新しいウィジェットの名前として使用したいものに置き換える必要があります。その後、コードは具体的に追加したいものによって異なります。WordPressのCodexを確認すると、利用可能なさまざまなコードを確認できます。

      管理者

  7. こんにちは!

    現在、プラグインを開発しており、ユーザーが自分のサイトに特定の機能を追加できるようにウィジェットを作成する必要があります。
    ウィジェットのコードをファイルにコピーし、そのファイルをプラグインのディレクトリに保存しました。プラグインのメインファイルでadd_actionとdo_actionを使用してロードしましたが、それでも機能しません。手伝っていただけますか?

    ありがとうございます!

    • 残念ながら、それはプラグインの設定方法に大きく依存します。ウィジェットを追加して表示するには、このコードの両方のセクションがロードされていることを確認したい場合があります。

      管理者

  8. ちょっとした質問ですが、他のウィジェットも配置できるウィジェットを作成したい場合はどうすればよいですか?例えば、空のブートストラップカラム6-3-3のようなもので、各カラムに画像、テキスト、最新投稿などのウィジェットを配置できますか?

    このウィジェットに他のウィジェットを配置できる場所を示すコマンド/キーワードはありますか?

    自分で作成したテーマとWPの仕組みについて、少し混乱しているからです…初心者なので^^

    ページタイトルなどの一般的な情報、フッターにウィジェットエリアを作成してメニューや関連リンクなどを配置できるようにしました。うまくいきました。

    しかし、今、私がデザインしたコンテンツをWordPressで以前のように実現する方法がわかりません。いくつかのキーワードがそれらについてもっと読むのに役立つかもしれません。

  9. WordPressデータベースからカスタム投稿タイプフィールドを取得し、ウィジェットを使用してフロントエンドに表示するにはどうすればよいですか?

  10. カスタムウィジェットを2つ追加できません。2つ目のウィジェットが表示されません…。
    どうすればいいですか???助けてください。

  11. こんにちは、「カスタムメニュー」というウィジェットが利用可能なウィジェットに見つかりません。表示されず、このウィジェットを使ってフッターにページを追加できませんでした。

    ご協力いただきありがとうございます!!!!

  12. こんにちは、テキストの代わりにロゴを表示するにはどうすればよいですか?ロゴのURLをテキストに置き換えるだけで十分でしょうか。
    よろしくお願いいたします。

  13. ウィジェットとアプリ、どちらが先に生まれたのでしょうか?
    ウィジェットは登録が必要ですか?もしそうなら、どのように登録すればよいですか?
    ウィジェットやアプリのアイデアを最も効果的に保護するにはどうすればよいですか?
    皆さん、ありがとうございます

  14. これらの手順は、カスタムウィジェットの作成に非常に役立ちました。しかし、フォントサイズを60pxに変更する方法がわかりません。DiviテーマオプションにCSSを追加して、テキストを中央揃えにし、境界線を追加することはできましたが、フォントのスタイリングを変更するにはどうすればよいですか?「font-size:60px」を追加しても機能しません。タグラインのように、ページ全体に大きなフォントを表示したいのです。ありがとうございます。

  15. こんにちは!助けていただけると嬉しいです。

    ショップのタイムテーブルを表示するカスタム投稿タイプを作成しました。もちろん、必要なだけ多くのタイムテーブルを作成できますが、私の必要性は、ウェブサイトのサイドバーに特定のタイムテーブルを表示することです。

    この目的のために、タイムテーブル投稿をループして1つだけ(昇順で並べたので最初の投稿)表示するウィジェットを作成しました。これは一時的な解決策で、ウィジェットが機能するかどうかを確認するためだけですが、実際には機能します。

    バックエンドで「タイムテーブル」投稿タイプに属するすべての投稿のドロップダウンリストを表示し、必要に応じてフロントエンドに表示したい投稿を選択できるようにしたいのです。どうすればこれを実現できますか?

    もし助けていただけるなら/助けたいなら、感謝します。

返信を残す

コメントを残していただきありがとうございます。すべてのコメントは、当社のコメントポリシーに従ってモデレーションされますので、ご了承ください。メールアドレスは公開されません。名前フィールドにキーワードを使用しないでください。個人的で有意義な会話をしましょう。