デザインを変更しました。

2023.10.06

Logging

おはようございます、ブログのデザインを変更しました、オリジナルなデザインにしました。前々から変えようと思っていてやっとこさデザインを変更した感じですね。すごく単純なテンプレートですが、これから先、いまのテンプレートをベースに変更していきたいと思っています。

背景は動く動画にしています、スマホでは動きませんがこちらも動くようにgif画像か何かにして対応します。。また動画は飽きたら変えていくか、ランダムか時間帯で動画を変更していきたいと思っています。

このテンプレートの利点は画像や動画を差し込まなくても滞在時間が昔とあまり変わらないことが利点です、そしてSEOはもう生成AIの時代にはあまり役に立たない、むしろBOTに引っ掛からないほうがページを参照して頂けるのではと思っています。

なお、今まで通りアイキャッチ画像は入れていますが、RSSやシェアして頂けるときぐらいしか表示されない感じです。

タグ

BOT, Gif画像, RSS, SEO, スマホ, デザイン, テンプレート, ベース, ランダム, 利点, 前々, 動画, , , 時代, 時間帯, 滞在時間, 生成AI, 背景, 通りアイキャッチ画像,

ワードプレスのブロックテーマの位置づけと手順書リンク。

2023.05.11

Logging

おはようございます、ワードプレスのブロックテーマの位置づけは新たな選択肢の一つだろうと勝手に思っている。理由はWPの公式サイトの命名と位置づけにある、当初はこれからはブロックテーマ、フル編集だと謳っていたかもですが、テンプレート販売会社などから不満が出たのかも?

公式サイトの開発ドキュメントでもテーマベイシックはphpを使用した方法の手順が書かれている。ベイシック=基準がいきなりhtmlファイルに置き換わることは無さそうというのが自分の見解です。

ブロックテーマのドキュメントを見ていると、やはりベースのテンプレートを素人の人が作るのはいささか難しい感じがする。そしてフル編集になると編集した値はDBか独自ファイルに保存されるようになるのだろう、これを手直しするのは開発者側からすると面倒だし、デザイナーさんからするとあまり良い思いはしないだろうと思う。そういう事もあってテーマベイシックはこれからもphpだろうと思います。

タグ

db, htmlファイル, php, wp, テーマベイ, テーマベイシック, テンプレート, ドキュメント, ファイル, ブロックテーマ, ベース, ベイシック, ワードプレス, 命名, 当初, 手順, 素人, 見解, 選択肢, 開発ドキュメント,

GW最終日。総括してみました、出来ないことだらけ?

2023.05.07

Logging

おはようございます、机の中を整理するとほとんどがゴミ🚯だった中の人です。さて、GWでやろうと決めていて出来なかったことは、個人開発だけかな。プログラミングはしていたのですが、バグの修正やちょっとした機能追加が主でアプリをリリースした、WEBサービスをリリースしたとかはない感じですね。

机の中を整理していたら、昔のアイディアノートが出てきたりして大きな収穫でした。今見るとヘンテコなもので、このままリリースしたりすると決済部分などの障壁になるじゃないかなと思うサービスですが、アイディアは面白いというのがチラホラあったので良かったです。

今、二番煎じのサービスを無料でリリースしてみたいなという事を考えていて、簡単なものから時間がかかる物までなんか作ってみたい気がします。気がするだけで終わるかも知れませんが・・・。

あと、このブログをテンプレート部分をどうにかしたいなとも思っています。今のテンプレートのデザインを組み込めるようにしないと何れ、WordPressのバージョンアップで現行のテンプレート使用できなくなる可能性(フルサイト編集 (Full site editing, FSE))もあるので、これは近いうちに対応したいと思っています。

タグ

FSE, Full site editing, GW, WordPress, アイディア, アイディアノート, ゴミ, テンプレート, テンプレート部分, バグ, プログラミング, ヘンテコ, 二番煎じ, 修正, 収穫, , , 現行, 近いうち, 障壁,

#laravelは独自のCommand対応しているだって😂。

2023.04.05

Logging

おはようございます。LaravelはCommand対応しているだってさ。そんな事も知らないなんて言わせない😂。やり方に関しては割愛しますがchatGPT様に出来るかどうかを問おうてみました。結果はこんな感じです。

はい、Laravelのartisanコマンドは、開発者が独自のコマンドを作成するためのフレームワークを提供しています。独自のコマンドを作成することで、LaravelのCLIツールをさらに活用することができます。

artisanコマンドを作成するには、make:command artisanコマンドを使用します。以下は、example:commandという名前の独自のartisanコマンドを作成する例です。

php artisan make:command ExampleCommand

これにより、app/Console/CommandsディレクトリにExampleCommand.phpファイルが作成されます。このファイルには、独自のコマンドの処理を定義するためのテンプレートが含まれています。

独自のコマンドを実装するためには、handleメソッドを実装する必要があります。このメソッドは、コマンドが実行されたときに実行されるコードを記述します。

