ウィジェットで会社概要を入れたい
-
質問失礼します。
ウィジェットで会社概要を入れれるようにしたくて作っているのですが、コードが繰り返しになっていて今後追加するときとかに面倒臭いと思い、ループさせようと思ったのですが、どうにもうまくいかず困っています。
やりたいこととしては
$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
}
-
こんにちは
無理にループで書く必要はないと思いますが、どうしてもという場合なら
https://gist.github.com/tenman/3a2e2b31610936405d2c3db29833f211
みたいに書くこともできると思います。書きなぐっただけなので、工夫の余地はかなりあると思います。
gaiyou1 とかは、もっと意味が伝わるようなものにしておくと、メンテしやすくなるのではないでしょうか?
コード書くときには、コードは
逆クォート
で囲ってください 読めないので、、、:)商号のところ間違っていたりしますが、ケアーしてください
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 } } }
※ 検証してません。
- トピック「ウィジェットで会社概要を入れたい」には新たに返信することはできません。