タグ:WordPress

WPプラグイン「Category Order and Taxonomy Terms Order」をマルチサイトで使用する場合の注意事項

WPデフォルトのカテゴリーやカスタムタクソノミーの並び替えを行うことができるプラグイン「Category Order and Taxonomy Terms Order

マルチサイトでは使用するのに注意が必要です。

このプラグインを「サイトネットワークで有効化」で有効化してしまうと、

並び替えができないどころか、カテゴリー自体が表示されなくなります

理由までは調査していないですが、外観>メニューで保存すらできなくなってしまうので注意です。

対応方法は、「サイトネットワークで有効化」ではなく、サイトごとにプラグインを有効化すればOK

カテゴリーも表示されるようになりますし、メニューの動作も正常になりますし、並び替えもできるようになります。

総合管理者 | 2020年08月05日 | コメント(0) | トラックバック(0) | CMS関連

WordPressで入れておきたいプラグイン2

2020年8月5日更新

最近カスタムポストを使用するようになり、いろいろと変化したのでメモ。

  • Classic Editor
    Gutenbergは使いづらい!という場合は、こちら。
    元々のTinyMCEに戻せるプラグインです。
  • Custom Post Type UI
    カスタムポスト・カスタムタクソノミーを簡単に追加・設定できるプラグイン。
  • PS Taxonomy Expander
    カテゴリーだけでなく、カスタムタクソノミーの並び替えも行えるプラグイン。
    並び替えだけでなく、カスタムポストの一覧画面でカスタムタクソノミーを表示する設定ができたりと非常に便利!
  • Category Order and Taxonomy Terms Order
    カテゴリーだけでなく、カスタムタクソノミーの並び替えも行えるプラグイン。
    「PS Taxonomy Expander」が長らく更新されておらず、インストールするとクイック編集ができなくなるバグがあるので、こちらに乗り換え。
  • Advanced Custom Fields
    カスタムフィールドを簡単に追加・設定できるプラグイン。
    基本はフリーですがループなどが必要な場合は、有料版(ACF Pro)を使用する必要があります。
    有料版は、以前は買い切りだったのですが、現在はサブスクになってしまいました。
    1サイト/年で49$程度ですので、この費用が出せるか、フリー版で十分な場合は、こちらの導入をお勧めいたします。
    というもの、「Advanced Custom Fields」はプレビューに対応しているんです。下の「Custom Field Suite」もとても優れたブラグインなのですが、プレビューに対応していないのがネックですね。
  • Custom Field Suite
    カスタムフィールドを簡単に追加・設定できるプラグイン。
    フリーでループにも対応。
    プレビューには非対応。
  • TinyMCE Advanced
    WordpressのリッチテキストエディタをTinyMCEにできるプラグイン。
    正確にはWordpressはもともとTinyMCEですが、さらにカスタマイズできるものです。
  • Contact Form 7
    メールフォームを簡単に設置できるプラグイン。
    インストールと同時に、日本語化も行ってください。
    日本語化ファイルはこちら
  • Google XML Sitemaps
    Google サイトマップ用プラグイン。
    公開してから有効にしよう。
  • Limit Login Attempts
    ログインのチャレンジ?回数を設定できるプラグイン。
  • Yoast Duplicate Post
    記事の複製を簡単に行うことができるプラグイン。
  • EWWW Image Optimizer
    画像圧縮プラグイン。
    通常のレンタルサーバーなら大丈夫だと思いますが、AWS等の場合、いろいろとモジュールが足りない可能性がるので注意。
  • Custom Post Type Permalinks
    (必要なら)カスタムポストのパーマリンクを設定できるプラグイン。
  • Search Regex
    (必要なら)サイト内検索&置換を行えるプラグイン。
  • WP Fastest Cache
    キャッシュプラグイン。
    使いやすくて、ソースコードの圧縮もしてくれるなどなかなか便利。
  • DB Cache Reloaded Fix
    データベースのやり取りをキャッシュしてくれるプラグイン。
    管理画面まで軽くなるという便利なプラグインですが、動的なプラグインとは相性が悪かったりするので注意が必要です。
  • spam-byebye
    スパム対策用プラグイン。
    全然更新されていないで、引き続き使用するか要検討。

nandani | 2020年08月05日 | コメント(0) | トラックバック(0) | CMS関連

スラッグ名の重複対策 改

そもそもの原因についてはこちら

【WordPress】スラッグ名が重複すると、公開中の投稿ページが404になる

上記の対策方法を、こちらの記事「スラッグ名の重複対策」で書かせてもらいましたが、よくよく考えてみたら、こんなに複雑に考える必要はありませんでした。

つまり、下書きだろうが、スラッグ名を確定させてしまえばよい!(というか、なぜそうなってないのか)

プログラム修正版はこちらです。

