WordPress

提供:GNU social JP Wiki
2024年2月12日 (月) 22:06時点におけるGnusocialjp (トーク | 投稿記録)による版 (Linkage)

About

WordPressは世界の多くのウェブサイトで使用されているCMSだ。PHPで記述されている。

WordPressの外観や挙動はPHPのプログラムを書いてカスタマイズできる。また、プラグイン機構を持ち、世界中の開発者によるプラグインを導入することで簡単にウェブサイトを拡張できる。

Install

WordPress.comなどのホスティングサービスを使用することもできるが、レンタルサーバーやVPSに設置することが好ましい。

ActivityPub

WordPressはActivityPubを実装している。WordPressへの投稿時に分散SNSにも投稿される、分散SNSからWordPressの投稿にコメントできるなどの機能がある。

WordPressの公式ホスティングサービスであるWordPress.comもActivityPubに対応している。分散SNSの中でも巨大なサーバーと言え、無視できない存在だ。

Function

Comment

Ref:

このあたりの関数で定義されている。フィルターを挟むことで変更できる模様。

PV

WordPressでPV数を表示させる方法がいくつかある。

WP-PostViewsプラグインのほうが柔軟性がある? (WordPressで記事ランキングを設置するならWP-PostViewsが最適なのでは? | kanae-design-works「WP-PostViews」と「WordPress Popular Posts」の違い | クロジカ)。

WordPressの分析プラグインはDBにアクセ格納するから重くなるらしい

Jetpackの統計情報から閲覧数を取得表示することができる。これが一番手っ取り早い気がする。

<p>
<?php // 全体、月別、週別、日別のPV表示
  global $post;
  $views_all = 0;
  $views_monthly = 0;
  $views_weekly = 0;
  $views_daily = 0;
  //Jetpack利用時
  if (is_jetpack_stats_module_active()) {
    $jetpack_views = stats_get_csv( 'postviews', array('days' => -1, 'limit' => 1, 'post_id' => $post->ID ));
    if (isset($jetpack_views[0]['views'])) {
      $views_all = $jetpack_views[0]['views'];
    }
    $jetpack_views = stats_get_csv( 'postviews', array('days' => 30, 'limit' => 1, 'post_id' => $post->ID ));
    if (isset($jetpack_views[0]['views'])) {
      $views_monthly = $jetpack_views[0]['views'];
    }
    $jetpack_views = stats_get_csv( 'postviews', array('days' => 7, 'limit' => 1, 'post_id' => $post->ID ));
    if (isset($jetpack_views[0]['views'])) {
      $views_weekly = $jetpack_views[0]['views'];
    }
    $jetpack_views = stats_get_csv( 'postviews', array('days' => 1, 'limit' => 1, 'post_id' => $post->ID ));
    if (isset($jetpack_views[0]['views'])) {
      $views_daily = $jetpack_views[0]['views'];
    }
  }
  echo '<span class="daily">日:<span class="pv-count">', $views_daily, '</span></span>';
  echo '<span class="weekly">週:<span class="pv-count">', $views_weekly, '</span></span>';
  echo '<span class="monthly">月:<span class="pv-count">', $views_monthly, '</span></span>';
  echo '<span class="all">全体:<span class="pv-count">', $views_all, '</span></span>';
?>
</p>

上記コードをウィジェットに貼り付けたらうまくいった。

Language

WordPressで多言語対応サイトも構築できる。

情報源:

いろいろ方式があるが、サブディレクトリー形式が手軽な感じがする。

英語で情報発信できると、かなりの数のユーザーにアプローチできる。単に機械翻訳にするだけでも検討する価値はあるだろう。

広告ブロッカー対策

出典: 【WordPress編】広告ブロッカーからサイトコンテンツと収益を守る! | SEの良心

[CHP Ads Block Detector] というプラグインで実現できるらしい。

プラグイン: WordPressの広告ブロッカー対策CHP Ads Block Detector | GNU social JP Web」の通り、簡単にできた。

Widget内でのPHP実行

WordPressのウィジェットでPHPコードを実行する方法 – FOXWP

function widget_text_exec_php( $widget_text ) {
    if( strpos( $widget_text, '<' . '?' ) !== false ) {
        ob_start();
        eval( '?>' . $widget_text );
        $widget_text = ob_get_contents();
        ob_end_clean();
    }
    return $widget_text;
}
add_filter( 'widget_text', 'widget_text_exec_php', 99 );