後はこちらのページを参考にしてみてください。コマンドから独自の処理が実行されたことがわかるかと思います。

https://migisanblog.com/laravel-artisan-command/

これで定期的に実行したい処理を実行することが可能になります👍。

タグ

-Command, App, artisanコマンド, chatGPT様, CLIツール, command Artisanコマンド, command ExampleCommand, Commandsディレクトリ, console, example, ExampleCommand.phpファイル, handleメソッド, Laravel, Make, php artisan make, コマンド, テンプレート, フレームワーク, メソッド,

WPのapply_filtersとadd_filterの説明が難解に書いているサイトが多い事に🤬。 #php #wordpress

2022.09.28

Logging

おはようございます、今月もそろそろ終わります🤔。

さて、来月から毎月一回しか投稿しなかったブログサイトを不定期更新に変更します。指針の変更にあたってブログデザインもデフォルトのテンプレートから無料のcocoonというテンプレートに変えました。

今までYOUTUBE動画URLを記載しているだけの投稿だったので、アイキャッチー画像等は無い状態でした。その為、テンプレートを変えるとノーイメージという画像が表示されるという事象が発生。これをプラグイン側で解決したかったのですが、独自の関数を多く使用しておりプラグイン側だけでは無理だということで、独自のアイキャッチー画像を処理しているコアの部分にapply_filtersを差し込み、プラグイン側でadd_filterで処理するという流れの対応を行いました。

apply_filtersというのはテンプレート側(他のプラグインでも可能)の関数の中に目印(付箋)を付けることが出来る機能(関数)です。
add_filterは目印(付箋)の部分の処理が走った時に、自分が作った処理を割り込ませることが出来る機能(関数)です。

※まずはカッコの中は読まずに理解してください😌。

巷では、これをややこしい例えで解説している所が多いのですが、それだけの話しです。今回、image-funcs.phpファイル(cocoon)の関数get_original_image_tagにapply_filtersを挿入し独自プラグインから呼び出して、ノーイメージの時にYOUTUBEのサムネイル画像を表示させるという事を行っていました。前、次ページのサムネイル画像は現在のページのサムネ画像が表示されるというバグはあるものの、ちゃんと跡のサムネ画像は変わっています。

サンプルコードを掲載します。ご参考程度に😌。

<?php
//オリジナルサムネイルタグの取得
if (!function_exists('get_original_image_tag')) :
  function get_original_image_tag($image_url, $width, $height, $class, $alt = null)
  {
    $html = '<img src="' . esc_url($image_url) . '" alt="' . esc_attr($alt) . '" class="' . esc_attr($class) . '" width="' . esc_attr($width) . '" height="' . esc_attr($height) . '" />';
    $html = convert_all_lazy_load_tag($html);
    $html = apply_filters("youtubeimage",$html);
    return $html;
  }
endif;
<?php
/*
Plugin Name: youtube image
Description: youtube image chg
Version: 1.0
*/
if (!defined('ABSPATH')) exit;
function youtubeimage_chg($imgurl){
    $url = null;
    if(preg_match("/(https:\/\/www\.youtube\.com\/watch\?v=[\-|_|a-zA-Z|0-9]{1,})/",get_the_content(),$matches)){
        $url = "https://img.youtube.com/vi/".preg_replace("/(https:\/\/www\.youtube\.com\/watch\?v=)/","",$matches[0])."/hqdefault.jpg";
        $url = preg_replace("/(src=\"https:\/\/.*no\-image\-[0-9]{2,3}\.png\")/","src=\"".$url."\"",$imgurl);
     }
     return $url?$url:$imgurl;
}

add_filter("youtubeimage","youtubeimage_chg");

余談:この対応はテンプレートが更新(アップデート)際にファイルが上書きされる可能性があります。その際にページが見えなくなるという問題を秘めています🙇。

タグ

Add, apply, cocoon, filter, filters, php, url, WordPress, wp, youtube, あい, イメージ, キャッチー, コア, こと, これ, サイト, デザイン, デフォルト, テンプレート, ノー, プラグイン, ブログ, , 不定期, , 事象, 今月, 使用, 処理, 動画, 変更, 多く, 対応, 投稿, 指針, 更新, 来月, 毎月, , 無料, 状態, 画像, 発生, 表示, 解決, 記載, 説明, 部分, 関数, 難解,

お店のホームページ(サイト)の作り方を解説していきます。

2022.02.28

Logging

おはよう御座います。
今日は昨日よりも暖かくなるそうですね☀。

さて、突然ですがお店のホームページ(サイト)の作り方を解説していきます。次回の記事から何回かにわけてお店のホームページ(サイト)の作り方を文字と動画により解説していきますね。今では無料でお店のホームページを作ることが出来てしまいますが、無料でサイトを作った場合は広告などが表示されお店のブランドを損ねてしまう可能性大なので、月額131円で静的なサイトを構築していく方法を教えます(予約機能付き:一部有料)。

