WordPressのデフォルト投稿状態を「非公開」にする

WordPressを日記帳として活用していますが、デフォルトの公開状態が「公開」になっているため、油断をすると日記がネット上に公開されてしまう問題がちょくちょく発生します。

このようなことを避けるため、投稿記事の「公開状態」のデフォルトを「公開」から「非公開」にする方法についてメモをしておきます。

wp-includes/functions.php」に次のコードを追加する。

/**
 * Set default state to private' when creating new draft article
 */
add_action( 'post_submitbox_misc_actions' , 'post_status_default_private' );
function post_status_default_private() {
    global $post;

    if ( $post->post_status == 'publish' ) {
        $visibility = 'public';
        $visibility_trans = __('Public');
    } elseif ( !empty( $post->post_password ) ) {
        $visibility = 'password';
        $visibility_trans = __('Password protected');
    } elseif ( $post->post_type == 'post' && is_sticky( $post->ID ) ) {
        $visibility = 'public';
        $visibility_trans = __('Public, Sticky');
    } else {
        $post->post_password = '';
        $visibility = 'private';
        $visibility_trans = __('Private');
    } 
?>
    <script type="text/javascript">
    (function($){
        try {
            $('#post-visibility-display').text('<?php echo $visibility_trans; ?>');
            $('#hidden-post-visibility').val('<?php echo $visibility; ?>');
            $('#visibility-radio-<?php echo $visibility; ?>').attr('checked', true);
        } catch(err) {
        }
    })(jQuery);
    </script>
<?php
}Code language: PHP (php)

MacでVivaldiに1Password(Classic)機能拡張をインストールする手順

Vivaldiで1Password7(1Password Xではない)の機能拡張を使用する場合、何も考えずに設定すると1Password X用の機能拡張がインストールされたり、1Password classic機能拡張をインストールしてもVivaldi上で1Passwordを開けないなどトラブルが多く、レアケースなトラブルでWeb検索による解決にも時間がかかるので、下記に手順をメモしておきます。

  1. Vivaldi,1Password 7をインストールする
  2. Terminalを開き、下記コマンドを実行する
    # mkdir -p  ~/Library/Application\ Support/Google/Chrome
  3. Vivaldi上で1Password classic機能拡張をインストールする。
    https://support.1password.com/cs/1password-classic-extension/

参考になれば幸いです。

Windowsの言語設定の変更方法(Windows10&11)

Windowsでいろいろなアプリを使用をしていると、アプリケーションによってはUIのレイアウトが崩れ、文字が読めずに使うために苦労する、もしくは使えないということがあります。原因はWindowsのデフォルトフォントが言語によって異なるためである場合がほとんどです。

画面を正しく表示させる確実な方法はWindowsの言語設定をそのアプリが作成された言語に変更することですが、手順が多く忘れやすい設定項目があるので、忘れないようにメモをしておきます。特に手順5は忘れやすいので注意してください。

下記説明は日本語から英語のものになりますが、どの言語でも操作は同じです。

  1. [スタートメニュー]から[設定]アプリを起動する
  2. [時刻と言語]>[言語と地域]>[管理用の言語の設定]を選択する
  1. [Windowsの表示言語]をアプリ開発言語と同じものにセットし、[国または地域]をアプリの開発地域に合わせてセットする
  1. [管理用の言語の設定]を選択し、表示されたダイアログの[管理]タブを選択して、システムロケールを変更する。すると再起動を促されるので再起動する。
  1. 再起動が完了し再ログインした後、再度[地域]ダイアログを表示する。
  2. [設定のコピー]ボタンを押して現在の表示設定をコピーする。コピーするためには[Welcome screen and system account] チェックボックスをチェックしてからOKボタンを押すこと。

参考になれば幸いです。

Windows上で巨大なテキストファイルを分割する

ソフト開発をしていると膨大なログファイルを扱うことがありますが、大きなテキストファイルは扱いが大変です。このような場合、PowerShellで以下の様にすると簡単に分割でき、扱いも楽になります。

$i=0; cat <分割対象テキストファイル> -ReadCount <分割行数> | % { $_ > <分割後テキストファイルのPrefix>$i.txt;$i++ }

ただし、CSVファイルなど先頭の数行がヘッダ行の場合だと単純な分割ではヘッダ情報がなくなるため、手動でヘッダをコピーしなくてはならず、少々使い勝手が悪いです。