上記コードをfunction.phpに配置すると、テキストウィジェット内でPHPコード<?php ?>を実行できる模様。

Linkage

WordPressの記事・投稿を他のSNSに自動投稿する方法がいくつかある。

  • Jetpack Social connection: Jetpackの機能の一つ。Mastodon/Facebook Page/Instagram Businessアカウントが対象。FacebookとInstagramは個人アカウントはそもそも自動投稿できない。
  • GNU social Auto post: GNU socialへの自動投稿。

基本的にJetpackを使うのが楽だと思う。

About

PMPro。有料会員サービスを実現するプラグイン。

ソースコード内のincludes配下の関数は自分でも使用可能。

Single

単体記事の販売には工夫が必要。

WooCommerceと連携したり、PMProの有料プラグインを使うとか。他にも方法を以前調査したの後日追記する。

理想としては、単品販売と、会員を両立したい。2個以上買うなら会員のほうがいいみたいな。

Style

Custom Message for Non-Members on Protected Content」でペイウォールの表示内容・スタイルを制御できる。

金額変更

定期購読で販売していて、登録後に金額を変更したいことがある。

これは基本的にできない。定期購読は決済サービス側で登録時の金額で固定されるため。

金額を変更したければ、一度キャンセルして、再度チェックアウト・購入してもらうしかない。

既存会員に対しては、更新ではなく、期限を設けて強制的に一度退会させるのがいい。

Restriction

membership short code

Ref: Hide bottom register form when it has membership code block.

Source: paid-memberships-pro/shortcodes/membership.php at dev · strangerstudios/paid-memberships-pro

PMProの基本的なコンテンツ制限の概念がある。

基本は投稿全体を非表示で、excerptで冒頭部分を一部表示これが基本。membershipショートコードはこの逆で、基本全表示で一部だけ非表示。

そもそも仕組みが違う。

だから、カテゴリーで管理していて、一部だけ非表示にしたかったら、末尾にmoreブロックを配置して、membeshipショートコードも使う必要がある。二重に使わないといけない。けっこう面倒くさい。

Custom Message for Non-Members on Protected Content」がメッセージの変更方法。ただ、制限のロジックを変更できるわけではない。別のフィルターだと思う。

ソースコードを参考に自分で実装するしかないだろう。

message

Custom Message for Non-Members on Protected Content」に基本的な表示内容やスタイルの設定方法がある。

<div class="pmpro_content_message">
//custom message here
</div>

表示部分は上記要素になるのでこのクラスでスタイルをあてる。

.pmpro_content_message {
	background: #F1F1F1;
	margin: 0 auto;
	max-width: 700px;
	padding: 15px;
}

他に以下のフィルターが該当するメッセージ表示。

  • add_filter( 'pmpro_non_member_text_filter', 'my_pmpro_non_member_text_filter', 5 );
  • add_filter( 'pmpro_not_logged_in_text_filter', 'my_pmpro_not_logged_in_text_filter', 5 );

例えば、会員限定の文字数表示などをしたければ、自前でやるしかない。基本は自分で上記フィルターで上書きするのがよい。

function my_pmpro_non_member_text_filter( $text ) {
	global $post, $post_membership_levels_names;
	$count = mb_strlen( $post->post_content, 'UTF-8' ) - mb_strlen( get_the_excerpt(), 'UTF-8' );
	$access = pmpro_has_membership_access( $post->ID, null, true );
	$text = "<p>残り{$count}文字。続きは" . implode( '/', $access[2] ) . '会員限定。</p><p>Free=0/Bronze=220/Silver=1100/Gold=2200円。</p>'
		. '<p><a href="https://web.gnusocial.jp/member/level/">会員登録</a>/'
		. '<a href="//web.gnusocial.jp/member/login/">ログイン</a> (<a href="//web.gnusocial.jp/about/member/">About Member</a>)。</p>';
	return $text;
}
add_filter( 'pmpro_non_member_text_filter', 'my_pmpro_non_member_text_filter', 5 );
add_filter( 'pmpro_not_logged_in_text_filter', 'my_pmpro_non_member_text_filter', 5 );

Style

ペイウォール (.pmpro_content_message) のスタイルは会員登録の誘発に重要。

有名サービスの例は上記。登録・購入ボタンを大きく押しやすくしている。a要素の他button要素でも実装されている。ここはいろいろ考えてもいいかもしれない。