尚、プログラムを全て解説すると言うよりかは雛形のサイトを提供しますので、そちらの雛形のサイトに記載している文字や画像を差し替えてオリジナルテンプレートをご自身で作ってもらうという形になります。それも難しいという方に向けて文字や画像をサイトから差し替えできるサービスを作っていこうと思っていますが開発は未定です、そのサービスは無料で提供するつもりでいます。

無料で提供して見返りも求めないという自分には何にもメリットがないものです。ただ、このサイトのアクセス数がもっと増えたらなという思いがあります😌。

追伸:無料で提供するテンプレートの中に、こちらのリンクを貼っていただければ有り難いですがこれもご自身で判断してください。

タグ

131, オリジナル, お店, こと, ご自身, サービス, サイト, そちら, それ, つもり, テンプレート, ブランド, プログラム, ホームページ, 一部, 予約, , 今日, 何回か, 作り方, 全て, 動画, 可能性, 場合, , 広告, , 提供, 文字, , 方法, 昨日, 月額, 有料, 未定, 構築, 機能, 次回, 無料, 画像, 表示, 解説, 記事, 記載, 開発, 雛形,

サイトのデザインを一新しました、オリジナルのテンプレートです。

2022.02.26

Logging

こんにちは、今日は気温も春陽気になるらしくて、明日はもっと暖かくなるようです。

そんな中で家でゴトゴトとWordPressのテンプレートを作成していました、このテンプレートは特に頑張ったところなどはなく、Bootstrapを雛形みたいなものです。シンプルイズベストという事だけは気にしています。余計なモノは極力少なくしたつもりです。SEOなどはあまり意識はしていないのだけど、以前のリンク構造を一応意識しています。

因みにこのテンプレートは未完成ですので、時間が空いたときに改善していきます。完成しても提供するなどは今の所、考えていません。尚、Bootstrapは4系を使用しています、5系にそのうち変更すると思います。

タグ

4, 5, Bootstrap, SEO, WordPress, イズ, うち, オリジナル, サイト, シンプル, つもり, デザイン, テンプレート, とき, ところ, ベスト, もの, リンク, 一新, , , , 今日, 以前, 余計, 作成, 使用, 変更, 完成, , 意識, , 提供, 改善, 明日, , 時間, 未完成, 構造, , 気温, 陽気, 雛形,

WordPress5.9からかなり仕様が変わります。それで?

2021.12.20

Logging

寒い日が続きますね、昨日も今日の朝もかなり冬って感じの朝だな…?

さてショッキングな情報を先日、耳にしましたので共有します。WordPress5.9からテンプレート仕様が大きく変わるみたいですね。かなりガラリと変わります。どのように変わるかはこちらのサイトとこちらのサイトでご確認くださいませ。尚、今までのテンプレートは今の所、バージョンアップしても使えるとは思いますが、5.9以降、バージョンアップにつれて今までのテンプレートは使用できなくなるのは目に見えています。

Introducing WordPress 5.9

テンプレートの仕様が変わることにより、色の変更や配置などがGUI(グラフィカルユーザーインターフェース)で簡単に操作出来るようになります。今後、ちょっとした色の変更や見栄えなどの変更をユーザーが簡単にできてしまうようになるという事はWEBを生業としている業界からすると、かなり痛手かと思います。

WP5.9の対応してしまった後は、仕事が激減しそうな気さえします。やはりウェブはウェブ制作だけでは食べていけない、そんな感じになってくるのではないかなとヒシヒシと感じます。

このサイトもWP5.9がリリースされたら、オリジナルテンプレートを作って運用していく事になりそうです。

以上、現場からでした。

タグ

5.9, GUI, web, WordPress, wp, アップ, インターフェース, かなり, グラフィカル, こちら, こと, ご確認, サイト, ショッキング, テンプレート, バージョン, ユーザー, , , 今後, 今日, 仕事, 仕様, 使用, 先日, 共有, , 変更, 対応, , 情報, , 操作, , 昨日, , 業界, 生業, 痛手, , 簡単, , , 見栄え, 配置,

WPのカレンダーや予約投稿の日付がズレてしまう件:WP5.3以降:?

2020.11.15

Logging

WPのカレンダーや予約投稿の日付がズレてしまう件:WP5.3以降に起きるらしい。ワードプレスが大幅なアップグレードしたことが影響しているみたいです。この原因を突き止めるのに結構時間がかかりました。頭の良い人はすごいなと関心、、、。原因ですが簡単に言うとテンプレートやプラグインに下記の関数を使用していたら何やら、日付がズレてしまうというなんとも言えない事象が起きる可能性があります。例えば、テンプレートのFunctions.phpの中にそういう記述があると表示される時にカレンダーがズレてしまうとかそういう現象が発生します。

date_default_timezone_set("Asia/Tokyo");

因みに自分はこの原因を突き止めるのに結構時間を割きました、共通してくれると有り難いです。参考にしたサイトを貼っときます。
https://blog.medical-design.co.jp/archives/2569