この問題を解決したスクリプトファイルが以下。分割したテキストファイルのそれぞれに共通ヘッダを追加できるようにし、出力ファイルの場所を指定できるようにもしています。$lineのデフォルト値である’1048576’はExcelで扱えるCSVの最大行数になります。

SplitText.ps1:

Param(
    [String]$text_file_path,
    [int]$lines=1048576,
    [String]$output_directory,
    [int]$header
)

############
# Debug #
############
if( [string]::IsNullOrEmpty($text_file_path) ){
    $text_file_path = "S:\ScriptDevelopment\SplitText.ps1\Sample.csv"
}

if( $lines -eq 0 ){
    $lines = 1048576 #Max line number of Excel
}

if( $header -le 0 ){
    $header = 0
}

if( ![string]::IsNullOrEmpty($output_directory) ){
    if( -Not(Test-Path $output_directory) ){
        New-Item $output_directory -ItemType Directory > $null
    }
}

############
# Constant #
############
#[String]$text_file = Split-Path -Leaf ${text_file_path}
[String]$base_name = [System.IO.Path]::GetFileNameWithoutExtension(${text_file_path})
[String]$extention = [System.IO.Path]::GetExtension(${text_file_path})
[String]$file_path = Split-Path -Parent ${text_file_path}

########
# main #
########

#read header
[String]$header_lines=""
[System.IO.StreamReader]$stream_reader = New-Object System.IO.StreamReader($text_file_path)
[int]$read_count=1
while( $null -ne ($stream_line = $stream_reader.ReadLine()) ) {
    if( $read_count -gt $header ){ break }
    $header_lines += $stream_line + "`r`n"
    $read_count++
}
$stream_reader.Close()

#output
$read_count = 0;
[int]$file_number=0
[int]$max_output_lines = $lines - $header
[System.IO.StreamReader]$stream_reader = New-Object System.IO.StreamReader($text_file_path)
while( $null -ne ($stream_line = $stream_reader.ReadLine()) ) {
    if( $read_count -ge $header ){ 
        if( ( ( $read_count - $header ) % $max_output_lines ) -eq 0 ){
            if( $null -ne $stream_writer ){ $stream_writer.close() }
            $file_number++
            [string]$output_file_name=${base_name}+"_"+${file_number}+${extention}
            Write-Output ${output_file_name}
            if( [string]::IsNullOrEmpty($output_directory) ){
                [string]$output_file_path=${file_path}+"\"+${output_file_name}
            } else {
                [string]$output_file_path=${output_directory}+"\"+${output_file_name}
            }
            $stream_writer = New-Object System.IO.StreamWriter( $output_file_path, $false, [Text.Encoding]::GetEncoding("UTF-8") )
            $stream_writer.Write($header_lines)
        }
        $stream_writer.WriteLine($stream_line)
    }
    $read_count++
}
if( $null -ne $stream_reader ) { $stream_reader.Close() }
if( $null -ne $stream_writer ) { $stream_writer.Close() }

Code language: PHP (php)

以下のようなバッチファイルを作りPowershellスクリプトと同じ場所に置くと、Drag&Dropでテキストファイルを分割できます。

Split.bat:

@echo off

cd /d %~dp0

SET LINES=1048576
SET HEADER=1

for %%f in (%*) do (
    setlocal
    echo powershell -NoProfile -ExecutionPolicy Unrestricted .\SplitText.ps1 "-text_file_path \"%%f\" -lines %LINES% -header %HEADER% -output_directory \"%%~dpnf\""
    echo.
    CALL powershell -NoProfile -ExecutionPolicy Unrestricted .\SplitText.ps1 "-text_file_path \"%%f\" -lines %LINES% -header %HEADER% -output_directory \"%%~dpnf\""
    echo.
)

pause
Code language: PHP (php)

ifttt.comからWordPressへConnectに失敗する場合の対処法

ifttt.comからWordpressへConnectに失敗する場合、レンタルサーバーを利用している前提での解決方法はネット上に数多くあります。しかし、自前サーバーの場合の対処方法については解決方法が見つからず、対応に難儀しましたのでメモしておきます。

問題解決方法は下記のとおりです。

  • http://…形式でアクセスできるようにしておく

ifttt.comはhttpで接続しようとするため、httpでlogin画面が表示されない状態だと上記のようなエラーが表示されます。私の場合はhttpsのみでアクセスできるようにしていたため、エラーとなりました。

なお、http://…->https://…へフォワードしている場合(http://…形式で表示されない)も同様のエラーとなります。