Page No.3

オプション削除処理 uninstall.php

管理画面においてプラグインを削除した時に、データベースに保存してあるオプションの値も削除する処理は、ファイル uninstall.php を使用する方法にしています。そちらの方がシンプルでかんたんなのでありまして。そのファイルは codex にあったそのままを流用しています。uninstall.php は以下が書いてあるだけのもの。

<?php
	// if uninstall.php is not called by WordPress, die
	if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
	    die;
	}

	$option_name = 'hldycls_pcldr_options';

	delete_option( $option_name );

	// for site options in Multisite
	delete_site_option( $option_name )
?>
PHP
CopyExpand

table での表示用ファイル table_layout.php

table でのレイアウトが指定されている場合は、その分は別ファイルにしたので、それを読み込むようにしてあります。やはり余計な処理が減る分、css grid のほうが速いであろうし主流になると思う。とは、いうものの、まだこれも必要なのでしょう。それでも、こちらの table による html 生成の関数もより高速化を図って刷新してあります。速くなっていると思うのではありますけれど。

<?php
    $tmpstrary = array();

    $parentstyle = '';
    if ( '' !== $prm['parentstyle'] ) {
        $parentstyle = ' style="' . htmlspecialchars( $prm['parentstyle'], ENT_QUOTES, 'UTF-8') . '"';
    }

    $tmpstrary[] =  "\n" . '<!-- Holiday-class Post Calendar Plugin v' . $this->version . ' ' . $nowdate->format( 'Y/m/j H:i' ) . ' -->' . "\n";
    $tmpstrary[] = '<div' . $parentstyle . '><table id="wp-calendar">' . "\n";

    $showwd = array();
    $showsm = array();

    $addcapt = '';
    if ( '' !== $prm['capt'] ) {
        $addcapt = '<br>' . esc_html( $prm['capt'] );
    }
    if ( 'j' === $prm['lang'] ) {
        $heisei = '';
        $nengo = '';

        $syubundate = new  DateTimeImmutable( '2019-05-01', new DateTimeZone( $timezone ) );
        $syubun = $syubundate->getTimestamp();

        if ( $tarstamp < $syubun ) {
            $heisei = ( string ) ( ( int ) $tardate->format( 'y' ) + 12 );
            $nengo = '平成';
        } else {
            $heisei = ( string ) ( ( int ) $tardate->format( 'y' ) - 18 );
            if ( '1' === $heisei ) {
                $heisei = '元';
            }
            $nengo = '令和';
        }

        $tmpstrary[] = '<caption>' . $tyear . ' ' . $nengo . $heisei . '年' . ( string ) ( ( int ) $tmonth ) . '月' . $addcapt . '</caption>' . "\n";

        $showwd = array( [ '日', ' class="nitiyou"' ], [ '月', '' ], [ '火', '' ], [ '水', '' ], [ '木', '' ], [ '金', '' ], [ '土', ' class="doyou"'], [ '日', ' class="nitiyou"' ] );

        $showsm = array( '12月', '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月', '1月' );
    } else {
        $fullengm = array( ' January', ' February', ' March', ' April', ' May', ' June', ' July', ' August', ' September', ' October', ' November', ' December' );

        $tmpstrary[] = '<caption>' . $fullengm[ ( ( int ) $tmonth - 1 ) ] . ' ' . $tyear . ' ' . $addcapt . '</caption>' . "\n";

        $showwd = array( [ 'Su', ' class="nitiyou"' ], [ 'Mo', '' ], [ 'Tu', '' ], [ 'We', '' ], [ 'Th', '' ], [ 'Fr', '' ], [ 'Sa', ' class="doyou"' ], [ 'Su', ' class="nitiyou"'] );

        $showsm = array( 'Dec', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan' );
    }

    if ( 's' === $prm['wf'] ) {
        unset ( $showwd[7] );

        $nitinum = 1;
        $donum = 7;
        $daycountadd = 0;
    } else {
        unset ( $showwd[0] );

        // 週初めが日曜でない時は空のtdが一つ少ない
        // 単に --$elem['fdwd'] の値を得たいだけであるが、0のとき-1ではなく6にしたい
        $elem['fdwd'] = ( $elem['fdwd'] + 6 ) % 7;
        $nitinum = 7;
        $donum = 6;
        $daycountadd = 1;
    }

    $tmpstrary[] = '<thead><tr>';

    foreach ( $showwd as $val ) {
        $tmpstrary[] = '<th' . $val[1] . ' scope="col" title="' . $val[0] . '">' . $val[0] . '</th>';
    }

    $tmpstrary[] = '</tr></thead>' . "\n";

    $nextmstr = ' ';
    $footer = '';

    if ( $prm['footer'] ) {
        $footerary = explode( ',', $prm['footer'] );
        if ( $footerary ) {
            foreach ( $footerary as $val ) {
                $footerstr = array();
                if ( false !== strpos( $val, ':' ) ) {
                    $footerstr = explode( ':', $val );
                    if ( isset( $footerstr[0] ) and $footerstr[0] ) {
                        $footerstr[0] = esc_html( $footerstr[0] );
                    } else {
                        $footerstr[0] = '';
                    }
                    if ( isset( $footerstr[1] ) and $footerstr[1] ) {
                        $footerstr[1] = esc_attr( $footerstr[1] );
                    } else {
                        $footerstr[1] = '';
                    }
                } else {
                    if ( $val ) {
                        $footerstr[0] = esc_html( $val );
                    } else {
                        $footerstr[0] = '';
                    }
                    $footerstr[1] = '';
                }
                if ( $footerstr[0] ) {
                    $tdclass = '';
                    if ( $footerstr[1] ) {
                        $tdclass = ' id="' . $footerstr[1] . '"';
                    }
                    $footer .= '<tr><td colspan="7"' . $tdclass . '>' . $footerstr[0] . '</td></tr>';
                }
            }
        }
    }
    $tmpstrary[] = '<tfoot>' . $footer;

    if ( '' !== $elem['nmonth'] ) {

        // 基本とする月アーカイブへのリンクから文字列置換で次月へのリンクを得る
        $monurl = str_replace( $tmonthform, $elem['nmonth'], $baselink );

        // post_type にカスタム投稿を指定してある場合に
        // そのurlパラメータを付加する
        if ( 'post' !== $prm['postype'] ) {
            $monurl = esc_url( add_query_arg( 'post_type', $prm['postype'], $monurl ) );
        }
        $nextmstr = '<a href="' . $monurl . '">' . $showsm[ ( ( int ) $tmonth + 1 ) ] . ' »</a>';
    }

    // 基本とする月アーカイブへのリンクから文字列置換で前月へのリンクを得る
    $monurl = str_replace( $tmonthform, $elem['pmonth'], $baselink );

    if ( 'post' !== $prm['postype'] ) {
        $monurl = esc_url( add_query_arg( 'post_type', $prm['postype'], $monurl ) );
    }
    $tmpstrary[] = '<tr><td colspan="3" id="hclprevm"><a href="' . $monurl . '">« ' . $showsm[ ( ( int ) $tmonth - 1 ) ] . '</a></td><td > </td><td colspan="3" id="hclnextm" >' . $nextmstr . '</td></tr></tfoot>' . "\n<tbody>";

    // trを表示するための曜日のカウント、1から7まで
    $daycount = 1;
    $roopcount = 0;
    $trary = array_fill( 1, 7, array( '', '' ) );
    $trary[1][0] = '<tr>';
    $trary[7][1] = '</tr>' . "\n";

    // 1日の曜日によって空のtdを設定
    if ( $elem['fdwd'] ) {
        $tmpstrary[] = '<tr><td colspan=' . ( string ) $elem['fdwd'] . '> </td>';
        // $daycount += $elem['fdwd'];
        $roopcount += $elem['fdwd'];
    }

    foreach ( $dateary as $i => $val ) {

        $daycount = ( $roopcount % 7 ) + 1;

        $tmpclnd = '';
        $hdclsstr = '';

        if ( $val ) {
            $hdclsstr = ' class="' . trim ( $val ) . '"';
        }
        $tmpstrary[] = $trary[ $daycount ][0] . '<td'. $hdclsstr . '>';

        if ( isset( $ispost[ $i ] ) ) {

            // 基本とする月アーカイブへのリンクに日付データを付加することで日ページへのリンクを作成
            $dayurl = $baselink . $trailslash . sprintf( '%02s',  $i ) . $slashstr;

            // post_type にカスタム投稿を指定してある場合に
			// そのurlパラメータを付加する
            if ( 'post' !== $prm['postype'] ) {
                $dayurl = esc_url( add_query_arg( 'post_type', $prm['postype'], $dayurl ) );
            }

            $linkday = $target_Ym . sprintf( '%02d', $i );

            $postdatalink = array();

            if ( '1' === $prm['daypostlink'] ) {
                foreach ( $ispost[ $i ] as $value ) {
                    if ( 'post' !== $prm['postype'] ) {
                        $postdatalink[] = '<span class="daychildrenmark"><a href="' . get_post_permalink( $value[0] ) . '">' . $value[1] . '</a></span>';
                    } else {
                        $postdatalink[] = '<span class="daychildrenmark"><a href="' . get_permalink( $value[0] ) . '">' . $value[1] . '</a></span>';
                    }
                }
                $tmpstrary[] = '<a href="' . $dayurl . '">' . $i . '</a><span class="daychildren">' . implode( '<br>', $postdatalink ) . '</span></td>';
            } else {
                foreach ( $ispost[ $i ] as $value ) {

                    $postdatalink[] = $value[1];
                }
                $tmpstrary[] = '<a href="' . $dayurl . '" title="' . implode( ',', $postdatalink ) . '">' . $i . '</a></td>';
            }
        } else {
            $tmpstrary[] = $i . '</td>';
        }

        $tmpstrary[] = $trary[ $daycount ][1];
        ++$roopcount;
    }

    if ( isset ( array_fill( 2, 7, '' )[ $daycount ] ) ) {// if ( $daycount > 1 and $daycount < 8 ) と同じこと
        $tmpstrary[] = '<td colspan=' . ( 7 - $daycount ) . '> </td></tr>' . "\n";
    }

    $tmpstrary[] = '</tbody></table></div>' . "\n";
?>
PHP
CopyExpand

Gutenberg Block Editor 用 custom block js

そして v5.0 にて実装することになった、Gutenberg Block Editor 用の custom widget block を登録&設定するための Javascript。実際のところ、ほとんど必要がないものとは思いつつ、server side renderblock を作る勉強がてら、と考えて挑戦してみたもの。でも、もしかすると、これはこれであれば有用なものなのかも、と思っています。なんだかんだと言いつつも、つれづれなるままにあれこれと自作ブロックも作っていて、もう、それに関するページも一つではなくなってますね。その手始めのページはここに、参考までに -> 「Gutengerg Block Editor だとさ」

ちなみに、自分は、”余計なものは使わない派”、なので、Block Editor 用のカスタムブロックは non-JSX にこだわって書いています。server side render のブロックは、要素の生成自体 php 側で成されることなので、javascript 側はいたってシンプルで、ほぼひな形どおりではあります。

( function( blocks, element, components, blockEditor, serverSideRender  ) {

    const { registerBlockType } = blocks,
        el = element.createElement,
        ServerSideRender = serverSideRender,
        Fragment = element.Fragment,
        InspectorControls = blockEditor.InspectorControls,
        TextControl = components.TextControl,
        RadioControl = components.RadioControl,
        useBlockProps = blockEditor.useBlockProps;

    registerBlockType( 'hldycls-pcldr/post-calendar', {
        apiVersion: 2,
        title: 'Holiday Class Post Calendar Block',
        icon: 'smiley',
        category: 'widgets',
        description: '※ブロックで表示されているスタイルの設定は、プラグインのデフォルトスタイルによるもので、オプションページで "class color" の設定がある場合はその設定で上書きされます。',

        attributes: {
            prtwidth: { type: 'string', default: '' },
            lang: { type: 'string', default: '' },
            wf: { type: 'string', default: '' },
            capt: { type: 'string', default: '' },
            footer: { type: 'string', default: '' },
            closewd: { type: 'string', default: '' },
            closel: { type: 'string', default: '' },
            anniver: { type: 'string', default: '' },
            monthly: { type: 'string', default: '' },
            postype: { type: 'string', default: '' },
            acvheader: { type: 'string', default: '' },
            acvoptorlist: { type: 'string', default: '' },
            daypostlink: { type: 'string', default: '' },
            myholidays: { type: 'string', default: '' },
            adddeldays: { type: 'string', default: '' },
            en_cache: { type: 'string', default: '' }
        },

        edit: function ( props ) {
            const blockProps = useBlockProps();

            return(
                el(
                    Fragment,
                    null,
                    el(
                        InspectorControls,
                        null,
                        el( 'div', { id: 'hldyclspcldr_sdbr'},
                            el(
                                TextControl,
                                {
                                    label: 'parent div width',
                                    help: '親ボックスの幅、デフォルトは"100%"、%, px, vw, etc. で指定',
                                    value: props.attributes.prtwidth,
                                    onChange: function( newValue ){ props.setAttributes( { prtwidth: newValue } ) }
                                }
                            ),
                            el(
                                RadioControl,
                                {
                                    label: '日本語か英語表示かの指定',
                                    selected: props.attributes.lang,
                                    options: [ { label: '日本語', value: 'j' },{ label: '英語', value: 'e' } ],
                                    onChange: function( newValue ){ props.setAttributes( { lang: newValue } ) }
                                }
                            ),
                            el(
                                RadioControl,
                                {
                                    label: '週の始めを日曜か月曜かの指定',
                                    selected: props.attributes.wf,
                                    options: [ { label: '日曜', value: 's' },{ label: '月曜', value: 'm' } ],
                                    onChange: function( newValue ){ props.setAttributes( { wf: newValue } ) }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: '表題 caption',
                                    help: '表題のcaptionに表示する文字列',
                                    value: props.attributes.capt,
                                    onChange: function( newValue ){ props.setAttributes( { capt: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: 'footer 文字列',
                                    help: '下部に表示する文字列',
                                    value: props.attributes.footer,
                                    onChange: function( newValue ){ props.setAttributes( { footer: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: '休日曜日指定',
                                    help: '独自休日を曜日で指定する場合。毎週水曜日だとか。1が日曜、7が土曜で1~7までの数字で指定。複数ももちろん可でその場合は","カンマ区切りで指定',
                                    value: props.attributes.closewd,
                                    onChange: function( newValue ){ props.setAttributes( { closewd: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: '休日日付指定',
                                    help: '独自休日を日にちで指定。年月日8桁、月日4桁ないし3桁、日にち2桁以下で指定。日にちだけなら毎月に設定され、月日なら毎年。これも","カンマ区切り',
                                    value: props.attributes.closel,
                                    onChange: function( newValue ){ props.setAttributes( { closel: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: '休日指定(アニバーサリー)',
                                    help: '上記2つとは別に特別な日を設定するときはこのanniverを使用し、毎年の事であれば4桁もしくは3桁、その年だけなら8桁使用でこの時の class は"lanniversary" になる、複数可、上に同じ',
                                    value: props.attributes.anniver,
                                    onChange: function( newValue ){ props.setAttributes( { anniver: newValue } ); }
                                }
                            ),
                            el(
                                RadioControl,
                                {
                                    label: '月別アーカイブのリストの表示',
                                    selected: props.attributes.monthly,
                                    options: [ { label: '表示', value: '1' },{ label: '表示しない', value: '0' } ],
                                    onChange: function( newValue ){ props.setAttributes( { monthly: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: '月別アーカイブリストのヘッダー文字指定',
                                    value: props.attributes.acvheader,
                                    onChange: function( newValue ){ props.setAttributes( { acvheader: newValue } ); }
                                }
                            ),
                            el(
                                RadioControl,
                                {
                                    label: '月別アーカイブリスト表示がプルダウンかリストか',
                                    help: '※管理画面内でのブロックにおいての表示は、wp_get_archives の返り値が得られないため、本来のリストは表示されません',
                                    selected: props.attributes.acvoptorlist,
                                    options: [ { label: 'pull-down', value: '1' },{ label: 'list', value: '0' } ],
                                    onChange: function( newValue ){ props.setAttributes( { acvoptorlist: newValue } ); }
                                }
                            ),
                            el(
                                RadioControl,
                                {
                                    label: '投稿がある日にオンマウスで表示させるのはツールチップかその投稿へのリンクか',
                                    selected: props.attributes.daypostlink,
                                    options: [ { label: '投稿へのリンク', value: '1' },{ label: 'ツールチップ', value: '0' } ],
                                    onChange: function( newValue ){ props.setAttributes( { daypostlink: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: 'post type',
                                    help: 'カレンダーに表示させる投稿の投稿タイプ、デフォルトは"post"。',
                                    value: props.attributes.postype,
                                    onChange: function( newValue ){ props.setAttributes( { postype: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: 'my holiday list',
                                    help: 'デフォルトで設定されている日本の祝祭日ではなく、独自の祝祭日だけを表示する場合にその日付を","カンマで区切ったリストにして入力。デフォルトは空文字',
                                    value: props.attributes.myholidays,
                                    onChange: function( newValue ){ props.setAttributes( { myholidays: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: 'デフォルトで設定されている祝祭日リストに加える、または削除する日付。',
                                    help: '年月日8ケタ、月日4ケタないし3ケタ、日にち2ケタ以下で指定。無視させる日付にだけ"-"を付けて","(半角カンマ)で区切って指定。例:3,929-,0927,20140911-。',
                                    value: props.attributes.adddeldays,
                                    onChange: function( newValue ){ props.setAttributes( { adddeldays: newValue } ); }
                                }
                            ),
                            el(
                                TextControl,
                                {
                                    label: 'キャッシュ設定',
                                    help: '"0"でdisable。ここで指定した数字がキャッシュファイル名の末尾に付加される。表示設定が違う場合など、異なる数値を指定することで複数のキャッシュファイルを設定できる',
                                    value: props.attributes.en_cache,
                                    onChange: function( newValue ){ props.setAttributes( { en_cache: newValue } ); }
                                }
                            ),
                        ),
                    ),
                    el(
                        'div',
                        blockProps,
                        el( ServerSideRender, {
                            block: 'hldycls-pcldr/post-calendar',
                            attributes: props.attributes
                        } )
                    )
                )
            );
        },
    } );
})(
    window.wp.blocks,
    window.wp.element,
    window.wp.components,
    window.wp.blockEditor,
    window.wp.serverSideRender
);
JavaScript
CopyExpand

管理画面内プラグイン設定ページ explain.php

最後にもう一つ。管理画面内のプラグイン設定ページを表示させるためのコード。これが結構長いのです。

			<table class="form-table"  style="font-size:1.2em;letter-spacing:0.1em;">
			<tr>
			<td>表示する言語の選択 : </td>
			<td><select name="hldycls_pcldr_options[lang]">
			<?php
				$selected = array( '', '' );
				if ( 'e' === $this->ret_option['lang'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="j"<?php echo $selected[1]; ?>>Japanese</option>
			<option value="e"<?php echo $selected[0]; ?>>English</option>
			</select></td><td></td>
			</tr>
			<tr>
			<td>週の始めを日曜か月曜かの指定 : </td>
			<td><select name="hldycls_pcldr_options[wf]">
			<?php
				$selected = array( '', '' );
				if ( 'm' === $this->ret_option['wf'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="s"<?php echo $selected[1]; ?>>Sunday</option>
			<option value="m"<?php echo $selected[0]; ?>>Monday</option>
			</select></td><td></td>
			</tr>
			<tr>
			<td>表題に追加表示する文字列 : </td>
			<td><input type="text" name="hldycls_pcldr_options[capt]" value="<?php echo esc_attr( $this->ret_option['capt'] ); ?>"></td>
			<td></td>
			</tr>
			<tr>
			<td>下部に追加表示する文字列 : </td>
			<td><input type="text" name="hldycls_pcldr_options[footer]" value="<?php echo esc_attr( $this->ret_option['footer'] ); ?>"></td>
			<td>複数も可。その場合は ","(半角カンマ)で区切って指定。それぞれに色等を指定するための id を付加する場合は ":"で区切って指定。例:毎週金はお休み,毎月3日は特売日:hclred,営業11時-20時:hclblue</td>
			</tr>
			<tr>
			<td>独自休日を曜日で指定 : class="closewd"</td>
			<td><input type="text" name="hldycls_pcldr_options[closewd]" value="<?php echo esc_attr( $this->ret_option['closewd'] ); ?>"></td>
			<td>毎週水曜日だとか。1が日曜、7が土曜で1~7までの数字で指定。複数ももちろん可。その場合は ","(半角カンマ)で区切って指定。</td>
			</tr>
			<tr>
			<td>独自休日を日にちで指定 : class="closedy"</td>
			<td><input type="text" name="hldycls_pcldr_options[closel]" value="<?php echo esc_attr( $this->ret_option['closel'] ); ?>"></td>
			<td>年月日8ケタ、月日4ケタないし3ケタ、日にち2ケタ以下で指定。日にちだけなら毎月に設定され、月日なら毎年。複数ももちろん可。その場合は ","(半角カンマ)で区切って指定。例:03,929,0927,20140911,20140920</td>
			</tr>
			<tr>
			<td>休日とは別に特別な日を指定 : class="anniversary" or 8ケタで"lanniversary"</td>
			<td><input type="text" name="hldycls_pcldr_options[anniver]" value="<?php echo esc_attr( $this->ret_option['anniver'] ); ?>"></td>
			<td>休日とは別に特別な日を指定。これは毎年の事なら4ケタもしくは3ケタを使用。その年だけなら年月日の8ケタ。複数ももちろん可。マウスオン時に表示させる文字列を指定する場合は、日付の後に ":"で区切り文字列を指定。例:929,0130,20170829:Site Open!</td>
			</tr>
			<tr>
			<td></td>
			<td colspan="2">*同じ日に複数の休日classを指定することもできます。この場合スタイルシートのより後に書かれている設定が適用されます。</td>
			</tr>
			<tr>
			<td>デフォルトで設定してある祝日リストに追加、または無視させる日付</td>
			<td><input type="text" name="hldycls_pcldr_options[adddeldays]" value="<?php echo esc_attr( $this->ret_option['adddeldays'] ); ?>"></td>
			<td>年月日8ケタか6ケタ、月日4ケタないし3ケタ、日にち2ケタ以下で指定。無視させる日付に "-"を付加 ","(半角カンマ)で区切って指定。例:3,929-,0927,20140911-</td>
			</tr>
			<tr>
			<td>カレンダーにリンクを表示させる投稿タイプ : </td>
			<td><select name="hldycls_pcldr_options[postype]">
			<?php
				$args = array(
					'public'   => true,
					'_builtin' => false
				);
				$output = 'names';
				$operator = 'and';

				$post_types = get_post_types( $args, $output, $operator ); 
				//array_unshift( $post_types, 'post', 'page');
				array_unshift( $post_types, 'post' );

				foreach ( $post_types  as $post_type ) {
					$selected = '';
					if ( $this->ret_option['postype'] === $post_type ) {
						$selected = ' selected';
					}
					echo '<option value="' . $post_type . '"' . $selected . '>' . $post_type . '</option>';
				}
			?>
			</select></td>
			<td>カレンダーに表示させる投稿の投稿タイプ、デフォルトは "post"。<br>カスタム投稿専用のテンプレートを使用している場合、そのカスタム投稿の日付アーカイブを表示させる場合は、別途カスタム分類用日付テンプレートが必要になります。</td>
			</tr>
			<tr>
			<td>カレンダー用のデフォルトスタイルシートのロード指定 : </td>
			<td><select name="hldycls_pcldr_options[loadstyle]">
			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['loadstyle'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="1"<?php echo $selected[1]; ?>>ロードする</option>
			<option value="0"<?php echo $selected[0]; ?>>ロードしない</option>
			</select></td>
			<td>※各ロードされるスタイルシートに関しては、そのスタイルが定まった場合、それぞれのスタイルをテンプレートの主たるスタイルシートに一つにまとめ、ロードするスタイルシートの数を少なくした方がリクエストが減り、ページ読み込みに理想的です。</td>
			</tr>

			<tr>
			<td>親div id="wp-calendar" のスタイル設定 : </td>
			<td><input type="text" name="hldycls_pcldr_options[parentstyle]" value="<?php echo esc_attr( $this->ret_option['parentstyle'] ); ?>" size="60"></td>
			<td>インラインでスタイルを設定する書式と同様。入力したスタイル設定をサニタイズしてそのままインラインに書き出します。<br>例:<span style="font-size:1.1em;color:blue;">font-size:0.75em;color:#003333;width:95%;margin:0 auto;</span></td>
			</tr>

			<tr>
			<td>月別アーカイブリストの表示 : </td>
			<td><select name="hldycls_pcldr_options[monthly]">
			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['monthly'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="1"<?php echo $selected[1]; ?>>表示する</option>
			<option value="0"<?php echo $selected[0]; ?>>表示しない</option>
			</select></td><td></td>
			</tr>
			<tr>
			<td>月別アーカイブリストのヘッダー文字列 : </td>
			<td><input type="text" name="hldycls_pcldr_options[acvheader]" value="<?php echo esc_attr( $this->ret_option['acvheader'] ); ?>"></td>
			<td></td>
			</tr>
			<tr>
			<td>月別アーカイブリストの表示形式: </td>
			<td><select name="hldycls_pcldr_options[acvoptorlist]">
			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['acvoptorlist'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="1"<?php echo $selected[1]; ?>>プルダウン</option>
			<option value="0"<?php echo $selected[0]; ?>>年別リスト</option>
			</select></td><td></td>
			</tr>
			<tr>
			<td>月別アーカイブ年別リスト用のデフォルトスタイル設定 : </td>
			<td><select name="hldycls_pcldr_options[loadacvlststyle]">
			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['loadacvlststyle'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="1"<?php echo $selected[1]; ?>>書き出す</option>
			<option value="0"<?php echo $selected[0]; ?>>書き出さない</option>
			</select></td>
			<td>※上記カレンダー用のデフォルトスタイルシートには、この年別リスト用のデフォルトスタイル設定も含まれているので、ここで書き出す必要はありません。 </td>
			</tr>
			<tr>
			<td>投稿がある日のオンマウスで表示させる対象 : </td>
			<td><select name="hldycls_pcldr_options[daypostlink]">
			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['daypostlink'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<option value="1"<?php echo $selected[1]; ?>>各投稿へのリンク</option>
			<option value="0"<?php echo $selected[0]; ?>>ツールチップ</option>
			</select>
			</td>
			<td>※各投稿へのリンクに設定した場合、そのリンクのリストの非表示、オンマウス時に表示などを cssにて設定しておかないと全体の表示が著しく乱れてしまいます。その場合は、下のデフォルトスタイルをヘッダーに書き出すことでとりあえずは回避できると思います。</td>
			</tr>
			<tr>
			<td></td><td colspan="2"></td>
			</tr>

			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['dplinkstyle'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<tr>
			<td>上で各投稿へのリンクを選択した場合のスタイル設定 : </td>
			<td><select name="hldycls_pcldr_options[dplinkstyle]">
			<option value="1"<?php echo $selected[1]; ?>>書き出す</option>
			<option value="0"<?php echo $selected[0]; ?>>書き出さない</option>
			</select></td>
			<td>※この各投稿へのリンク表示のスタイル設定は上記カレンダー用のデフォルトスタイルシートには設定してありません。なお、このスタイル設定の書き出しは、各投稿へのリンクが設定してある場合において有効となります。</td>
			</tr>

			<tr>
			<td>独自のデフォルト祝祭日を指定 : class="nitiyo"</td>
			<td><input type="text" name="hldycls_pcldr_options[myholidays]" value="<?php echo esc_attr( $this->ret_option['myholidays'] ); ?>" size="60"></td>
			<td>デフォルトで設定してある日本の祝祭日ではなく、独自の祝祭日を指定。class="nitiyo"で、日曜日と同じスタイル設定になります。日付は月日が3桁か4桁、年月日は6桁のみ。","(半角カンマ)で区切って指定。例:<span style="color:blue;">909,0317,1211,190924</span><br>このオプションに何かしら文字列が存在する場合、デフォルトの祝祭日は無視されます。</td>
			</tr>

			<tr>
			<td>class color 設定値 : </td><td><input type="text" name="hldycls_pcldr_options[colorstyle]" id="hlclpc_colorstylestr" value="<?php echo esc_attr( $this->ret_option['colorstyle'] ); ?>" size="60"></td><td><button type="button" id="hlclpc_csclear">class color 設定値のクリア</button></td>
			</tr>
			<tr>
			<td></td><td colspan="2">※日曜、土曜、各休日のclassにおいて、文字色、背景色、border色、border角丸、は下方にある各項目において設定することが出来ます。<br>各設定値は、連結されて一つのオプション値として保存されます。上のclass color 設定値がそれになります。<br>
			このオプション値に文字列がある場合は、各スタイル設定がhtmlのヘッダー部に吐き出されます。何も排出したくない場合は、上のボタンによって空欄にして「変更を保存」してください。<br>
			基本パターンは<span style="color:blue;">'曜日^文字色^背景色^border色^角丸'</span>。例、日曜なら'n^white^#ff0000^red^10px'で、各休日は "_"(アンダーバー)で区切ってつなげます。色の指定はcssと全く同様であり、指定された文字列はサニタイズされた後、ほぼそのままを排出します。<br>
			例:<span style="color:blue;">t^#da70d6^#d2b48c^gray^_n^silver^black^^3px_d^yellow^rgba( 0, 0, 255, 0.1 )^red^10px_w^red^yellow^black^50%</span><br>
			<span style="text-decoration:underline dotted red;">注:指定しない項目があっても、一つのclass につき、必ず区切り文字の "^"は4個必要です。</span><br>
			尚、各classの指定文字は、t:today、n:nitiyou、d:doyou、w:closewd、l:closel、a:anniver、v:lanniver となります。<br>
			下記の表においてそれぞれを設定した後、下にある「class color 設定値の作成」ボタンで設定されるオプション値の文字列が作成されます。各項目は選択状態で未入力の状態において、もう一度クリックすると基本的な色の候補のリストが表示されます。<br>
			このスタイル設定はページのheadタグに書き出されます。別のスタイルシートなどに対象の要素のスタイル設定が存在すれば、当然のことそれらの設定も影響されます。<br>
			尚、このオプションにて設定したスタイル設定は、管理画面における block にも適用されます。</td>
			</tr>
			<tr>
			<td>キャッシュの設定 : </td>
			<td><input type="number" name="hldycls_pcldr_options[en_cache]" value="<?php echo ( int ) $this->ret_option['en_cache']; ?>" min="0" max="9"></td>
			<td><ul style="list-style-type:square;"><li>"0"でdisable。"1"以上の数字で稼働。ここで指定した数字がキャッシュファイル名の末尾に付加されます。</li>
				<li>テンプレートにおいて、このオプション値と違う数値を引数として指定することで別のキャッシュファイルを設定できます。それによりテンプレートで異なる表示設定にしている場合など、その表示設定ごとにキャッシュファイルを指定できます。これは Gutenberg 用の 各 block においても同様です。テンプレート及び block において指定できる番号に制限はありません。投稿公開時には"5"までの番号のキャッシュファイルが全て削除されます。</li>
				<li>キャッシュファイルが更新されるタイミングは、投稿が公開されキャッシュファイルが削除された後、表示するカレンダーの日付が変更された時、表示言語、週の始まり、月別アーカイブの表示などの設定が変更された時です。何かしらの理由でキャッシュを更新したい場合は、手っ取り早いのは日付別アーカイブページを開くことです。また、キャッシュファイルが無ければ新しく作成します。</li>
				<li>尚、キャッシュデータが使用されている時は、カレンダー右下に小さなグレーのアスタリスクが表示されるので、それにて確認可能です。</li>
				<li>デフォルトは "1"。キャッシュファイルはプラグインフォルダの "hcpcldr_cache_1.php"。</li>
				<li><span style="color:red;">※オプションの設定を変更しても実際のページに反映されないときは、キャッシュファイルを使用しているのかもしれません。ご確認のほど。</span></li>
			</ul>
			</td>
			</tr>
			<?php
				$selected = array( '', '' );
				if ( '0' === $this->ret_option['en_gutenblock'] ) {
					$selected[0] = ' selected';
				} else {
					$selected[1] = ' selected';
				}
			?>
			<tr>
			<td>Gutenberg Block Editor 用 custom block の登録 : </td>
			<td><select name="hldycls_pcldr_options[en_gutenblock]">
			<option value="1"<?php echo $selected[1]; ?>>登録</option>
			<option value="0"<?php echo $selected[0]; ?>>登録しない</option>
			</select></td>
			<td>※Classic Editor の場合、全く必要無し。<br>
				管理画面においての block のスタイル設定は、プラグインのデフォルトのスタイルシートを読み込んでいますが、上記の「class color 設定値」においてスタイルが設定されている場合は、その設定にてデフォルト値を上書きします。<br>
				尚、デフォルト・スタイルシートを編集する場合は、プラグインフォルダにある、hldycls_pcldr_gb.css (管理画面専用)です。</td>
			</tr>
			<tr>
			<td>calendar のレイアウト指定 table or grid : </td>
			<td><input type="text" name="hldycls_pcldr_options[en_grid]" value="<?php echo esc_attr( $this->ret_option['en_grid'] ); ?>" size="60"></td>
			<td><ul style="list-style-type:square;"><li>デフォルトは "0" で 旧バージョンのままの table。</li>
				<li>"1" で css grid 用に div でのレイアウトとなり、grid 表示に必要なデフォルトスタイル設定をインラインスタイルに排出:display:grid;grid-template-columns:repeat( 7, 1fr );text-align:center;</li>
				<li>"2" で "1" と同様に div でレイアウトを生成しますがインラインスタイルは排出しません。(テーマのスタイルシート等で独自のスタイル設定をする場合はこちらで)</li>
				<li>インラインスタイルの設定をここに指定することもできます。生成されるものは "2" と同じもので、その親となる要素のインラインスタイルとしてサニタイズしてそのまま書き出します。grid にはするけれど他の設定もここで一緒にという場合などに。</li>
				<li>※div での出力の場合、いずれにしても1日の曜日分のオフセットを設定する "grid-column-start" の設定は、その1日の要素のインラインスタイルに出力されています。</li>
			</td>
			</tr>
			</table>
			<p class="submit"><input type="submit" name="submit" id="submit" class="button button-primary" value="変更を保存"  /></p>
		</form>

		<table style="font-size:1.1em;letter-spacing:0.1em;">
			<?php
				function hlclpc_treatstyle( $targetoption ){
					$eachstyle =  array(
						't' => array( '', '', '', '' ),
						 'n' => array( '', '', '', '' ),
						 'd' => array( '', '', '', '' ),
						 'w' => array( '', '', '', '' ),
						 'l' => array( '', '', '', '' ),
						 'a' => array( '', '', '', '' ),
						 'v' => array( '', '', '', '' )
						 );
					if ( $targetoption ) {
						$styleoption = str_replace( array( '<', '>', '\'','"', 'script', 'eval' ), '', $targetoption );
						$colorstyle = explode ( '_', $styleoption );
						foreach ( $colorstyle as $val ){
							$eachcolor = explode( '^', $val );
							if ( 5 === count( $eachcolor ) ) {
								if ( array_key_exists( $eachcolor[0], $eachstyle ) ) {
									$eachstyle[ $eachcolor[0] ] = array( $eachcolor[1], $eachcolor[2], $eachcolor[3], $eachcolor[4] );
								}
							}
						}
					}

					return $eachstyle;
				}

				$hlclpc_colorstyle = hlclpc_treatstyle( $this->ret_option['colorstyle'] );

				$radius = array( '', '3px', '5px', '10px', '50%');
			?>
			<tr>	<td colspan="3">- - - - - - - - - - - - - - - - - - - -</td></tr>
			<tr>	<td>それぞれのclassの文字色、背景色設定 : </td><td>文字色</td><td>背景色</td><td>border色</td><td>border角丸</td>
			</tr>
			<tr>
			<td>today : </td>
			<td><input type="text" id="hlclpc_tscolor" list="example" value="<?php echo $hlclpc_colorstyle['t'][0]; ?>">
			<datalist id="example">
				<option value="white"></option>
				<option value="black"></option>
				<option value="gray">グレイ</option>
				<option value="silver"></option>
				<option value="red"></option>
				<option value="blue"></option>
				<option value="green"></option>
				<option value="yellow"></option>
				<option value="navy"></option>
				<option value="#00ffff">Aqua</option>
				<option value="#7fffd4">Aquamarine</option>
				<option value="#ee82ee">Violet</option>
				<option value="ffc0cb">Pink</option>
				<option value="#eee8aa">PaleGoldenRod</option>
				<option value="#00ff7f">SpringGreen</option>
				<option value="#d2b48c">Tan</option>
				<option value="#ff4500">OrangeRed</option>
				<option value="#da70d6">Orchild</option>
			</datalist>
			</td>
			<td><input type="text" id="hlclpc_tbcolor" list="example" value="<?php echo $hlclpc_colorstyle['t'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_tlcolor" list="example" value="<?php echo $hlclpc_colorstyle['t'][2]; ?>"></td>
			<td>
				<select id="hlclpc_trcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['t'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td>nitiyou : </td>
			<td><input type="text" id="hlclpc_nscolor" list="example" value="<?php echo $hlclpc_colorstyle['n'][0]; ?>"></td>
			<td><input type="text" id="hlclpc_nbcolor" list="example" value="<?php echo $hlclpc_colorstyle['n'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_nlcolor" list="example" value="<?php echo $hlclpc_colorstyle['n'][2]; ?>"></td>
			<td>
				<select id="hlclpc_nrcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['n'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td>doyou : </td>
			<td><input type="text" id="hlclpc_dscolor" list="example" value="<?php echo $hlclpc_colorstyle['d'][0]; ?>"></td>
			<td><input type="text" id="hlclpc_dbcolor" list="example" value="<?php echo $hlclpc_colorstyle['d'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_dlcolor" list="example" value="<?php echo $hlclpc_colorstyle['d'][2]; ?>"></td>
			<td>
				<select id="hlclpc_drcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['d'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td>closewd : </td>
			<td><input type="text" id="hlclpc_wscolor" list="example" value="<?php echo $hlclpc_colorstyle['w'][0]; ?>"></td>
			<td><input type="text" id="hlclpc_wbcolor" list="example" value="<?php echo $hlclpc_colorstyle['w'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_wlcolor" list="example" value="<?php echo $hlclpc_colorstyle['w'][2]; ?>"></td>
			<td>
				<select id="hlclpc_wrcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['w'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td>closel : </td>
			<td><input type="text" id="hlclpc_lscolor" list="example" value="<?php echo $hlclpc_colorstyle['l'][0]; ?>"></td>
			<td><input type="text" id="hlclpc_lbcolor" list="example" value="<?php echo $hlclpc_colorstyle['l'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_llcolor" list="example" value="<?php echo $hlclpc_colorstyle['l'][2]; ?>"></td>
			<td>
				<select id="hlclpc_lrcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['l'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td>anniversary : </td>
			<td><input type="text" id="hlclpc_ascolor" list="example" value="<?php echo $hlclpc_colorstyle['a'][0]; ?>"></td>
			<td><input type="text" id="hlclpc_abcolor" list="example" value="<?php echo $hlclpc_colorstyle['a'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_alcolor" list="example" value="<?php echo $hlclpc_colorstyle['a'][2]; ?>"></td>
			<td>
				<select id="hlclpc_arcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['a'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td>lanniversary : </td>
			<td><input type="text" id="hlclpc_vscolor" list="example" value="<?php echo $hlclpc_colorstyle['v'][0]; ?>"></td>
			<td><input type="text" id="hlclpc_vbcolor" list="example" value="<?php echo $hlclpc_colorstyle['v'][1]; ?>"></td>
			<td><input type="text" id="hlclpc_vlcolor" list="example" value="<?php echo $hlclpc_colorstyle['v'][2]; ?>"></td>
			<td>
				<select id="hlclpc_vrcolor">
					<?php
						foreach ( $radius as $val ) {
							$selected = $val === $hlclpc_colorstyle['v'][3] ? ' selected' : '';
							echo '<option value="' .$val . '"' . $selected . '>' . $val . '</option>';
						}
					?>
				</select>
			</td>
			</tr>
			<tr>
			<td colspan="2"><button type="button" name="hlclpc_makeclassstr" id="hlclpc_makeclassstr" value="ボタン">class color 設定値の作成</button></td><td colspan="2"></td>
			</tr>
		</table>

		<div style="font-size:1.2em;letter-spacing:0.1em;">
			<h3>《 説明書き 》</h3>
			<p>ブロックエディターにおいてブロックを使用するか、カレンダーを表示させたいテンプレートの部分に</p>
			<pre style="font-weight:bold;color:blue;letter-spacing:0.05em;background:white;padding-top:20px;border-radius:10px;">
			<div>
			<?php
				if ( function_exists( 'holiday_calendar_echo' ) ) {
					holiday_calendar_echo();
				}
			?>
			</div>
			</pre>
			<p>を記述してください。<div>は任意です。<br>上記オプションは、以下のように配列にして、その関数の引数として渡すことも可能です。変更したい値だけを配列にして渡します。</p>
		<pre style="font-weight:bold;color:blue;line-height:1.1em;background:white;padding-top:20px;border-radius:10px;">
		<?php
			if ( function_exists( 'holiday_calendar_echo' ) ) {
				$args=array(
					'lang'=>'j',
					'wf'=>'m',
					'capt' => 'page post',
					'footer' => '毎週金はお休み,毎月3日は特売日:hclred',
					'closewd'=> array( '3', '5' ),
					'closel'=> array( '03', '929', '0927', '20140911', '20140920' ),
					'anniver'=> array( '929', '0130', '20171209' ),
					'monthly'=>'0',
					'postype' => 'post',
					'acvheader' => '月別アーカイヴ・リスト',
					'acvoptorlist' => '1',
					'daypostlink' => '1',
					'myholidays' => '101,909,0317,1211,190924',
					'adddeldays' => '3,929-,0927,20140911-',
					'en_cache' => '1',
				);
				holiday_calendar_echo( $args );
			}
		?>
		</pre> 
			<p>その場合は、保存されているオプション設定値は引数値で上書きされ引数で与えた値が有効になります。これは特定のテンプレートや、条件分岐で表示を変更できるということです。<br>
			条件分岐により、その一つには引数の設定をする必要が無い場合は</p>
		<pre style="font-weight:bold;color:blue;letter-spacing:0.05em;background:white;padding-top:20px;border-radius:10px;">
		<?php
			if ( function_exists( 'holiday_calendar_echo' ) ) {
				if ( is_page() ) {
					$args=array(
						'lang' => 'j',
						'monthly'=>'0',
						'wf'=>'m',
					);
				} else {
					$args = array();//←これが必要です
				}
				holiday_calendar_echo( $args );
			}
		?>
		</pre>
			<p>と、言う具合に初期化した空の配列を渡してください。これが無いとエラーになります。<br>
			引数の詳細は基本的に上記と同じです。</p>
			<table>
			<tr><td>lang</td><td>日本語か英語表示かの指定 'j' か 'e'、デフォルトは 'e' で英語。</td></tr>
			<tr><td>wf</td><td>週の始めを日曜か月曜かの指定 's' か 'm'、デフォルトは 's' で日曜。</td></tr>
			<tr><td>capt</td><td>キャプションに追加して表示させる文字列。</td></tr>
			<tr><td>footer</td><td>テーブル下部に追加して表示させる文字列。</td></tr>
			<tr><td>closewd</td><td>独自休日を曜日で指定する場合。毎週水曜日だとか。1が日曜、7が土曜で1~7までの数字で指定。複数ももちろん可。その場合は ',' 区切りの文字列でも配列でもOK。上記オプション欄を参照のこと。</td></tr>
			<tr><td>closel</td><td>独自休日を日にちで指定。年月日8ケタ、月日4ケタないし3ケタ、日にち2ケタ以下で指定。日にちだけなら毎月に設定され、月日なら毎年。これも複数可。</td></tr>
			<tr><td>anniver</td><td>それらとは別に特別な日を設定するときは anniver を使用し、これは毎年の事なら4ケタもしくは3ケタを使用。年月日の8ケタも可能で、この場合は class名が 'lanniver' となり区別が可能。複数可。</td></tr>
			<tr><td>monthly</td><td>月別アーカイブのリストも表示させたい場合は '1' を指定。'0' で非表示。デフォルトは '1' で表示。</td></tr>
			<tr><td>postype</td><td>カレンダーにリンクを表示させる投稿の page 以外の投稿タイプ、デフォルトは 'post'。</td></tr>
			<tr><td>acvheader</td><td>月別アーカイブリストのヘッダー文字指定。何も指定しなければ日本語時 '月別アーカイブ'、英語時 'Monthly Archives'。</td></tr>
			<tr><td>acvoptorlist</td><td>月別アーカイブリスト表示がプルダウンかリストかを選択、デフォルトは '1' でプルダウン、'0' でリスト表示。</td></tr>
			<tr><td>daypostlink</td><td>投稿がある日にオンマウスで表示させるのはツールチップかその投稿へのリンクか。デフォルトは '0' でツールチップ、'1' で投稿へのリンク。</td></tr>
			<tr><td>myholidays</td><td>デフォルトで設定してある日本の祝祭日ではなく、独自の祝祭日を指定する。</td></tr>
			<tr><td>adddeldays</td><td>デフォルトで設定されている祝祭日リストに日付を追加する、または削除する。</td></tr>
			<tr><td>en_cache</td><td>キャッシュ指定。'0' で disable。使える番号は'31'まで。が、投稿公開時に消去対象となるのは '5' まで。</td></tr>
			<tr><td>en_grid</td><td>レイアウト指定。'0' で table、'1' で css grid、尚、grid の場合のデフォルトスタイル設定は、display:grid;grid-template-columns:repeat( 7, 1fr );text-align:center;',</td></tr>
			</table>
			<ul style="padding-left:10px;list-style-type:square;">
			<li>スタイルシートの読み込みや各スタイル設定、Block Editor 用 custom block の読み込み等のプラグイン読み込み時に設定されるオプションに関しては、関数の引数において指定しても無意味です。</li>
			<li>尚、プラグインをアンインストールする時は、プラグインページから削除を実行すれば、<br>設定されたオプション値はデータベースから削除されます。</li>
			</ul>
		</div>
	</div>

<script type="text/javascript">
	function hlclpc_isEmpty( elem ) {
		var str = elem.value;
		if ( str == null || str.length == 0 ) {
			return false;
		} else {
			return true;
		}
	}

	function hlclpc_optionsubmit(){
		var doc = document,
			colorstr = [],
			targetstr = [ 't', 'n', 'd', 'w', 'l', 'a', 'v' ],
			scolorname,
			bcolorname,
			scolor,
			bcolor,
			i = 0;

		while ( i < 7 ) {
			scolorname = 'hlclpc_' + targetstr[ i ] + 'scolor';
			bcolorname = 'hlclpc_' + targetstr[ i ] + 'bcolor';
			lcolorname = 'hlclpc_' + targetstr[ i ] + 'lcolor';
			rcolorname = 'hlclpc_' + targetstr[ i ] + 'rcolor';
			scolor = doc.getElementById( scolorname );
			bcolor = doc.getElementById( bcolorname );
			lcolor = doc.getElementById( lcolorname );
			bradius = doc.getElementById( rcolorname );

			if ( hlclpc_isEmpty( scolor ) || hlclpc_isEmpty( bcolor ) ) {
				colorstr.push( targetstr[ i ] + '^' + scolor.value + '^' + bcolor.value + '^' + lcolor.value + '^' + bradius.value );
			}
			i++;
		}

		if ( colorstr.length ) {
			console.log( colorstr.join( ',' ) ); 
			doc.getElementById( 'hlclpc_colorstylestr' ).value = colorstr.join( '_' );
		}
	}

	document.getElementById( 'hlclpc_csclear' ).onclick = function() {
		document.getElementById( 'hlclpc_colorstylestr' ).value = null;
	}

	document.getElementById( 'hlclpc_makeclassstr' ).onclick = function() {
		hlclpc_optionsubmit();
	}
</script>
PHP
CopyExpand

使い方など

通常のプラグインインストールと同様です。ダウンしたファイルを解凍すると実行ファイルが入っているフォルダがありますから、そのフォルダをそのまま /wp-content/plugins/ へアップロードした後、ログインして左サイドメニューのプラグインに入り、プラグインリストの中の「Holiday class post calendar」を有効化してください。各設定は設定メニューに入れば出来るようになっていますし、使い方の説明もそこにあります。

後は、表示したいテンプレートのサイドメニューの中などで、下に書いてあるように関数を呼び出すだけです。もしくは、block editor を使用している場合は block を使用するという手もあります。テンプレートの編集などという手間もかからず楽ちんです。

<?php
	if ( function_exists( 'holiday_calendar_echo' ) ) {
		holiday_calendar_echo();
	}
?>
PHP
CopyExpand

問題無く動くと思うんですけど。動かなかったらご勘弁ください。
WordPress プラグイン 公式ディレクトリからダウンロードできます。

≪ Holiday Class Post Calendar plugin ≫

Holiday Class Post Calendar plugin

生成される HTML

実際に生成される HTML( grid version ) はこのようになります。見やすいように改行、字下げしてあります。

<!-- cache data -->
<!-- Holiday-class Post Calendar Plugin grid version v7.0 2023/01/17 16:42 -->
<div id="wp-calendar">
    <p class="cal-ym">2021, 令和3年10月</p>
    <div class="cal-wd" style="display:grid;grid-template-columns:repeat( 7, 1fr );text-align:center;">
        <b class="nitiyou" title=""></b>
        <b title=""></b>
        <b title=""></b>
        <b title=""></b>
        <b title=""></b><b title=""></b>
        <b class="doyou" title=""></b>
    </div>
    <div class="cal-body" style="display:grid;grid-template-columns:repeat( 7, 1fr );text-align:center;"">
        <div class="gettan" style="grid-column-start:6;">1</div>
        <div class="doyou" data-post="y">
            <a href="https://strix.main.jp/tns/?m=20211002">2</a>
            <span class="daychildren">
                <span class="daychildrenmark">
                    <a href="https://strix.main.jp/tns/?p=23350">珍しいお客さん#2</a>
                </span><br>
                <span class="daychildrenmark">
                    <a href="https://strix.main.jp/tns/?p=23353">珍しいお客さん#1</a>
                </span>
            </span>
        </div>
        <div class="nitiyou">3</div>
        <div class="lanniversary" title="first COVID Vaccine 15*45~16*00">4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
        <div class="doyou">9</div>
        <div class="nitiyou">10</div><div>11</div><div>12</div><div>13</div><div>14</div><div>15</div><div class="doyou">16</div>
        <div class="nitiyou">17</div><div>18</div><div>19</div><div>20</div><div>21</div><div>22</div><div class="doyou">23</div>
        <div class="nitiyou">24</div><div>25</div><div>26</div><div>27</div><div>28</div><div>29</div><div class="doyou">30</div>
        <div class="nitiyou">31</div>
    </div>
    <div class="cal-btmstr">
        <p >Holiday Class Post Calendar Plug-in v7.0</p>
    </div>
    <div class="cal-footer" style="display:grid;grid-template-columns:1fr 1fr;">
        <div id="lclprevm">
            <a href="https://strix.main.jp/tns/?m=202109">« 9月</a>
        </div>
        <div id="hclnextm">
            <a href="https://strix.main.jp/tns/?m=202111">11月 »</a>
        </div>
    </div>
</div>
<h2 class="widgettitle monacvlst">月別アーカイブ</h2>
<ul class="monthlylist">
    <li class="arcyear">
        <label for="chlbis-1" class="chlshwlbl" id="shwchl-1">2022</label>
        <input type="checkbox" name="chlbis-1" id="chlbis-1">
        <ul class="mlchildren">
            <li><a href="https://strix.main.jp/tns/?m=202209"> 9</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202201"> 1</a> (1)</li>
        </ul>
    </li>
    <li class="arcyear">
        <label for="chlbis-2" class="chlshwlbl" id="shwchl-2">2021</label>
        <input type="checkbox" name="chlbis-2" id="chlbis-2">
        <ul class="mlchildren">
            <li><a href="https://strix.main.jp/tns/?m=202110"> 10</a> (2)</li>
            <li><a href="https://strix.main.jp/tns/?m=202109"> 9</a> (2)</li>
            <li><a href="https://strix.main.jp/tns/?m=202107"> 7</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202106"> 6</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202105"> 5</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202103"> 3</a> (1)</li>
        </ul>
    </li>
    <li class="arcyear">
        <label for="chlbis-3" class="chlshwlbl" id="shwchl-3">2020</label>
        <input type="checkbox" name="chlbis-3" id="chlbis-3">
        <ul class="mlchildren">
            <li><a href="https://strix.main.jp/tns/?m=202012"> 12</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202010"> 10</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202009"> 9</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202008"> 8</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202006"> 6</a> (3)</li>
            <li><a href="https://strix.main.jp/tns/?m=202005"> 5</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202003"> 3</a> (1)</li>
            <li><a href="https://strix.main.jp/tns/?m=202001"> 1</a> (6)</li>
        </ul>
    </li>
</ul>
<p style="font-size:0.8em;color:#E1E1A1;padding:0;margin:0;text-align:right;"><span id="cachemark">*</span></p>
HTML
CopyExpand

Sanbanse Funabashi

Top

スクロールさせるか画像をクリックすると元に戻ります。