元リンクは下記のツイッターのリンクを参照ください。

タグ

5.3, Asia, blog, co, date, default, functions, https, jp, medical-design, php, quot, set, timezone, Tokyo, wp, アップ, カレンダー, グレード, こと, サイト, ズレ, テンプレート, なん, プラグイン, プレス, ワード, 下記, , 予約, 事象, , , 使用, 共通, 原因, 参考, 可能性, 大幅, 影響, 投稿, 日付, , 時間, 現象, 発生, 簡単, 自分, 表示, 記述, 関心, 関数, ,

WordPressの公式ウィジェットカレンダー末日がズレている?ので直した。

2020.11.02

Logging

WordPressの公式ウィジェットカレンダー末日がズレている?ので直した。直した箇所はこちら変数名に$ooooと書いている部分が今回修正した箇所です。修正したファイルはWordPressのインクルードフォルダにある。ジェネラルテンプレートぴーえぃちーぴー(general-template.php)

wp-includes\general-template.php 

このファイルを直しました。コアファイルなので次期UPDATEで修正されるかとは思いますが、それまではこちらの修正でなんとかなるさ?!

因みに何故、$ooooにしたのかは、お???の???という土佐弁からです。ファイルの中にget_calendar(げっとカレンダー)という関数があるのでそちらを修正しています。原因は下記です。
gmdateというものを使用している所をローカルサーバーの時間で対応しました、さくらレンタルサーバーのタイムゾーンは日本時間を指しています。若干の誤差はあるけれど酷い誤差ではないのでdateで大丈夫そうです。

要は日付の末日が正確に取れていないことが原因みたいです?
はやく修正してくれることを願っています。

