オリジナルCocoonスキンで運用中。詳細はこちらから

Jetpackのパブリタイズメッセージのカスタマイズのこと

技術
この記事は約7分で読めます。

自分用メモ。
急にWordpressの下書き保存や公開・更新時に「更新できません」表示が出るようになった原因だったので、スニペット修正したお話。

事の起こり

WordPressが5.2にアップデートされたあたりから、急に先の通り「更新できません」の表示が出るようになって悩んでました。

ただ、一般的な「更新できません」トラブルと違って、警告メッセージだけで実際は保存も更新もできてると言うこと。
ただ保存中のまま、公開(更新)ボタンがグレーアウトするのでちょっと手間がかかるのが難点と言うくらいだったので無視してたんですけど、やっぱり気になるのであれこれと試したところ、CodeSnippetプラグインを止めたところ改善。
と言うことでスニペットで怪しいのがJetpackのパブリタイズメッセージをカスタマイズ(と言ってもTwitterしか有効にしてない上に、カテゴリーのスラッグをタグとして追加してるだけ)だったので、そこを止めて「更新できません」のトラブルは解消。
と言うことで、パブリタイズメッセージのカスタマイズ方法を改めて調べて見ました。

スニペット改修……の前に

恥を覚悟の上で改修前のスニペット(トラブルになるので使わないでください)を備忘録的に(ただこれも数年前、CodeSnippetプラグイン導入時にどこかで拾ってきたスニペットなのですが)

function change_publicize_save_meta( $submit_post, $post_id, $service_name, $connection ){

    /*カテゴリの配列を取得*/
    $categories = get_the_category($post_id);
    /*先頭のカテゴリのスラッグを取得*/
    $category   = $categories[0]->slug;

    /*記事タイトルを取得*/
    $title      = get_the_title($post_id);

    /*パブリサイズ共有が有効な場合*/
    if ( !$publicize_custom_message ) {
        /*カスタムメッセージを編集*/
        $publicize_custom_message = sprintf(
        "Blog new Post:%s\n#LeafOfHeartwood #%s",$title ,$category);
        /*カスタムメッセージを適用*/
        update_post_meta( $post_id, '_wpas_mess', $publicize_custom_message );
    }
}
add_action( 'publicize_save_meta', 'change_publicize_save_meta', 10, 4 );

コメントごとコードをコピペしてたので特に説明も必要ないと思います(笑)

今度こそスニペット改修

と言う事で、こちらの記事を参考に(と言うかほぼコピぺ)でスニペットを新規に作成。

function change_jetpack_publicize_content( $post_id, $post ) {

    $POST_MESS = '_wpas_mess';

/*先頭カテゴリのスラッグを取得*/
    $categories = get_the_category($post_id);
    $category   = $categories[0]->slug;

/*投稿,下書き,スケジュール待ちのみ*/
    if ( !in_array( $post->post_status, array( 'publish', 'future' ) ) ) {
        return;
    }

/*カスタムメッセージのPOSTがあったら無視*/
   if ( !empty( $_POST['wpas_title'] ) ) {
        return;
    }

/*カスタムメッセージがある場合は無視*/
    if( get_post_meta( $post_id, $POST_MESS, TRUE ) ) {
        return;
    }

/*共有する文言の成形*/
    $publicize_custom_message = sprintf( 'Blog new Post:%s #Leaf_of_Heartwood #%s', $post->post_title, $category );
    
/*カスタムメッセージとして登録*/
    update_post_meta( $post_id, $POST_MESS, $publicize_custom_message );
    
/*postmetaが削除されないように$_POSTにも代入*/
    $_POST['wpas_title'] = $publicize_custom_message;
}
/*JetPackのパブリサイズ共有のsave_postに対する処理の優先度は「20」*/
add_action( 'save_post', 'change_jetpack_publicize_content', 19, 2 );


まぁ詳しいことは参考記事に譲るとしても、処理ルーチンが変わったようで。
多分、最近までは前のスニペットでも動いてたあたりからして、最近のJetpackのバージョンアップで完全に前のスニペットで使っってたフックが使えなくなったんじゃないかなぁと言う気がします。

参考サイトのコードとの違いは、ショートURLの追加を削除(前述の通りTwitterしかパブリタイズしてないのですが、ショートURLとは別にフルURL追加されているので不要と判断してのことです)
あとは、改修前と同じになるように、先頭カテゴリのスラッグをタグとしてメッセージに追加させるようにしているだけです。
まぁ数行For文かWhile文追加すれば、複数カテゴリのスラッグも追加できるとは思いますが文字数足りなくなりそうなのと自分が1つしかカテゴリーを選ばないので、最初に来るカテゴリーのみとしてます。

とりあえず、これで「更新できません」のメッセージが消えてWordpressそのものの動作は安定したので様子見です。

おまけ

このブログの「n年前の記事です」の警告表示も、実はCodeSnippetで登録してるスニペットです。
と言うか、昔はプラグインもあったらしいけど今はなくなってるので、ググって最終的にQiitaで見つけてきたプラグインソースをスニペットで使ってます。
一応ソースは下のもの(元ソースからHTMLタグを<span>から<div>に、インナーCSSだったのをクラス指定に変更してます)

function show_old_alert($content) {
  if(!is_single($post)) return $content;
  $diff = strtotime(date("Ymd")) - strtotime(get_the_date("Ymd"));
  $diff = $diff / 60 / 60 / 24;
  if($diff > 365){
    $diff = floor($diff / 365);
    return "<div class='old_alert'>この記事は".$diff."年以上前の記事です。<br>情報が古い場合や、リンクが切れている場合がありますのでご注意下さい。</div>".$content;
  }else{
    return $content;
  }
}
add_action( 'the_content', 'show_old_alert' );

で、クラス指定に切り替えたのは頭に警告マーク入れたかった(::boforeで指定)からですが、上下中央揃えにしたくてflex-boxで対処

.old_alert {
	display:flex;
	border:1px solid #f00;
	border-radius:10px;
	padding:0 10px;
	align-items: center;
}

.old_alert::before {
	display:block;
	width:44px;
	padding-right:10px;
	font-family:"FontAwesome";
	content:"\f071";
	font-size:40px;
	color:#fcc800;
}

これでちゃんと表示できてるからいいやで終わってますが、多分もう少しスマートに書けるんじゃないかなぁとは思ってます。もしそうならアドバイスくださいw
まぁ参考になればと言う事で締めておきます。

コメント

タイトルとURLをコピーしました