WP 月別アーカイブにカスタム投稿も含める

functions.php

/**
* 月別アーカイブにカスタム投稿も含める
*/
function my_pre_get_posts( $query ) {
    if ( $query->is_month() && $query->is_main_query() ) {
        $query->set( 'post_type', array('post','wat','design_lab') );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );

function my_getarchives_where( $where ){
    $where = "WHERE";
    $where .= " (post_type = 'post' OR post_type = 'wat' OR post_type = 'design_lab')";
    $where .= " AND post_status = 'publish'";
    return $where;
}
add_filter( 'getarchives_where', 'my_getarchives_where' );

sidebar-archives.php

<aside class="archive">
    <h2 class="archive_title">月別アーカイブ</h2>
    <ul class="archive_list">
        <?php
        $args = array(
            'type' => 'monthly', //月別を指定
        );
        wp_get_archives( $args );
        ?>
    </ul>
</aside>
'''
あとは読み込みたい場所で
‘‘‘
<?php get_sidebar('archives'); ?>
‘‘‘

PHP 標準入力で名前と年齢を入力

PHPファイルはコマンドラインから名前と年齢を入力して受け取るプログラムです。

名前を入力する関数を作成

function inputName(){
    
    echo 'あなたの名前を教えてください。: ';
    $stdin_name= trim(fgets(STDIN)) ;  
    
    return checkName($stdin_name);  //(下記で記述)再帰関数でバリデーション関数を通った名前を返す
}

$stdin_name = inputName();

名前入力のバリデーションチェック関数

function checkName($name){
    
    if( empty($name)){
        echo '名前が空欄です。'.PHP_EOL;
        return inputName();  //再帰関数でエラーの時はもう一度入力させる
    }

    if( mb_strlen( $name) > 10 ){
        echo '10文字以内で入力してください。';
        return inputName(); //再帰関数でエラーの時はもう一度入力させる
    }
    
    return($name);
}

年齢バージョンも追加して全体のコードはこちら。

//標準入力
//PHPファイルはコマンドラインから実行してください。
//
//仕様
//
//「あなたの名前を教えてください。」出力
//↓
//入力 ex) Micael
//↓
//「Micaelさん、あなたの年齢は何歳ですか?」出力
//↓
//入力 ex) 20
//↓
//「Micaelさん(年齢:20)、ご登録ありがとうございます!」出力
//↓
//プログラム終了


function checkName($name){
    
    if( empty($name)){
        echo '名前が空欄です。'.PHP_EOL;
        return inputName();
    }

    if( mb_strlen( $name) > 10 ){
        echo '10文字以内で入力してください。';
        return inputName();
    }
    
    return($name);
}

function checkAge($age,$name){
    
    if( empty($age)){
        echo '年齢が空欄です。'.PHP_EOL;
        return inputAge($name);
    }

    if( !is_numeric($age)){
        echo '整数で入力してください。';
        return inputAge($name);;
    }
    
    return($age);    
    
}

function inputName(){
    
    echo 'あなたの名前を教えてください。: ';
    $stdin_name= trim(fgets(STDIN)) ;  
    
    return checkName($stdin_name); 
}



function inputAge($stdin_name){
    
    echo $stdin_name . 'さん、あなたの年齢は何歳ですか? :';
    
    $stdin_age = trim(fgets(STDIN));
    
    return checkAge($stdin_age, $stdin_name);
}

$stdin_name = inputName();
$stdin_age = inputAge($stdin_name);

echo $stdin_name . 'さん(年齢:' . $stdin_age .')、ご登録ありがとうございます!';

これをもう少しスッキリさせると

<?php

//39, 標準入力
//PHPファイルはコマンドラインから実行してください。
//
//仕様
//
//「あなたの名前を教えてください。」出力
//↓
//入力 ex) Micael
//↓
//「Micaelさん、あなたの年齢は何歳ですか?」出力
//↓
//入力 ex) 20
//↓
//「Micaelさん(年齢:20)、ご登録ありがとうございます!」出力
//↓
//プログラム終了


function checkName($name){
    
    $check_flag = true;
    
    if( empty($name)){
        echo '名前が空欄です。'.PHP_EOL;
        return false;
    }

    if( mb_strlen( $name) > 10 ){
        echo '10文字以内で入力してください。';
        return false;
    }
    
    return $check_flag;
}

function checkAge($age){
    
    $check_flag = true;
    
    if( empty($age)){
        echo '年齢が空欄です。'.PHP_EOL;
        return false;
    }

    if( !is_numeric($age)){
        echo '整数で入力してください。';
        return false;
    }
    
    return $check_flag;
    
}


function input($stdin_name = ''){
    
    $stdin_value= trim(fgets(STDIN)) ;
    
    
    if( !empty($stdin_name) ){
        
        $check = checkAge($stdin_name);
        
    }else{
        
        $check = checkName($stdin_value);
        
    }
    
    if( !$check ){
        
        return input();
    }
    
    return $stdin_value; 
   
}

echo 'あなたの名前を教えてください。: ';
$stdin_name = input();

echo $stdin_name . 'さん、あなたの年齢は何歳ですか? :';
$stdin_age = input($stdin_name);

echo $stdin_name . 'さん(年齢:' . $stdin_age .')、ご登録ありがとうございます!';

?>

PHP 特定の文字が含まれているかチェックする関数

string型の変数を2つ宣言して、 第二引数のString(文字列)が第一引数に含まれているかどうかのboolean型を返す関数を作成

$str_1 = 'caaa';
$str_2 = 'b';

function checkHaystackInNeedle ($haystack , $needle){
    
    $is_pos = true;
    
    if( strpos($haystack, $needle) === false ){
        $is_pos = false;
        echo "no" .PHP_EOL;
    }
    
    return $is_pos;
    
}

$a = checkHaystackInNeedle ($str_1 , $str_2);
var_dump($a);

 ```
余談ですが、一般的には、PHPでは変数名はスネークケース、関数名はキャメルケースで書くことが多いようなので、備忘録として。

html2canvas 【JavaScript】HTML要素を画像に変換&ダウンロードさせる方法

https://keymaso.com/programemory/javascript/html-to-image/

 

上記を元に作成すると、画像のダウンロードが出来なかったのですが、サーバにアップしたら出来ました。

 

hinanaoblog.xyz

```
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>テスト</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
    <script src="html2canvas.min.js"></script>
    <script type="text/javascript">
    
        function getDisplayImage(){
            //html2canvas実行
            html2canvas(document.getElementById("target")).then(function(canvas) {
                downloadImage(canvas.toDataURL());
            });
        }

        function downloadImage (data) {
            var fname ="testimage.png";
            var encdata= atob(data.replace(/^.*,/, ''));
            var outdata = new Uint8Array(encdata.length);
            for (var i = 0; i < encdata.length; i++) {
                outdata[i] = encdata.charCodeAt(i);
            }
            var blob = new Blob([outdata], ["image/png"]);
            
            if (window.navigator.msSaveBlob) {
                //IE
                window.navigator.msSaveOrOpenBlob(blob, fname);
            } else {
                //それ以外?
                document.getElementById("getImage").href=data;            //base64そのまま設定
                document.getElementById("getImage").download=fname;        //ダウンロードファイル名設定
                document.getElementById("getImage").click();             //自動クリック
            }
        }
        
          const showMessage = () => {
          const textbox = document.getElementById("input-message");
          const inputValue = textbox.value;

          //テキストボックスの値を使って、出力するメッセージを生成する
          const output = "入力された内容は「" + inputValue + "」です。";
          //出力用のp要素にメッセージを表示
          document.getElementById("output-message").innerHTML = output;
        }

    </script>
</head>
    <body>
        
        <form id="form1" action="#">
        <input type="text" id="input-message">
        <input type="button" onclick="showMessage()" value="送信">
        </form>
        
        <div>
            <input id="downloadImageButton" style="width:120px;" type="button" value="画像保存" onclick="getDisplayImage();" >
            <a id="getImage" href=""  style="display:none;"  download="image.png">画像保存</a>
        </div>
        <hr>

         <div id="target" style="width:500px;height:500px;overflow: hidden">
            <img id="work" src="test.png"/>
             <img src="about_img01@2x.png" alt="">
            <div id="output-message" style="position:absolute;z-index:10;font-size:28px;top:150px;left:250px;background-color:#FFFFFF;">仕事中</div>
        </div>
      
    </body>
</html>

```