function get_calendar( $initial = true, $echo = true ) {
	global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;

	$key   = md5( $m . $monthnum . $year );
	$cache = wp_cache_get( 'get_calendar', 'calendar' );

	if ( $cache && is_array( $cache ) && isset( $cache[ $key ] ) ) {
		/** This filter is documented in wp-includes/general-template.php */
		$output = apply_filters( 'get_calendar', $cache[ $key ] );

		if ( $echo ) {
			echo $output;
			return;
		}

		return $output;
	}

	if ( ! is_array( $cache ) ) {
		$cache = array();
	}

	// Quick check. If we have no posts at all, abort!
	if ( ! $posts ) {
		$gotsome = $wpdb->get_var( "SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1" );
		if ( ! $gotsome ) {
			$cache[ $key ] = '';
			wp_cache_set( 'get_calendar', $cache, 'calendar' );
			return;
		}
	}

	if ( isset( $_GET['w'] ) ) {
		$w = (int) $_GET['w'];
	}
	// week_begins = 0 stands for Sunday.
	$week_begins = (int) get_option( 'start_of_week' );

	// Let's figure out when we are.
	if ( ! empty( $monthnum ) && ! empty( $year ) ) {
		$thismonth = zeroise( intval( $monthnum ), 2 );
		$thisyear  = (int) $year;
	} elseif ( ! empty( $w ) ) {
		// We need to get the month from MySQL.
		$thisyear = (int) substr( $m, 0, 4 );
		// It seems MySQL's weeks disagree with PHP's.
		$d         = ( ( $w - 1 ) * 7 ) + 6;
		$thismonth = $wpdb->get_var( "SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')" );
	} elseif ( ! empty( $m ) ) {
		$thisyear = (int) substr( $m, 0, 4 );
		if ( strlen( $m ) < 6 ) {
			$thismonth = '01';
		} else {
			$thismonth = zeroise( (int) substr( $m, 4, 2 ), 2 );
		}
	} else {
		$thisyear  = current_time( 'Y' );
		$thismonth = current_time( 'm' );
	}

	$unixmonth = mktime( 0, 0, 0, $thismonth, 1, $thisyear );
	$last_day  = gmdate( 't', $unixmonth );
	$oooothisyear  = date( 'Y', $unixmonth  );
	$oooolast_day  = date( 't', $unixmonth );
	$oooothismonth = date( 'm' , $unixmonth);

	// Get the next and previous month and year with at least one post.
	$previous = $wpdb->get_row(
		"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
		FROM $wpdb->posts
		WHERE post_date < '$thisyear-$thismonth-01'
		AND post_type = 'post' AND post_status = 'publish'
			ORDER BY post_date DESC
			LIMIT 1"
	);
	$next     = $wpdb->get_row(
		"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
		FROM $wpdb->posts
		WHERE post_date > '$oooothisyear-$oooothismonth-{$oooolast_day} 23:59:59'
		AND post_type = 'post' AND post_status = 'publish'
			ORDER BY post_date ASC
			LIMIT 1"
	);

	/* translators: Calendar caption: 1: Month name, 2: 4-digit year. */
	$calendar_caption = _x( '%1$s %2$s', 'calendar caption' );
	$calendar_output  = '<table id="wp-calendar" class="wp-calendar-table">
	<caption>' . sprintf(
		$calendar_caption,
		$wp_locale->get_month( $thismonth ),
		gmdate( 'Y', $unixmonth )
	) . '</caption>
	<thead>
	<tr>';

	$myweek = array();

	for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) {
		$myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 );
	}

	foreach ( $myweek as $wd ) {
		$day_name         = $initial ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd );
		$wd               = esc_attr( $wd );
		$calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$day_name</th>";
	}

	$calendar_output .= '
	</tr>
	</thead>
	<tbody>
	<tr>';

	$daywithpost = array();

	// Get days with posts.
	$dayswithposts = $wpdb->get_results(
		"SELECT DISTINCT DAYOFMONTH(post_date)
		FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
		AND post_type = 'post' AND post_status = 'publish'
		AND post_date <= '{$oooothisyear}-{$oooothismonth}-{$oooolast_day} 23:59:59'",
		ARRAY_N
	);

	if ( $dayswithposts ) {
		foreach ( (array) $dayswithposts as $daywith ) {
			$daywithpost[] = (int) $daywith[0];
		}
	}

	// See how much we should pad in the beginning.
	$pad = calendar_week_mod( gmdate( 'w', $unixmonth ) - $week_begins );
	if ( 0 != $pad ) {
		$calendar_output .= "\n\t\t" . '<td colspan="' . esc_attr( $pad ) . '" class="pad">?</td>';
	}

	$newrow      = false;
	$daysinmonth = (int) gmdate( 't', $unixmonth );
	$oooodaysinmonth = (int) date( 't', $unixmonth );

	for ( $day = 1; $day <= $oooodaysinmonth; ++$day ) {
		if ( isset( $newrow ) && $newrow ) {
			$calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
		}
		$newrow = false;

		if ( current_time( 'j' ) == $day &&
			current_time( 'm' ) == $thismonth &&
			current_time( 'Y' ) == $thisyear ) {
			$calendar_output .= '<td id="today">';
		} else {
			$calendar_output .= '<td>';
		}

		if ( in_array( $day, $daywithpost, true ) ) {
			// Any posts today?
			$date_format = gmdate( _x( 'F j, Y', 'daily archives date format' ), strtotime( "{$thisyear}-{$thismonth}-{$day}" ) );
			/* translators: Post calendar label. %s: Date. */
			$label            = sprintf( __( 'Posts published on %s' ), $date_format );
			$calendar_output .= sprintf(
				'<a href="%s" aria-label="%s">%s</a>',
				get_day_link( $thisyear, $thismonth, $day ),
				esc_attr( $label ),
				$day
			);
		} else {
			$calendar_output .= $day;
		}

		$calendar_output .= '</td>';

		if ( 6 == calendar_week_mod( gmdate( 'w', mktime( 0, 0, 0, $thismonth, $day, $thisyear ) ) - $week_begins ) ) {
			$newrow = true;
		}
	}

	$pad = 7 - calendar_week_mod( gmdate( 'w', mktime( 0, 0, 0, $thismonth, $day, $thisyear ) ) - $week_begins );
	if ( 0 != $pad && 7 != $pad ) {
		$calendar_output .= "\n\t\t" . '<td class="pad" colspan="' . esc_attr( $pad ) . '">?</td>';
	}

	$calendar_output .= "\n\t</tr>\n\t</tbody>";

	$calendar_output .= "\n\t</table>";

	$calendar_output .= '<nav aria-label="' . __( 'Previous and next months' ) . '" class="wp-calendar-nav">';

	if ( $previous ) {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-prev"><a href="' . get_month_link( $previous->year, $previous->month ) . '">? ' .
			$wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) .
		'</a></span>';
	} else {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-prev">?</span>';
	}

	$calendar_output .= "\n\t\t" . '<span class="pad">?</span>';

	if ( $next ) {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-next"><a href="' . get_month_link( $next->year, $next->month ) . '">' .
			$wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) .
		' ?</a></span>';
	} else {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-next">?</span>';
	}

	$calendar_output .= '
	</nav>';

	$cache[ $key ] = $calendar_output;
	wp_cache_set( 'get_calendar', $cache, 'calendar' );

	if ( $echo ) {
		/**
		 * Filters the HTML calendar output.
		 *
		 * @since 3.0.0
		 *
		 * @param string $calendar_output HTML output of the calendar.
		 */
		echo apply_filters( 'get_calendar', $calendar_output );
		return;
	}
	/** This filter is documented in wp-includes/general-template.php */
	return apply_filters( 'get_calendar', $calendar_output );
}

タグ

calendar, general-template, GET, gmdate, oooo, php, UPDATE, WordPress, wp-includes, インクルード, ウィジェット, カレンダー, コア, こちら, サーバー, さくら, ジェネラル, ズレ, そちら, それまで, タイム, テンプレート, ファイル, フォルダ, もの, レンタル, ローカル, 下記, , 今回, 使用, 修正, 公式, 原因, 土佐弁, 変数, 対応, , 時間, 末日, 次期, 箇所, 部分, 関数,

