Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

WordPress 特定のテンプレート使用時のみビジュアルエディタを無効にする

No Comment wordpress
if(is_admin()){
//特定のテンプレート選択時にビジュアルエディタを無効に
add_action("admin_head-post.php", function () {
	if (get_page_template_slug(get_the_ID()) === 'template-name.php') {
		add_filter('user_can_richedit', '__return_false');
	};
});

//おまけ、投稿画面に注釈表示
add_action("edit_form_top", function () {
	if (get_page_template_slug(get_the_ID()) === 'templates/template-name.php') {
		echo '<h3>※テンプレート選択中なのでビジュアルエディタは選択できません</h3>';
	};
});

}

trimでも消えない半角スペース(php,WordPress)

No Comment html,css,php,wordpress

メモ。

wp_get_archives()を投稿数あり('show_post_count' => true)で取得し、出力はせずstrip_tags(wp_get_archives($args))のようにタグを除去して正規表現で色々書き換える際、どうしても半角スペースが削除できなかった。
具体的には

2021年5月 (1)

とある文字列から (1)、半角スペース+数字入りカッコを除去したいが

preg_replace('/ ([^)]*)$/', '', $value);

としても半角スペースだけ消えない。
どうやらこの半角スペースは文字コードC2A0、つまりhtmlの半角スペース 「&nbsp;」でした。
wp_get_archives()はhtmlを出力するテンプレートタグですもんね。
なのでダイレクトに

preg_replace('/&nbsp;([^)]*)$/', '', $value);

とすることで解決。

WordPress REST APIから記事を取得して表示する(PHP)

No Comment html,css,php,wordpress,,

PHPで一度REST APIをサイト内に取り込み、静的ページのjsで取得することでクロスドメイン制限を回避。

log.php

$data = json_decode(file_get_contents('https://example.com/wp-json/wp/v2/posts?_embed'));

foreach ($data as $value) {
    $title = $value->title->rendered;
    $link =  $value->link;
    $year = substr($value->date, 0, 4);
    $month = substr($value->date, 5, 2);
    $day = substr($value->date, 8, 2);
    $date = $year . '/' . $month . '/' . $day;

    echo '<li><a href="' . $link . '" target="_blank">' . $date . ' ' . $title . '</a></li>';
}

javascript

	function HTML_Load(_html, replace) {

		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", _html, true);
		xmlhttp.onreadystatechange = function () {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				var data = xmlhttp.responseText;
				var elem = document.getElementById(replace);
				console.log(elem);
				elem.innerHTML = data;
				return data;
			}
		}
		xmlhttp.send(null);
	}
	HTML_Load('log.php', 'id-name'); //挿入したいid名

WordPressブログから静的サイトに記事を取得し、javascriptで表示する (REST API)

No Comment html,css,php,wordpress,,,

静的サイト(example.com)にWordpressブログ(blog.example.com)から投稿記事を取得する備忘録。

例) 他Wordpressブログから、2020年の投稿記事を10件取得して2020年1月1日以降の記事を表示。

※クロスドメイン制約により、ドメインをまたいで取得することは出来ない。
(その場合はJSONPを使うなりPHP使うなりFeedから取り込むなり)

var root = document.getElementById("id-name");//読み込み先サイトのID

function getRequest(props) {
	var xhr = new XMLHttpRequest();
	xhr.open("GET", encodeURI(props.uri));
	xhr.onload = function () {
		if (xhr.status !== 200) {
			console.log('Status error');
		} else {
			props.callback(JSON.parse(xhr.responseText));
		}
	};
	xhr.send();
}

function forEach(props, callback) {
	for (var i = 0, max = props.length; i < max; i++) {
		callback(props[i], i)
	}
}

getRequest({
	uri: "https://blog.example.com/wp-json/wp/v2/posts?page=1&per_page=3&after=2020-01-01T00:00:00",
	callback: function (posts) {
		forEach(posts, function (post) {
			var title = post.title.rendered;
			var link = post.link;
			var year = post.date.substr(0, 4);
			var month = post.date.substr(5, 2);
			var day = post.date.substr(8, 2);
			var newElement = document.createElement("li");
			newElement.innerHTML = '<a href="' + link + '" target="_blank"><span>' + Number(month) + '/' + Number(day) + '</span><span>' + title + '</span></a>';

			root.appendChild(newElement);
		})
	}
});

出典

WordPress : Permissionがあっているのに画像をアップロード出来ない件 heteml

1 Comment wordpress,,

レンタルサーバheteml内で、新しい高性能なサーバに無料で移設出来るという事なので移設したが、その後ブログに画像がアップロードできなくなった。

エラーメッセージは
「ディレクトリ upload/2018/05 を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?」

パーミッションは問題ない。
が、FTPでupload/2018/フォルダにこちらで05を作ってからアップロードしても、同じエラー。
つまりディレクトリの位置が違ってるんじゃないかと推定。

このブログはかなり前のWordpress ver.2.xくらいから使っていることもあり、パスの位置がDBに保存されていたようだ。

「アップロードするファイルの保存場所」に見事に前のサーバのパスが書かれていた。
これを削除して保存。

すると、「ファイルのアップロード」項目自体が消えた。
そういえば、Wordpress3.5からこの項目は非表示になったんだった。
Wordpressの新規インストールでは起きることはないけど、古いWPの移設案件などではまだありそうなのでメモ。

■おまけ

この消えた「ファイルアップロード」を使いたい場合は、オプションページで再設定可能。

サイトURL/wp-admin/options.php

で設定項目一覧が出るので「upload_path」で検索をかけた項目にパスを入れる。
そうすると通常の設定→メディアに上記画面と同じ形で表示される。