function change_post_name($post_id){
	if(!wp_is_post_revision($post_id)){
		$get_post = get_post($post_id);
		if(!empty($get_post->post_name)){
			remove_action('save_post', 'change_post_name', 13, 2 );
			if($get_post->post_status == "draft" || $get_post->post_status == "pending"){
				$post_name = wp_unique_post_slug($get_post->post_name, $post_id, "publish", $get_post->post_type, $get_post->post_parent);
				wp_update_post( array( 'ID' => $post_id, 'post_name' => $post_name) );
			}
			add_action('save_post', 'change_post_name', 13, 2 );
		}
	}
}
add_action('save_post', 'change_post_name', 13, 2 );

7行目のwp_unique_post_slugは、wp_insert_post関数内で使用されてる、ユニークなスラッグ名を付けてくれる関数です。

この関数の第3引数が、下書きの場合は、ユニークにしてくれません(第1引数のスラッグ名をそのまま返します)

ということであれば、第3引数だけ「publish」にして、ユニークなスラッグ名を取得し、保存し直せばよい!

ということで、作ってみたのですが、とりあえず大丈夫っぽい。

※このプログラムについて責任はとれませんので、自己責任でお願いします。

 

参考サイト

wp_unique_post_slug – WordPress私的マニュアル

総合管理者 | 2018年04月14日 | コメント(0) | トラックバック(1) | CMS関連

タイトル・内容のフック場所【WordPress】

タイトル・内容のフック場所は、フロントエンド、管理画面で異なるので注意が必要です。

フロントエンドの場合


//タイトルにフックをかける(the_titleをフック)
add_filter('the_title', hoge_the_title, 1);

//内容にフックをかける(the_contentをフック)
add_filter('the_content', hoge_the_content, 1);

バックエンドの場合


//投稿一覧のタイトル表示にフックをかける(the_postをフックし、内部で処理)
add_filter('the_post', hoge_the_post, 100);
function hoge_the_post($post){
//$post->post_titleを編集する 例:$post->post_title = htmlspecialchars($post->post_title);
return $post;
}

//編集画面のタイトル入力フィールドにフックをかける(title_edit_pre'をフック)
add_filter('title_edit_pre', hoge_the_title, 1);

//編集画面の内容フィールドにフックをかける(the_editor_contentをフック)
add_filter('the_editor_content', hoge_the_content, 1);

 

単純に、the_titleやthe_contentにフックするだけでは、管理画面の方で反映してくれないので注意。

特に投稿一覧では、表示だけならthe_titleのフックで行けますが、クイック編集の方にも反映させる場合は、the_postにフックし、$post->post_titleに処理を加える必要があります。

総合管理者 | 2018年01月08日 | コメント(0) | トラックバック(0) | CMS関連

固定ページにも抜粋をつける

固定ページでも、子ページを一覧で表示するなどの使い方をする場合があります。

その際に任意に設定できる抜粋がないと非常に困る(WPデフォルトでは無い)

固定ページでも抜粋を付ける場合は、使用しているテーマのfunction.phpにこれを追記します

add_post_type_support( 'page', 'excerpt' );

これで固定ページの編集画面にも抜粋が表示されるようになります

 

総合管理者 | 2017年12月14日 | コメント(0) | トラックバック(0) | CMS関連

wp_insert_attachmentだけではサムネイルが作られない

フォームから送られてきたファイルをメディアに登録されるようにするプログラムを作っていたのですが、実際にメディアには登録されるけど一覧でサムネイルが表示されない・・・

で、Codexをよく見たら、wp_insert_attachmentのあとに下記2つの関数も実行しなくてはならないとのこと

wp_generate_attachment_metadata
wp_update_attachment_metadata

さらにこの関数を実行するには、

require_once( ABSPATH . 'wp-admin/includes/image.php' );

の必要があります。

つまりこんな感じ。


require_once( ABSPATH . 'wp-admin/includes/image.php' );