WPのテンプレート構成とか。

2020.09.30

Logging

まず、オリジナルテンプレートを作成したときに使ったファイル構成はこんな感じです。この中で大事なファイルはstyle.css,functions.php,index.phpです。ワードプレスの自作テンプレートを作る際にどうすれば良いのかというのは、検索するといろいろな人が書かれているので、この記事では割愛しますね。

404.php
archive.php
category.php
footer.php
functions.php
header.php
index.php
page.php
screenshot.jpg
search.php
sidebar.php
single.php
style.css

いろいろなサイトではstyle.cssのheader部分にいろいろと記述しないといけないような感じで書かれていますが、テンプレートを配布するのではない場合は数行、記述するだけで良いです。下記のような感じでテンプレート名だけ書いてあげれば良いです、そして空ファイルで上記の重要なファイル作成してあげるだけで、一応、ワードプレスのテンプレートの選択肢の中に自作テンプレートが現れます。

/*
Theme Name : 自作テンプレート名(英字)
*/

自作テンプレートには命名規則などがあるので、そちらも気をつけて命名してください。特に間違いやすいのがfunction.phpと記述してしまうことです。正しくはfunctions.phpですので間違いないようにsが無いとワードプレスのファンクションとして認識しないので注意です。

タグ

404, archive, category, css, footer, functions, header, index, jpg, page, php, screenshot, search, sidebar, single, style, wp, いろいろ, オリジナル, サイト, テンプレート, とき, ファイル, プレス, ワード, 下記, , , 作成, 割愛, 場合, 大事, 感じ, 数行, 検索, 構成, 自作, 記事, 記述, 部分, 配布, ,

PHP7でTwigを使う。

2020.05.10

Logging

Twigとは小枝であり、PHPのテンプレートエンジンであります。テンプレートエンジンが何なのかはぐぐってください。ここでは割愛します。

Twig3.x(3系)、Dumpの表示の仕方が書かれていないのでそれを記載します。記載方法は下記になります。特に記載方法が変わったのはデバッグの時の記述方法です、最初、デバッグ方法をググっていたのですが、全然上手くいかずエラーばかりはいていました。※Twig2系の情報が結構ヒットします。

require_once '/vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('テンプレートの階層を指定');
$twig = new \Twig\Environment($loader,['debug' => true]);
$twig->addExtension(new \Twig\Extension\DebugExtension());//?ここの記述を忘れずに!!
echo $twig->render('index.html(レンダーするテンプレートファイル)', ['items'=>$this->top_view()]);

結局、公式ページのドキュメントにデバッグ方法が書かれていたのですが、それにたどり着くまで、小一時間ぐらいWEBの荒野をさまよっていました。最初からドキュメントを見ろよという教訓を得たのですが、結構ググる方を優先してしまう自分がいます。実際はドキュメントの中で検索するのが一番なのかもなと。皆さんが使用するようなエンジンはドキュメントを見るほうが良いと今回、痛感しました。これからはドキュメントを見るようにします。

https://twig.symfony.com/doc/3.x/functions/dump.html

タグ

2, , 39, 7, addExtension, autoload, debug, dump, Environment, FilesystemLoader, gt, loader, new, once, php, require, true, Twig, vendor, エラー, エンジン, ここ, それ, デバッグ, テンプレート, ヒット, 下記, 仕方, , 割愛, 小枝, 情報, 指定, 方法, , 最初, 表示, 記載, 記述, 階層,

WEBお問い合わせフォームのお値段はいったい幾ら?

2020.01.17

Logging

WEBお問い合わせフォームのお値段はいったい幾らなのか?
堀江貴文氏はデジタルの値段は限りなくゼロに近くなると言っていたけど、無料のWEB申し込みフォームやお問い合わせフォームはある。自分もお問い合わせフォームの簡易的な物を作ってみましたのでファイルをアップしますね。

テンプレートエンジンとしてtwig3.0を使用しています、そのため動作環境はPHP7.2以上になります。ソースコードの可変は行って構いません、またこのソースコードの動作保証などは致しません。WEB担当者様が確認を行いバグ等があれば修正を行ってください。

尚、Composerでtwigをインストール済みという事が前提となります。また送信部分やエラー処理についてはご自身で機能の追加が必要となります。


サンプルページ
https://zip358.com/tool/request/

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>お問い合わせ</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"
        integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
        integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
        integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
        integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
        crossorigin="anonymous"></script>
    <script src="js/common.js"></script>
    <style>
        .jumbotron {
            background-color: #2bd4d0;
            color: #fff;
        }

        .btn-primary {
            color: #fff;
            background-color: #2bd4d0 !important;
            border-color: #2bd4d0 !important;
        }

        .input-group-text {
            background-color: #2bd4d0;
            border: 1px solid #2bd4d0;
        }
    </style>
</head>

