• 解決済 cou8724

    (@cou8724)


    質問失礼します。

    ウィジェットで会社概要を入れれるようにしたくて作っているのですが、コードが繰り返しになっていて今後追加するときとかに面倒臭いと思い、ループさせようと思ったのですが、どうにもうまくいかず困っています。

    やりたいこととしては
    $gaiyou1 = $instance[‘gaiyou1’];
    $gaiyou_name1 = $this->get_field_name(‘gaiyou1’);
    $gaiyou_id1 = $this->get_field_id(‘gaiyou1’);
    $gaiyou2 = $instance[‘gaiyou2’];
    $gaiyou_name2 = $this->get_field_name(‘gaiyou2’);
    $gaiyou_id2 = $this->get_field_id(‘gaiyou2’);
    $gaiyou3 = $instance[‘gaiyou3’];
    $gaiyou_name3 = $this->get_field_name(‘gaiyou3’);
    $gaiyou_id3 = $this->get_field_id(‘gaiyou3’);
    $gaiyou4 = $instance[‘gaiyou4’];
    $gaiyou_name4 = $this->get_field_name(‘gaiyou4’);
    $gaiyou_id4 = $this->get_field_id(‘gaiyou4’);
    こいつをもっとコンパクトにまとめたいと思っています。ただ、変数を配列に入れるなどをやろうとしてもうまくいきません、どのように書けばいいかご教授願えませんか?

    phpはワードプレスから始めた程度の初心者です。宜しくお願いします。

    ーーーーーーーー以下コードーーーーーーーー

    class My_Widget extends WP_Widget{
    function __construct() {
    parent::__construct(
    ‘widget_gaiyou’,
    ‘test_gaiyou’,
    array( ‘description’ => ‘会社概要’, )
    );
    }

    public function widget( $args, $instance ) {
    $gaiyou1 = $instance[‘gaiyou1’];
    $gaiyou2 = $instance[‘gaiyou2’];
    $gaiyou3 = $instance[‘gaiyou3’];
    $gaiyou4 = $instance[‘gaiyou4’];
    echo $args[‘before_widget’];

    echo <<<COM
    <h3 class=”h3_title”>会社概要/Company</h3>
    <dl>
    <dt>商号</dt>
    <dd>${gaiyou1}</dd>
    <dt>URL</dt>
    <dd>${gaiyou2}</dd>
    <dt>本社所在地</dt>
    <dd>${gaiyou3}</dd>
    <dt>Tel</dt>
    <dd>${gaiyou4}</dd>
    </dl>
    COM;

    echo $args[‘after_widget’];
    }

    public function form( $instance ){
    $gaiyou1 = $instance[‘gaiyou1’];
    $gaiyou_name1 = $this->get_field_name(‘gaiyou1’);
    $gaiyou_id1 = $this->get_field_id(‘gaiyou1’);
    $gaiyou2 = $instance[‘gaiyou2’];
    $gaiyou_name2 = $this->get_field_name(‘gaiyou2’);
    $gaiyou_id2 = $this->get_field_id(‘gaiyou2’);
    $gaiyou3 = $instance[‘gaiyou3’];
    $gaiyou_name3 = $this->get_field_name(‘gaiyou3’);
    $gaiyou_id3 = $this->get_field_id(‘gaiyou3’);
    $gaiyou4 = $instance[‘gaiyou4’];
    $gaiyou_name4 = $this->get_field_name(‘gaiyou4’);
    $gaiyou_id4 = $this->get_field_id(‘gaiyou4’);
    ?>
    <p>
    <label for=”<?php echo $gaiyou_id1; ?>”>商号:</label>
    <input class=”widefat” id=”<?php echo $gaiyou_id1; ?>” name=”<?php echo $gaiyou_name1; ?>” type=”text” value=”<?php echo esc_attr( $gaiyou1 ); ?>”>
    </p>
    <p>
    <label for=”<?php echo $gaiyou_id2; ?>”>URL:</label>
    <input class=”widefat” id=”<?php echo $gaiyou_id2; ?>” name=”<?php echo $gaiyou_name2; ?>” type=”text” value=”<?php echo esc_attr( $gaiyou2 ); ?>”>
    </p>
    <p>
    <label for=”<?php echo $gaiyou_id3; ?>”>所在地:</label>
    <input class=”widefat” id=”<?php echo $gaiyou_id3; ?>” name=”<?php echo $gaiyou_name3; ?>” type=”text” value=”<?php echo esc_attr( $gaiyou3 ); ?>”>
    </p>
    <p>
    <label for=”<?php echo $gaiyou_id4; ?>”>TEL:</label>
    <input class=”widefat” id=”<?php echo $gaiyou_id4; ?>” name=”<?php echo $gaiyou_name4; ?>” type=”text” value=”<?php echo esc_attr( $gaiyou4 ); ?>”>
    </p>
    <?php
    }

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • プラグインを利用しないという前提でしょうか

    トピック投稿者 cou8724

    (@cou8724)

    返信ありがとうございます!

    そうですね、利用しない前提です。

    タイトルに入れておいてくれると、相談に乗る側にも親切ですよ。

    プラグインを使わないで、ショートコードで入れてはいかが。

    こんにちは

    無理にループで書く必要はないと思いますが、どうしてもという場合なら

    https://gist.github.com/tenman/3a2e2b31610936405d2c3db29833f211

    みたいに書くこともできると思います。書きなぐっただけなので、工夫の余地はかなりあると思います。

    gaiyou1 とかは、もっと意味が伝わるようなものにしておくと、メンテしやすくなるのではないでしょうか?

    コード書くときには、コードは 逆クォート で囲ってください 読めないので、、、:)

    商号のところ間違っていたりしますが、ケアーしてください

    モデレーター jim912

    (@jim912)

    nobita さんも回答されてますが、せっかく書いたので参考までに。

    class My_Widget extends WP_Widget{
    	private $items = array(
    		1 => '商号',
    		2 => 'URL',
    		3 => '本社所在地',
    		4 => 'Tel',
    	);
    
    	public function widget( $args, $instance ) {
    ?>
    		<h3 class="h3_title">会社概要/Company</h3>
    		<dl>
    <?php foreach ( $this->items as $num => $item_name ) : ?>
    			<dt><?php echo esc_html( $item_name ); ?></dt>
    			<dd><?php echo esc_html( $instance['gaiyou' . $num] ); ?></dd>
    <?php endforeach; ?>
    		</dl>
    <?php
    	}
    
    	public function form( $instance ) {
    		$gaiyou = array();
    		foreach ( $this->items as $num => $item_name ) {
    ?>
    			<p>
    			<label for="<?php echo esc_attr( $this->get_field_id( 'gaiyou' . $num ) ); ?>"><?php echo esc_html( $item_name ); ?>:</label>
    			<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'gaiyou' . $num ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'gaiyou' . $num ) ); ?>" type="text" value="<?php echo esc_attr( $instance['gaiyou' . $num] ); ?>">
    			</p>
    <?php
    		}
    	}
    }

    ※ 検証してません。

    トピック投稿者 cou8724

    (@cou8724)

    皆さんありがとうございました!

    参考にさせていただいて、自分なりに作ることができました!

    逆クオートとかも気をつけます!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「ウィジェットで会社概要を入れたい」には新たに返信することはできません。