$attachment = array(
'guid' => "(ファイルのURL)",
'post_mime_type' => "(ファイルのタイプ)",
'post_title' => "(ファイルのタイトル)",
'post_content' => '',
'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, "(ファイル名)", 0);
$attach_data = wp_generate_attachment_metadata( $attach_id, "(ファイルのパス)");
wp_update_attachment_metadata( $attach_id, $attach_data );

これで、メディアに登録される際にサムネイルも生成されるようになりました。

総合管理者 | 2017年12月13日 | コメント(0) | トラックバック(0) | CMS関連

予約公開ができない場合【WordPress】

WordPressで予約公開ができない場合、原因は色々とあります。

このことは色んなサイトで紹介されています。

でも、たまに公開に失敗するなど原因がよくわからない不具合も起こります。

WordPressの予約投稿は、
一定のアクセスがないと実行されないという仕様になっています。

アクセスがないブログは予約投稿ができないといっても過言ではありません。

WordPressの予約投稿に失敗する原因と見るべき重要ポイントのまとめ! | 自作PCテクニカルセンター

という話まであり、正直Wordpressの予約公開はあまり信用できません。

 

ということで、解決方法として、こんな感じのプログラムをheader.phpの先頭に入れてみました。

if(is_home() || is_front_page()){
	//予約の投稿のみ取得(MAX20件)
	$get_posts = get_posts(array(
		"posts_per_page" => 20,
		"post_type" => "any",
		"post_status" => "future"
	));

	if($get_posts){
		foreach($get_posts as $get_post){
			//現在が予約日時を過ぎている場合
			if($get_post->post_date < current_time("Y-m-d H:i:s")){ 
				//公開処理 
				$save_post = array(
					"ID" => $get_post->ID,
					"post_status" => "publish"
				);
				wp_update_post($save_post);
			}
		}
	}
}

※トップページアクセスの場合のみ反応するようにしています。

post_statusがfutureになっている記事だけ取得し、予約日時が過ぎているものだけ、publishに更新するという簡単なプログラム

ちゃんと動いているし、負荷もそれほどかからないし問題なさそう。(※動作に責任は持ちません)

 

 

総合管理者 | 2017年06月05日 | コメント(0) | トラックバック(0) | CMS関連

WordPressのマルチサイトで参加サイトが表示されない

マルチサイト化されているWordpressのサーバーを移転したところ、参加サイトが表示されなくなってしまいました。

↓この部分

もちろんログインしたアカウントはすべてのサイトに所属しています。

プラグインのせいかと思って全部切ってみたのですが、治らず。

移転時にバージョンアップしたからかとも思いましたが、他のサイトで使っている同じバージョンのWordpressでは、こんな問題は起きたことがありません。

移転中だったのでベーシック認証をかけていたのですが、まさかこれじゃないだろうと思いながらも試しに解除してみたら、表示されるようになりました!

原因はベーシック認証!

こんなことあるのか・・・

ちなみに、一度表示されるようになったら、以降は再びベーシック認証をかけてもちゃんと表示されます。

総合管理者 | 2017年03月08日 | コメント(0) | トラックバック(0) | CMS関連

WordPressのバージョン4.7と4.7.1はヤバイ

ちょっと古い情報ですが、Wordpressのバージョン4.7と4.7.1はかなりヤバイ脆弱性があるそうです。

WordPress の脆弱性対策について:IPA 独立行政法人 情報処理推進機構

WordPress 4.7, 4.7.1 はAPIに致命的なバグがあって認証無しで誰でも記事を改ざんできちゃうっぽい! - かもメモ

上記のサイトに方法が記載されておりますが、簡単に改ざんできてしまうとのこと。

簡単過ぎる!怖い!

4.7から4.7.1へのアップデートは、PHPMailerの件ですぐにアップデートされることは予想しておりましたが、またすぐに4.7.2へのアップデートでしたので、何事?と思っておりましたが、これはかなりやばい脆弱性ですね。

すぐにアップデートするのは考えものですね・・・

ちなみに、Search Consoleでもこのような警告が出てしまう始末

貴サイトが WordPress の古いバージョンである WordPress 4.7.0 or 4.7.1 を実行していることが判明しました。古いバージョンやパッチを適用していないソフトウェアは、ハッキングやマルウェアの攻撃を受けやすくなり、貴サイトの訪問者に被害が及ぶことがあります。そのため、サイト上のソフトウェアをできるだけ早く更新することをおすすめします。

おすすめどころではない、必須事項でしょ。

自分のブログも一瞬だけ4.7.1にしておりましたが、すぐさま4.7.2にアップデートしました。

総合管理者 | 2017年02月14日 | コメント(0) | トラックバック(0) | CMS関連

投稿一覧の各投稿のメニューをカスタマイズする方法

フック!フック!フック!

フックは便利ですね!

ということで、テーマで投稿一覧の各投稿のメニューをカスタマイズする方法のメモです。

下図のように、メニューに「サンプル」を追加する場合

WS002447

テーマのfunctions.phpに以下を追記します。


function custom_post_row_actions($actions, $post) {
//$actions['(キー)'] = '<a href="(リンク先)" title="">(ラベル)</a>';
$actions['sample'] = '<a href="/sample.php" title="">サンプル</a>';
return $actions;
}

add_filter('post_row_actions', 'custom_post_row_actions',10,2);

 

いらないものを消す場合は、unsetします。(以下クイック編集を削除する)


function custom_post_row_actions($actions, $post) {
unset($actions['inline hide-if-no-js']);    //クイック編集
return $actions;
}

add_filter('post_row_actions', 'custom_post_row_actions',10,2);

以下デフォルトのメニューです。

$actions['edit'] 編集
$actions['inline hide-if-no-js'] クイック編集
$actions['trash'] ゴミ箱
$actions['view'] 表示

 

参考サイト

投稿一覧に独自リンクを追加する:WordPress私的マニュアル

総合管理者 | 2016年03月25日 | コメント(0) | トラックバック(0) | CMS関連

Copyright(c) 2010 - 2020 ダリの雑記