<body>
    <div class="jumbotron jumbotron-fluid">
        <div class="container">
            <h1 class="display-4">お問い合わせ</h1>
            <p class="lead">必須項目を入力し送信ボタンを押してください。<br>DEMOのため送信はできません</p>
        </div>
        <div class="alert alert-warning" id="error_sendmail" role="alert">
        </div>
    </div>
    <form action="index.php" method="POST">
        <div class="container">
            <div class="row">
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text">お名前[必須]</span>
                    </div>
                    <input type="text" name="name" class="form-control" id="name" placeholder="name" value="{{name}}">
                </div>
                <div class="alert alert-warning" id="error_name" role="alert">
                </div>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text">メールアドレス[必須]</span>
                    </div>
                    <input type="email" name="email" class="form-control" id="email" placeholder="name@example.com"
                        value="{{email}}">
                </div>
                <div class="alert alert-warning" id="error_email" role="alert">
                </div>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text" id="basic-addon1">@</span>
                    </div>
                    <input type="text" name="twitter_account" class="form-control" placeholder="twitter account"
                        aria-label="twitter account" aria-describedby="basic-addon1" value="{{twitter_account}}">
                </div>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text">お問い合わせ内容[必須]</span>
                    </div>
                    <select name="meun" class="form-control" id="exampleFormControlSelect1">
                        {% for selectop in meun_option %}
                        <option value="{{selectop.value}}" {{ selectop.value == selectoped ? " selected":"" }}>
                            {{selectop.name}}</option>
                        {% endfor %}
                    </select>
                </div>
                <div class="alert alert-warning" id="error_meun" role="alert">
                </div>
                <div class="input-group">
                    <div class="input-group-prepend">
                        <span class="input-group-text">コメント[必須]</span>
                    </div>
                    <textarea name="comment" rows="10" class="form-control" aria-label="コメント">{{comment}}</textarea>
                </div>
            </div>
            <div class="row">
                <footer class="blockquote-footer">
                    <small class="text-muted">
                        ご自由に記入ください。
                    </small>
                </footer>
            </div>
            <div class="alert alert-warning" id="error_comment" role="alert">
            </div>
            <button type="submit" class="mt-2 btn btn-primary btn-lg btn-block">送信する</button>
        </div>
    </form>
</body>

</html>
<?php
session_start();
require __DIR__ . '/vendor/autoload.php';
use Twig\Environment;
use Twig\Loader\FilesystemLoader;

$loader = new FilesystemLoader(__DIR__.'/templates');
$twig = new Environment($loader);
$meun_option = json_decode(file_get_contents("js/select.json"));

$form = ["name","email","twitter_account","meun","comment"];
$data = [];

if($_POST){
	foreach($_POST as $key=>$val){
		$_SESSION[$key] = strip_tags($val);
	}
}
if($_SESSION){
	foreach($_SESSION as $key=>$val){
		$_SESSION[$key] = strip_tags($val);
	}
}

foreach($form as $key => $val){
	$data[$val] = $_SESSION[$val]?$_SESSION[$val]:"";
}

extract($data);

print $twig->render('index.html.twig',["name"=>$name,"email"=>$email,"twitter_account"=>$twitter_account,"selectoped"=>$meun,"comment" => $comment,"meun_option"=>$meun_option]);

タグ

3.0, 358, 7.2, com, Composer, DOCTYPE, gt, html, https, lt, php, request, tool, Twig, web, www, zip, アップ, インストール, エラー, エンジン, お問い合わせ, コード, ご自身, サンプル, ゼロ, ソース, ため, デジタル, テンプレート, バグ, ファイル, フォーム, ページ, , 使用, 保証, 修正, 値段, 処理, 前提, 動作, 堀江貴文, 幾ら, 必要, 担当者, 機能, 無料, , 環境, 確認, 簡易的, 自分, 追加, 送信, 部分,

全ての定義済の変数を配列で返す

2019.03.16

Logging

全ての定義済の変数を配列で返す関数です。
全てなのでとってきて欲しくないものまでも取ってきます。
なのでそういうのはunsetします。
ちなみに似たようなのでcompactという関数がPHPには存在します。
何に使用する場合に便利かは人それぞれ違いますが
自分の場合はテンプレートエンジンを使用するときに重宝してます。
テンプレートエンジン・・・TwigやSmartyなど

<?php
$a = "abc";
$b = array(1,2,3);
$c = 123;
$vars = get_defined_vars();
unset($_COOKIE);
unset($_POST);
unset($_GET);
unset($_FILES);
unset($GLOBALS);
foreach ($vars as $key => $value) {
    var_dump($key);
    var_dump($value);
}
//...
var_dump($vars);

 

タグ

, 2, , ABC, array, as, compact, COOKIE, defined, dump, files, foreach, GET, GLOBALS, gt, key, lt, php, POST, Smarty, Twig, unset, value, var, vars, エンジン, それぞれ, テンプレート, とき, もの, , , 使用, 便利, 全て, 場合, 変数, 存在, 定義, 自分, 配列, 重宝, 関数,

VisualStudioC++で昔のような開発環境を整えるには。

2016.12.15

Logging


VisualStudioC++で昔のような開発環境を整えるには
オンライン、拡張機能からC++WindowsFormsをダウンロードします。
次にプロジェクト作成時に、オンライン、テンプレートを選択し
先程、インストールしたC++WindowsFormsを選択することで
開発環境のベースが簡単に出来上がります。
あとはゴリゴリコードを書くことにより
アプリが出来ます。
Windows7やWindows Vistaなどで動作するものを
作るとなるとVC++2015の場合、Win32で作成するか
上記のようなCLRで作成するか、はたまたDirectXで開発する
などになると思います・・・。
旧のOSを使っている場合はやはりWin32がベストなんでしょうけど
自分は未だかつて、Win32で開発などをした事がありません。
Win32で開発しているところはあまり今は見かけないような気がします。
WindowsFormsを使用して開発をしている所が主だと、VC++の
利点はC++などが使用可能だということです。
テキストで開発できて後からすべてを組み合わせることが
可能なんですね・・・。下っ端はC++で開発させられてVC++に
触らせてくれないという所もあるかもしれません(経費削減のため)。

 

タグ

C++WindowsForms, DirectX, VC++, VC++2015, Visual C++, VisualStudioC, Win32, Windows Vista, Windows7, Windowsプログラミング, オンライン, テキスト, テンプレート, プログラミング学習, 下っ端, 拡張機能, 経費削減, 開発環境,

ITの技術は上がっているのに単価が下がっている?様に見える。

2016.07.28

Logging


先日、熱いので涼みに電気店へ行ってきました。何やら店員さんとおじさんがホームページ作成ソフトのことで押問答をしていました。
今日のお題は「ITの技術は上がっているのに単価が下がっている?様に見える。」です。
昔に比べて無料でお手軽に出来ることが増えてきているけれど、無料には大体、落とし穴があって実際、使ってみるとやはり無料だなと感じるところが多い。
無料で利益をあげるひと。
WEBのサイトをテンプレートを無料で配布している人がいる。
無料だけど、必ずテンプレートの中に配布元のリンク先がある。
配布元から言えばSEO対策にもなるし、そのリンクへ行くと広告などが必ず貼っているので、クリックすると配布元の収入になったりする。よく出来た循環だと思う。
無料で良い物を提供するー>間接的な収入で利益を上げる。WEBだけでは無く。アプリも同じで無料で提供して課金制で収入を上げる方法、この方法もWEBの広告で儲けるのとよく似ている。
どちらも無料でユーザーが使用できるけれど何処かで利益をあげていたりするですね。
こういう循環はWEB広告が登場したあたりから
増えてきているように思えます。
昔からあった手法がITやWEBにも適応されたのだと思うのです・・・。
[画像提供元]フリー写真素材ぱくたそ?

タグ

IT, SEO, web, アプリ, クリック, こと, サイト, ソフト, テンプレート, ところ, どちら, ひと, ホームページ, ユーザー, リンク, るー, , , 今日, 作成, 先日, 利益, 単価, 収入, 大体, 実際, 対策, 広告, 店員, 循環, 技術, 押問答, 提供, 方法, , , 無料, , 落とし穴, 課金, 配布, 配布元, 電気店, ,

ダウンロードマーケットっていうサイトが存在している。

2016.07.20

Logging


この頃、自分がブログで言っている天気予報がことごとく
外れています。天気予報士には確実に受からないだろうと・・・。
今週の後半は雨が降ると記事に書いたのに、その次の日には四国は
梅雨明けとお天気おねえさんが発表してました。
今日のお題は「ダウンロードマーケットっていうサイトが存在している。」です。
この市場は個人にはι(´Д`υ)アツィー気がする。
自分も参戦するつもりでいます。
会社でWordPressのテンプレートを販売しませんかというのを
会議で投げてみたんだけど、単価が下がる一方だから
という事で自分の案は棚上げされてしまいました。
確かに会社で作るには時間とコストの事を
考えるとそうなるなと理解しましたが、個人には
この手のテンプレート販売は熱い気がします。
自分もテンプレート制作して売っちゃう事も視野にいれて
何か無いかと考えています。デザイナーさんが
いれば、後はゴトゴトコード書けば出来る気がするので
まずはテンプレートのカスタマイズできる
ベースを作ってみようかなと考えています。
恐らく来月にはできる予感がします。
出来たら一部、技術公開をしたいと思います(*´ω`*)。
後、そろそろテンプレートも変更して
いままで無料だったテンプレートを有料に変えようかとも
考えています。時期は来年あたり。
 
 
 

タグ

Webデザイナー養成講座, WordPress, アツィー, アツィー気, お天気おねえさん, お題, コスト, サイト, ダウンロードマーケット, デザイナー, デザイン教科書, テンプレート, テンプレート販売, 個人, 単価, 天気予報士, 梅雨明け,