SEMRUSHでHPを分析してみる

SEMRUSH(セムラッシュ)でこのホームページを分析してみる!

なんでまた急に?って思うかもしれませんが、アクセス数が集まれば分析したい!って思うようになります。

 

・自分のウェブサイトが健康なのか、

・来てほしい人に来ていただいているのか、

・どこのサイトからリンクが貼られているのか、それが良いのかイマイチなのか

・競合と比べて自分のウェブサイトどうなのか

・広告掲載したけどどうなのか

 

ってなことを調べるために使うツールです。

アナリティクスがあるから、そんなんいらないじゃん!って思うかもしれませんが、一部被るようにみえる機能があるかも知れませんがSEO分析や競合の状態を分析できるツールです。

 

1日何人きたからどーたらこーたら、アナリティクスでもWordPressのJETPACK使っても閲覧できますが、

・本日のキーワードのポジションがどんだけ上位、下降したとか、キーワードのトラフィックボリュームがどーのこうの。

↓こんな感じ

 

自分はあまり気にしていないキーワードが実は検索結果の上位にいてトラフィックがやたらあるとか知ることができる。

 

このサイトは「internal server error」でのトラフィックが多いという結果ですが、記事を書いている私自身は気にしていません💦

 

・バックリンク

画像はカットしてしまいましたが下部に一覧でてます。

 

・競合検索順位

自動的に競合を算出してキーワード数、オーガニック検索トラフィックの結果を表示してくれます。

気づかなかった競合も見つけられるかもしれません。

 

・Site Aduit

自分のサイトのエラーや警告を教えてくれます。あ、忘れてたとかあるかもしれませんので気なったものは修正してウェブサイトを健康に保つようにしてます。

 

ざっくりとですがこのような機能があります。

無料お試しがあるので、何よりお試しいただいたほうがわかりやすいかと。ちょっと日本語訳が間に合ってないところが多いのでそのあたりは徐々に改善されるかと思います。

 

SEMRUSH

https://www.semrush.com

 

 

日本向けのSEMRUSHサイト(株式会社オロが運営中)

https://semrush.jp

 

 

このウェブサイトは、競合分析関係ありませんが、集客したいウェブサイトのおいては

 

基本的には競合分析として利用しています。競合に勝つためにはどうするのかというところがポイントですね!

 

分析したからといって即時逆転できないところがこの世界で難しいところです。

 

ホームページのSEO分析のツールのSEMRUSHの使い方動画は下記のURLから。

https://www.youtube.com/channel/UCwYXowV1UJkzP_fPzzBdRsA/videos

 

Ultimate Memberのログインフォームでフックをかけたい

WordPressの「Ultimate Member」プラグインで会員サイト構築していて、ログインページ表示時に処理を行いたいことが発生!!

さて、どのように処理したらよいのか…よーく、考えたら、フォームを表示するときに難かしらのフックがあるのでは?って考えてみた。

 

function.phpに下記のコードを記述。$args[‘mode’]でどのフォームを表示するのか取得ができるとのこと。

add_action( 'um_before_form_is_loaded', 'my_pre_shortcode', 10, 1 );
function my_pre_shortcode( $args ) {
	if($args['mode'])
	{
		switch ( $args['mode'] ) {
			case 'login':
				//ここに処理を記述
				
				break;
		}		
	}

}

参考:https://docs.ultimatemember.com/article/1060-umbeforeformisloaded

 

これでログインフォーム表示時のフックができあがり。あとはやりたい処理を記述。

 

会員IDを初期値で入れたいと思ったら、あれ、入らない!

↓のように設定しているが初期値が入らない!!。ちなみに、プロフィール、新規登録はOK

 

ってことでプラグインのコアファイルを追っていった。

「ultimate-member/includes/core/class-fields.php」の「function field_value( $key, $default = false, $data = null ) {~略~}」で初期値を表示するとかごにょごにょ処理しているようだ。

 

その中で、下記の判定でフォームロード時の初期値をどうするのか判定している。これによると新規登録とプロフィールはOKとのこと。

			// Default Value for Registration Form and Profile Form editing
			if ( ! isset( $value ) && ( $this->set_mode == 'register' || $this->editing == true ) ) {

 

ちなみに

新規登録:$this->editing→FALSE

ログイン:$this->editing→FALSE

 

だった。コアファイルを変更して「$this->editing=true」としたら初期値がばっちり表示されたがこれは使えない・・・。

 

ちょっと腑に落ちないのだが、ログインフォームを表示したときにjavascriptで処理するかな。

 

 

Peter’s Collaboration E-mailsを使ってWordPress5の記事公開に承認フローを追加する

WordPressで記事公開の承認フローを構築したいのですが「Peter’s Collaboration E-mails」というプラグインをWordPress5で動作するのかテストしてみました。

 

■承認フローに利用するプラグイン

Peter’s Collaboration E-mails:承認公開ワークフロー機能
Peter’s Post Notes:承認依頼メール、公開完了メール機能
User Role Editor:寄稿者にメディアアップロード権限を付与

 

※寄稿者が承認待ちの投稿を行った際に、メールで通知される承認者を設定します。ということなので寄稿者は必ず承認フローを通ることになる。

 

■公開承認ワークフローを設定する

とくにいじらなくても初期値のままで利用することが可能。個別ルールも可能

 

■実際に記事を書いてみる

記事を作成してレビュー待ちとして送信

 

↓メールで下記の内容が送られてくる

 

とりあえず、WordPress5、PHP7でも動作するようです。

 

■WP User Frontendと組み合わせての承認フローは利用しても大丈夫なのか?

ユーザーには管理画面でなく、フロントサイトで投稿を行っていいただく、そして承認と流れを行いたいと思います。

それなのでWP User Frontendプラグインを使ってみます。

PostFromで適当な内容でさくっと作ります。

 

↓こんな感じでフォームを用意

 

↓特に問題なくできました。

 

 

■カスタム投稿+WP User Frontendでも利用することは可能?

「Custom Post Type UI」で簡単にカスタム投稿を作ります。(サンプル投稿という名称を追加)

WP User Frontendで適当にフォームを作り、post type をCustom Post Type UIで作成した投稿を指定します。

 

「設定」>「公開承認フロー」の設定を見てみると

「Custom Post Type UI」で追加した「サンプル投稿」があるので大丈夫( ゚Д゚)!

 

↓承認フローいけました。

 

■やっぱり、一部の投稿は承認不要で公開したい

WP User FrontendのPostStatusを「公開済み」としてみた

 

記事はそのまま公開された。

「WP User Frontend」>「Peter’s Collaboration E-mails」という優先順位で動作するようだ。

 

 

■公開した記事の編集を行ったどうなるのか?

WordPressの基本動作:承認後の公開中の記事の編集→スルーで公開

ちょいこれは。。っていう動作です。

 

寄稿者ですから編集できないですよ。

 

[wpuf_dashboard]のショートコードで投稿記事一覧が表示できます。

 

そう、「Edit」とあるが編集はできない。

「User Role Editor」で「edit_published_pages」「edit_published_posts」や「edit_published_(カスタム投稿タイプ)」を有効にします。

 

↓のように公開したら承認スルーパスで公開となります。

 

■公開後の記事を編集しても承認したい

「WP Post Branches」というプラグインが公開中の記事はそのままでbranchを作成して編集できる機能があるとのこと。

↓のようにしてもbranchを作るにすると公開されない。

 

ブランチを作ると下記のように一覧は表示される

 

ブランチを公開すると1本かになる

 

寄稿者の画面上でもブランチを作成するボタンがでるのだが、「更新」ボタンもある。

もちろん「更新」を押すとそのまま公開画面に反映される。更新ボタンがじゃまである。

 

■WP User Frontendの記事編集機能の設定があったじゃないか

「固定ページ」>「タイトル:記事編集」で本文に下記のショートコードを入れたページを作る

[wpuf_edit]

 

「User Frontend」>「Settings」>「Fronted Posting」の「Edit Page」を作成した固定ページに設定する。そうするとフロント画面で記事編集ができるようになる。

 

「WP User Frontend」で対象のフォームのステータスをレビュー待ちにする

※「Edit Settings」の「Set Post Status to」を「レビュー待ち」にする

 

 

記事を修正する

 

 

 

↓承認依頼のメールが届きました。

WP User FrontendでEditも設定すればよいのかと思います。ブランチ機能は利用したいけど。。。WP User Frontendとの組み合わせはエラーになるのでやめとこ。

 

あれ、カスタム投稿で投稿した一覧がないことに今更ながら気づいた

投稿一覧を表示するショートコードにpost_typeでカスタム投稿名を指定する必要があった。

[wpuf_dashboard post_type="post,samplepost"]

 

↓上はpost_type指定なし。下はあり。

 

こんなところでどーにか?

 

いや。「Peter’s Collaboration E-mails」の設定でカスタム投稿を設定しようとしたら「**** エラー: この投稿タイプには指定した分類が存在しません ****」と表示されるようだ。

 

「WP User Frontend」でメール送信先指定があるのでそれでよいのでは?

 

結論として「WP User Frontend」で新規or更新された場合は「レビュー待ち」でOK

ポイントとショッピングを連動したWordPressのサイトを考える

いろいろなショッピングがあると思うのですがWordPressでもEC機能があることはご存知かと思います。

今回は、例えばログインしたら「ポイント付与」「記事を公開」したらポイント付与。そのポイントでECサイトの商品を購入できたらということでちょっと模索してみました。

 

EC系は「WooCommerce」

ポイント系は「myCRED」

 

でいけそう。

 

一部のポイントを利用する場合は、プレミアムプラグインの購入が必要です。

 

まあ、なんとなくね。

WordPressのREST APIを使ってみる

「WP REST API」を利用して別サイトから情報取得するなどやってみたいと思います。

 

テストしながらなのでざっくりとすすみます。

 

WordPress側にREST APIを用意する

まず「WP REST API」プラグインはWordPress4.7以上からインストール不要で標準となっている

ということで何もしなくても下記のように記事取得が可能

 

↓投稿の取得(JSON形式で取得)

自サイトURL/wp-json/wp/v2/posts

 

ドキュメントは下記のURL

http://ja.wp-api.org/reference/

 

「WP REST API」プラグインを入れれば、有効化になるのですが、初期は動かない?

 

このプラグインを入れたら、「/wp-json/wp/v2/users」にアクセスするとユーザー一覧が表示されるのできちんと処理しないと危険ですね。

そんなときは「Disable REST API」プラグインでざっくりと止めます。

 

認証はどうなんですか?

↓元

http://ja.wp-api.org/guide/authentication/

 

認証方法は次の3つの方式があるとのこと。

・クッキー認証

・OAuth 認証

・アプリケーションパスワードまたはベーシック認証

 

アプリケーションパスワードまたはベーシック認証の下準備をする

 

1.プラグイン「Application Passwords」をインストールし、有効化する

プラグイン情報ページ:https://ja.wordpress.org/plugins/application-passwords/

 

2.ユーザーにAPI用ユーザーを登録して、「Application Passwords」蘭に任意の名前を入力して「Add New」をクリックします。

 

 

パスワードが発行されるので保存します。(1回だけの表示なのでしっかりとメモします)

 

別ページで認証するためのHTMLを用意する

別に何でもよいのですが簡単にテストしてみたいと思います。

・おさらい

ユーザー名:WordPressのユーザー名

パスワード:Application Passwords で発行されたパスワード

認証するためのURL:あなたのウェブサイトのドメイン/wp-json/wp/v2/posts

 

認証は「Authorization」ヘッダーにbase64でエンコードした「ユーザー名:パスワード:」を認証するためのURLに送信をする

 

 

・結果

JSONで返ってくる

 

実際に適当ですけど、下記のようなコードを準備してHTMLを表示して「WordPressへ投稿する」をクリックすると投稿される。結果はコンソール上に表示しているのでそちらを参照

<a href="#" id="btnLogin">WordPressへ投稿する</a>

 

・スクリプト

    <script>
        var url ='ドメイン名/wp-json/wp/v2/posts';
        var username='ユーザー名';
        var password='パスワード';
        $(function(){
            $(document).on('click', '#btnLogin', function (){
                login();
           });
        });
        function login()
        {
            var authorizationToken = Base64.encode(username + ':' + password);
            $.ajax({
              type: "POST",
              beforeSend: function(request) {
                request.setRequestHeader("Authorization", 'Basic ' + authorizationToken);
              },
              url: url,
              cache: false,
              data:  {
                  'title':'WP REST API サンプル',
                  'content':'投稿するサンプル文章です。',
                  'status' : 'publish',
              },
              success: function(msg) {
                  console.log(msg)
              }
            });  
        }
        var Base64 = {
            encode: function(str) {
                return btoa(unescape(encodeURIComponent(str)));
            },
            decode: function(str) {
                return decodeURIComponent(escape(atob(str)));
            }
        };

        
        
    </script>

 

続きはまたこんど。

 

あとでやり直したらエラーになった。時間がなかったのでPHPでやった方が簡単だった。

アカウント作成、編集はリファレンス通りで問題なかった。

リファレンス:http://v2.wp-api.org/reference/users/

 

アカウント削除の時だけ「force」「reassign」は必須というのがわかりにくかったよ。

forceはtrue、reassignは削除対象アカウントの記事をどれに付け替えるかとかそういうことなので別のアカウントのIDを指定すればOK.

 

wp-jsonが404で返ってくる

パーマリンクが設定されていないだけ。WordPressのパーマリンクを設定しましょう。

 

ブログ上の表示名を設定したい

nameの項目を設定しましょう。

WordPressのcontactform7を改良してポップアップの確認ウィンドウを表示して送信する

WordPressのコンタクトフォーム7は定番で利用されている問い合わせフォームかと思いますが、確認画面を表示したいという日本式?のフォームがどうしても必要になるときがあるかと思います。

その時は「Contact Form 7 add confirm」を利用して確認画面を簡単に表示させることができます。

ですが

 

今回は、それではダメ!確認画面をポップアップで!!

 

というケースです。

 

ひさびさにどーするか悩んでみました。コンセプトはざっくり簡単に、忘れても後で見ればなんとなく思い出せるように?って感じです。

では、早速料理を始めたいと思います。

 

■必要な材料(プラグイン)

・Contact Form 7:コンタクトフォーム

・Contact Form 7 add confirm:コンタクトフォームの確認画面表示用プラグイン

・Popup Maker:ポップアップを作るプラグイン

・Simple Custom CSS and JS:スクリプトを作るプラグイン

 

上記のプラグインをWordPressにインストールしておきます。

 

■下準備1:コンタクトフォームを用意する

初期の簡単なものでOKです。「確認」のボタンを追加します。

ざざっといい加減なのでこんなところです。

<label> お名前 (必須)
    [text* your-name] </label>

<label> メールアドレス (必須)
    [email your-email] </label>

<label> 題名
    [text your-subject] </label>

<label> メッセージ本文
    [textarea your-message] </label>

[submit "送信"]

[confirm "確認"]

 

あとは、このコンタクトフォームを表示できるようにしておいてください。

■下準備2:ポップアップを作ろう!

「Popup Maker」>「Add Popup」で新規に作ります。

中身としては

<table>
<tr>
<th>名前</th>
<td id="popup_name"></td>
</tr>
<tr>
<th>メールアドレス</th>
<td id="popup_email"></td>
</tr>
</table>

<input type="submit" value="送信" id="pop-submit">
<input type="submit" value="キャンセル" id="pop-cancel">

※外観などは後ほど変更してくださいね。

https://docs.wppopupmaker.com/article/42-popup-maker-jquery-api

 

作成したら一覧に戻って「popmake-xxx」の「xxx」の数字を控えてください。

 

■メイン作業として

「Custom CSS & JS」>「Add Custom JS」をクリックして新規に作ります。

下記のコードを貼り付けます。「popupnum_id」に下準備で入手したIDを入れてください

popupnum_id=ここにPOPUPMAKERのIDを記述;
popupcancelflg=true;
document.addEventListener('wpcf7submit', function (event) {
  switch (event.detail.status) {
    case 'wpcf7c_confirmed':
      jQuery('#popmake-'+popupnum_id+' #popup_name').html(jQuery('[name="your-name"]').val());
      jQuery('#popmake-'+popupnum_id+' #popup_email').html(jQuery('[name="your-email"]').val());
	  PUM.open(popupnum_id);
      break;
  }
}, false);


jQuery(document).on('pumBeforeClose', '.pum', function () {
	popupcancel();
});

jQuery(document).on('click', '#pop-cancel', function () {
	popupcancel();
    PUM.close(popupnum_id);
});

function popupcancel()
{
  if(popupcancelflg)
  {
  		wpcf7c_to_step1(jQuery("form"), true);
  }
}

jQuery(document).on('click', '#pop-submit', function () {
    popupcancelflg =false;
    PUM.close(popupnum_id);
	jQuery('.wpcf7-submit').click();
});

 

■ということで完成です。

フォームに内容を入力して、「確認」ボタンを押すとポップアップで確認が表示され、そのまま「送信」も可能!!

 

悩み始めて数時間で何とか料理できました。出来上がってみると大したことないってところ???

WordPressの投稿のエディタ機能でSELECTを使う場合

WordPressの投稿で記事を作成するときにセレクト文を記述したいと思うときがあるかと思います。(何の時ってなにかプルダウンで選択させてたいとき)

 

記述の注意としては

 

テキストモードで編集

セレクトテスト:<select>
<option></option>
</select>

セレクトテスト2:<select></select>

 

↓問題なく下記のように表示された。

 

コードをそのままでエディタをビジュアルモード →テキストモードタブの切り替えを行っていると。。。

セレクトテスト:<select>
<option></option>
</select>

セレクトテスト2:

 

そうすると「select」のコードが消えた。

<option>がある場合は残るみたいだが、optionが無い場合は消えてしまう。

 

標準のエディタでこのようになるので仕様っぽいですね。WordPressは4.9系

 

javascript等でoptionを自動で記述したい場合は気を付けいたい点ですね。

 

 

WordPressで5000人のアカウントをCSVで作成してうだうだしてみる

WordPressで5000アカウントを作成して運用できるのかテストしてみます。

本当は外部の認証でいろいろとやりたいところですが、面倒そうなのでWordPress基本機能を流用してみたいと思います。

会員情報(アカウント)は、基本内容+拡張したいので「WP-Members」プラグインを入れます。

 

※「WP-Members」のインストール類は省略

 

アカウント情報のインポートに「Import users from CSV with meta」プラグインを使ってみたいと思います。

URL:https://ja.wordpress.org/plugins/import-users-from-csv-with-meta/

 

「Import users from CSV with meta」プラグインのインストール手順

「プラグイン」>「新規追加」で「Import users from CSV with meta」を検索してインストール→有効化を行う。

 

「Import users from CSV with meta」プラグインの使い方

1.「ツール」>「Import users from CSV with meta」をクリックする

2.インポートするCSVを用意する

 

↓のようなCSVを作れということ見たい

Username,Email,Password,Address,City,State,Zip code,Country,user_url
john,john@mymail.com,mypassword,Rd. Victoria,Atlanta,Georgia,1201,USA,
javier,javier@micorreo.com,pass,Av. Cervantes,Córdoba,Córdoba,14004,España,http://www.linuxhispano.net
elissa,eliss@mymail.com,elis2013,Verona,Ferrara,Ferrara,89891,Italia,
piere,mon@mon.fr,passwordfrance,Nation,París,Île de la Cité,28280,France,
peter,pet@me.com,passpass,National,Washington,Columbia,2001,USA,
luis,luisperez@correo.es,contrasenna,Sol,Madrid,Madrid,28005,Spain,
eleonora,eleonora@me.it,barele,Spagna,Roma,Roma,10101,Italia,

 

それなので最低限の内容にしてみた。(文字コードはUTF-8で保存)

Username,Email,Password
hoge,hoge@it-trouble.help,mypassword

 

「Import」タブの「ファイルを選択」で先ほどのCSVを選択し「Start importing」ボタンを押す。

 

WP-Membersを利用している場合は

「Activate user when they are being imported?」を「Activate users when they are being imported」に選択する。

 

↓簡単に入った。

 

あとは応用で・・・。

 

「WP-Members」で拡張したフィールドも対応できるか試してみる

 

今回は、所属という項目を「セレクト」で準備した。

WP-Membersで追加したフィールド。ラベル名:所属。メタキー:belongs

<---- 選択してください ---->|,
所属部署1|1,
所属部署2|2,
所属部署3|3

 

というこで早速さっきのCSVにフィールドを追加。所属はあえて「所属部署3」になるようにしてみた。(ちゃんと選択されるかの意味合いで)

Username,Email,Password,belongs
hoge,hoge@it-trouble.help,mypassword,3

 

↓取り込んでみたところちゃんと選択されていた。

 

 

5000アカウントをインポートしてみる。

まあ、Excelでざざーっとコピーしてアカウントを増やしてみた。

 

早速インポート処理….5000になると処理がかかりますな・・無事にインポートされた。

 

次に5000アカウント更新→5000アカウント新規でインポート処理。

→これも無事に終了。あれ日本語が落ちてる。。。

↓のようにしたら、「ほげ」が抜けた。あ、そうそう、username→ユーザ名ね。そーすよね。。

ほげ10000,hoge10000@it-trouble.help,mypassword,3

 

ニックネームや表示名を変更したい場合は

Username,Email,Password,belongs,nickname,display_name
hoge1,hoge1@it-trouble.help,mypassword,3,ほげにっく,ほげ表示

 

nicknameでニックネーム

display_nameで表示名

 

に対応しています。

 

アカウントを一括削除したい

「Import users from CSV with meta」プラグインではできないようです。

 

じゃあ、アカウントをロックしたい

→インポート時に「Activate user when they are being imported?」を「Do not activate users」すれば?結果は、有効アカウントは無効化にならなかった。

(無効化状態→有効化は可能)

アカウント無効?フィールドを追加してCSVでインポートしたが反映されなかった。。。ソースを見ないとダメかな

 

→特段アカウントをロックするようなプラグインがなかった。

ということで「http://jisakupc-technical.info/web-survice/wordpress/4839/」の「User Account Lock out」プラグインを使ってみるか?

 

新たに試してみた。

■アカウント権限を「無し」にする

Username,Email,Password,belongs,nickname,display_name,role
hoge1,hoge1@it-trouble.help,mypassword,3,ほげにっく,ほげ表示,''

上記をインポートして権限を無しにする

 

その後「Bulk Delete」プラグインでアカウントを削除する

Bulk Delete

 

・「Dulk WP」>「Dulk Delete Users」をクリックする

なぜか権限が「NONE」だとうまくいきません。

それなので削除権限グループを作って、削除するようにすると良いと思います。

 

 

うーん、今日はここまでさ。

 

 

【WordPress】ログインしないで投稿できるプラグイン「WP User Frontend」を試してみる

ログインしないで投稿できるプラグイン「WP User Frontend」を試してみます。

 

今回、最終目標としては

・タイトル、本文、画像をカテゴリ毎にフォームを設定する

・課金は行わない→無理かな。必要なものは買わないと。

それでは、初めて期待と思います。

 

■インストール

・「プラグイン」>「新規追加」で「WP User Frontend」を検索します。

・表示名は「WP User Frontend – Membership, Profile, Registration & Post Submission Plugin for WordPress」となりますのでこちらを「今すぐインストール」でインストールします。

 

・プラグインを「有効化」します。

・ウィザードが表示されますので「Let’s Go!」をクリックします。

 

・今回「有料課金」は行わないので「Enable Payments」のチェックを外しました。

 

・設定画面に移動しました。

 

■投稿フォームの作り方

・「User Frontend」>「Post Forms」をクリックします。

・サンプルがあるので開いてみます

 

・下記の画面が基本画面となるようです。

 

これを見ると「タイトル」「画像」「本文」が用意されています。

 

それなのでそのままサンプルを動かしてみます。「preview」ボタンをクリックします。

 

先ほどの内容のフォーム表示されます。

※Insert Photoは本文に写真を入れるためのボタンでした。

そのまま記事になりました。

 

管理画面から見てみると普通の投稿と同じにようになっています。「WPUF Form」でSample Formが指定されていました。

 

■フォームの設定

PostFromsの「Settings」タブを開くと多々設定があります。

post type post or page

投稿か固定ページ

Post Status 投稿後のステータス
Default Post Category 投稿後にどのカテゴリに属するか
Rdirect To 投稿後にどこにジャンプするか
Comment Status コメント枠
Submit Post Button text 投稿ボタン名
Post Draft 投稿の下書き許可?
Form  Template

 

■下記の条件でフォームを作ってみる1

※ゲストからの投稿で指定したカテゴリだけにPOSTして、レビュー待ちで止めたい。投稿ページはWordPressの基本機能のパスワードで保護したい。(固定ページにフォームのショートコードを入れてパスワード設定する)

 

・Post Settings

Post type :post(投稿)

PostStatus:レビュー待ち

Default Post Category:サブカテゴリ(サブカテゴリ1-2)

Redirect To: To a Page(投稿フォームページ)

 

・Submission Restriction

Guest Post: Enable Guest Post

※投稿時にユーザー名、Eメールは不要とした

 

投稿フォームはタイトル、本文の他に「Featured Image」を用意した

※本文に画像を入れるボタンは「Post Body」の「Advanced Options」の中の「Enable image upload in post area」にチェックを入れる

これで投稿したところ下記のようになった。

 

「Featured Image」は、アイキャッチに入るようだ

 

※メール通知は最初から有効となっております。

 

■メタスライダー(metaslider)と合わせ技を試してみる

metaslider Proだと投稿のカテゴリを指定して自動スライドができるのだが問題なく動作するのかチェックする

「Featured Image」の「Advanced Options」の「Max. file size」ファイルサイズは初期値は小さいので適度なファイルサイズにを変えておく。

metaslider でpost feedで指定したカテゴリでスライド表示は特に問題なかった。

 

 

■カスタムフィールドを組み合わせられるのか

「Advanced Custom Fields」と組み合わせて投稿できるのか。Advanced Custom Fieldsプラグインをインストールしてカスタムフィールドを準備しておきます。

カスタムフィールドを使う場合は、項目の「Meta Key」をカスタムフィールド名にしてあげばそのまま入る。

 

■同意を押したのちにフォームを表示するはできるのか?

うーむ、方法がなさそうなのでスクリプトでフォーム非表示→同意ボタン押したら表示って簡易的な感じではどうかと・・・

 

プラグイン:Custom CSS and JS

Custom CSS and JSでスクリプトを作成します。

フォームに対してhide(display noneで消してみました)

jQuery(function(){
	jQuery('.wpuf-form-add').hide();
});

 

・functoin.phpで「Custom CSS and JS」を読み込ませます。

/**
 * JavaScriptを追加
 */
function custom_scripts() {
	// スクリプト追加
	wp_enqueue_script( 'custom-script', 'Custom CSS and JSプラグインで作成したJSファイル名' );
}
add_action( 'wp_enqueue_scripts', 'custom_scripts' );

 

あとは、「同意する」ボタンを作成してクリックしたら、フォームを表示させれば、とりあえず完成です

ちらって見えてしまうのが嫌な場合は、フォームのショートコードをdisplay:noneで消してってことをすればよいかな

 

 

組み合わせることにより幅広がるプラグインですね。

 

フォームを呼び出されるときにフックする場合

「wpuf_add_post_form_top」でhookするとフォーム呼び出し時にキックされる。

フォーム毎に何か追加する場合はこれを使ってもよいかも。

function wpuf_add_custom_fields( $form_id, $form_settings ) {
	var_dump($form_id);
	exit();
		
}
add_action( 'wpuf_add_post_form_top', 'wpuf_add_custom_fields', 10, 2 );

※編集時は「wpuf_edit_post_form_top」でhookできる

 

例えば、フォームID毎に追加処理を足したい場合

えーと、こっそりと追加情報を一緒に保存するとかなどなど…

 

新規投稿or更新する前にというhookが見つからなかったのでafterのフックで、カスタムフィールドの「_wpuf_form_id」を取得することによりフォームIDを取得することが可能

function wpuf_update_ummeta( $post_id) {
	
	$form_id = get_post_meta( $post_id ,'_wpuf_form_id',true);
	var_dump($form_id);
	exit();
	
}
add_action('wpuf_add_post_after_insert', 'wpuf_update_ummeta' );
add_action('wpuf_edit_post_after_update', 'wpuf_update_ummeta' );

 

アイキャッチを取得したい場合はpost_metaの値で「_thumbnail_id」を参照すればIDが取得できる

 

Ultimate Memberのアクセス制限を利用したい

WP  USER FRONTENDプラグインでも記事ページのホームページへのアクセス制限をすることができますが、「Ultimate Member」の機能のホームページへのアクセス制限したい場合はちょっと一工夫が必要です。

 

管理者画面でアクセス制限はこちらから設定できますが、

フロントで投稿した場合にはアクセス制限のフックがかかりません。

 

それなので一つ上の「wpuf_add_post_after_insert」「wpuf_edit_post_after_update」に対してのフックを利用します。

UM Content Restrictionに対して

Restrict access to this content?:チェックあり

誰がこのコンテンツにアクセスできますか ?:Logged in Users

とし、権限にチェックを入れる場合は下記のようにする

 

_um_access_rolesでアクセスを許可する権限名で指定する

$um=array();
$um["_um_custom_access_settings"] ="1";
$um["_um_accessible"] ="2";
$um["_um_noaccess_action"]="0";
$um["_um_access_roles"] = array(
	"権限ロール名1" => true,
        "権限ロール名2" => true,
);
$um["_um_restrict_by_custom_message"]="0";
$um["_um_restrict_custom_message"]="";
$um["_um_access_redirect"]="0";
$um["_um_access_redirect_url"]="";
$um["_um_access_hide_from_queries"]="0";

update_post_meta( 記事ID , 'um_content_restriction', $um );

 

もっと詳しく知りたい方はDBのPOSTMETAの「meta_key:um_content_restriction」の内容がどのように変わるか調べてみてください。

 

プロファイルフォームをカスタマイズしたい

「Registration Forms」でフォームを作成すれば設定で選択できるようになる

 

メール通知をカスタマイズしたい

「WP User Frontend」内に通知機能があるがこれでは不足という場合は、「Post Status Notifier Lite」を使ってもよいかと。有料版だとメールテンプレートが利用できる。基本的には有料版を使う前提かと思う。

Post Status Notifier Lite

 

よいのだが、添付ファイルができないみたいだ。それで表示悩んだ。結果function.phpでwp_mail関数で自分で送信してしまうのも一つの手ではないかと気づいた。

 

<?php wp_mail( $to, $subject, $message, $headers, $attachments ); ?>

※添付ファイルのときはheadersでfromを指定したほうが正常に送信できそうだ。CCはheadersで指定する。

まあ、それなりに動作するが、カスタムフィールドを動的に表示・非常時しているときはコードが残ってしまう。

IFなどの分岐を使えるようだが、今のところうまく動作しない。英語のみなのか?

 

投稿画面での画像挿入サイズを変更したい

「フロント投稿」>「挿入する画像の最大サイズ」を自分好みのサイズにする

 

カスタムタクスソノミーは項目追加できるのに、メール送信機能では送れない

サポートに問い合わせてもまともに回答がこない。カスタムタクソノミーはフォームに設定できるが、メール本文には利用できない。

カスタムタクソノミーをメール通知に含めたければメール通知部分を自作せよ!!

 

記事本文のアップロードできる画像ファイルサイズは2MB

記事本文は2MBだそうです。

「wp-user-frontend/assets/js/frontend-form.min.js」で2MBに設定している。これを変更した場合は、プラグインがアップデートされるたんびに問題ありです。

もしこの方法ならば既存(プラグインの)ファイルを「wp_deregister_script」で解除してから再度読み込み直しかな。。。

 

function register_wp_user_frontend() {
    wp_deregister_script('wpuf-form');

    wp_register_script( 'wpuf-form', get_template_directory_uri() . '/assets/js/wp-user-frontend/frontend-form.min.js', array( 'jquery' ) );
}
add_action('wp_enqueue_scripts', 'register_wp_user_frontend');

 

 

ファイルサイズを大きくするならばphp.iniの下記の項目も調整が必要なことは言うまでもない

post_max_size POST データの最大サイズ
upload_max_filesize アップロードできるファイルの最大サイズ
memory_limit スクリプトが利用可能できるメモリの最大容量
max_input_time スクリプトが POST、GET などの入力をパースする最大時間(秒)
max_execution_time スクリプトの最大実行時間(秒)

 

投稿本文のTINYMCEの高さが短いので長くしたい

tinymceのfilterで調整が可能。管理画面では適用しないのでis_adminでWordPressの管理画面を除外

add_filter('tiny_mce_before_init',function($settings){
    if(!is_admin())
    {
        $settings['height'] = '500px';
    }
    return $settings;
});

 

カスタムフィールドやタームのドロップダウンテキストを非表示にした場合の編集

実は選択させたいがいろいろあって、非表示にしたい。でもシステム上は必要なとき…

投稿だけでなく編集機能もあるwp userfrontendですが、編集時にドロップダウンを非常にしていると値が消えて保存されました。

っていうことで下記のようにしたところ、ドロップダウンも保存された

選択項目を表示:はい

公開状態:非表示にする

 

カテゴリで親と子にチェックを入れたい場合は、複数選択できる選択方式が必要

カテゴリをドロップダウン式の選択にした場合、値は1個となります。それなので親と子のカテゴリにチェックを入れたい場合は向いていません。

子だけなら問題ないのですが、複数の値となるので、そうなると編集時に呼び出したときに親カテゴリだけが選択されてしまいます。

両方を維持したいのであれば複数チェックできるもので対応する必要があります。

 

 

下書き保存した記事の内容をプレビューしたい!

そうですね、post→ajaxの戻り値を見ているとできそうな気がします。

「wp-user-frontend/assets/js/frontend-form.min.js」で306行目付近の「draftPost: function (e) {」の中にそのあたりのことがかかれています。

下書きを保存したときに「post save」っていう部分が日本語にならないなって思ったらこのあたりにそのまま書かれてました。

戻り値に「url」がありそれがプレビューのURLとなっている。あとは、下書きのボタンの後あたりにプレビューを配置する

EDITの場合は、パーマリンクで取得したIDにプレビューフラグを付ければリンクの完成

 

カレンダーが英語のまま

日本語化したい!え?そんなことはできないってよ。

じゃあ、wp_headにdatepickerを追加で記述してしまおう。詳しくはこちらで

 

 

記事に画像を挿入するときに初期値を左寄せにしたい

WordPress管理画面では、「image_default_align」で「left」に値をセットすれば、記事に画像を挿入したときに何も考えずに左寄せになります。

フロント画面で投稿するwp userfront endでは、その値は無効みたいなのでちょっと困りました。

 

「frontend-form.js」で画像アップロード処理の部分を書き換えてみました。

imageUploader.bind('FileUploaded', function(up, file, response) {


~ 略 ~

                            // tinyMCE 4.x
                            var mce = tinyMCE.get( 'post_content_' + form_id );

                            if ( mce !== null ) {
                                var res_iamge = $(response.response).addClass("alignleft");

                                var html = $('<div>').append(res_iamge.clone(true)).html();

                                mce.insertContent(html);

 

とりあえず、画像をアップロードしたときにIMGタグが返ってくるのでそこで、「alignleft」クラスを追加してみましたww

結局、調べてみましたが、最終的にパワープレー修正で落ち着きました。

 

WPUP Formのカスタムフィールドキーが知りたい

「_wpuf_form_id」でいける。

 

ショートコードを使う

「Shortcode」の項目を追加すればよいのだが、なぜかラベルの設定が無い。そしてラベルは「Shortcode」と表示される。

wp_postsの中に格納されているデータを強制的に直してしまえ!って思っただがNGだった。

それなので、jQueryでフォームを読み込み完了時点でラベル名を強制的に上書きするようした。

⇒サポートに問い合わせてみたが、英語を日本語に訳すと..

デフォルトでは、フォームに特定の何かを表示するために使用できるショートコードを管理者が挿入するためのフィールドがあります。 ラベルは、ショートコードフィールドの該当する部分ではありません。 したがって、WPUFからそのラベルを提供することはできません。

え?設定できないってこと?

↓ショートコードの設定は下記のURLを参照

https://weformspro.com/docs/form-field-types/shortcode/#a_aid=weDevs&amp;a_bid=179e9c0a

 

あとで考えたんだけど「Action Hook」が指定できるのでhookでよかったのかも。

 

公開日設定ができない

できないようです。できないです。いやそれじゃ困るよ。うむ。保存時にフックだな。

動作を見てみると、下書き保存時に日付が更新されている。更新の場合は、日付は変更されない。それなので、公開⇒下書き⇒公開とした場合は、最後の下書きの日付が公開日となる。ややこしいな。

日付けは、編集ページを読み込み時に自動的に更新されているようだ。

公開したときだけ、調整するようにしたので「wpuf_add_post_after_insert」「wpuf_edit_post_after_update」のフックで対応

 

ファイルアップロードしていないのにアップロード表示になる(ver 3.3.1)

ややこしいですね。

動作としては、ACFでカスタムフィールドのファイルを作り、管理画面から記事を保存します。

その後、WP USER FRONTENDで編集しようとするとファイルをアップロードしていないのにファイルの表示がされてしまいます。

 

データを追っていくとPOSTMETAに項目がNULLでも追加される。

WP USER FRONTENDで指定された項目がPOSTMETAに存在するというだけでそうするとファイルがあるように表示される仕組みのようだ。これだとちと気持ち悪い。

調べてみたところ下記のファイルの1か所を修正すればOK

・includes/fields/class-field-file.phpの71行目あたり

 

                                foreach ($uploaded_items as $attach_id) {
                                        echo WPUF_Upload::attach_html($attach_id, $field_settings['name']);

 

まあ、attach_idがあるかどかの判定を足せばよい。

                                foreach ($uploaded_items as $attach_id) {
                                    if($attach_id) {
                                        echo WPUF_Upload::attach_html($attach_id, $field_settings['name']);
                                    }

 

アップデートしてくれるのを待つ。サポートに連絡し何度もやり取りしたけど結局かみ合わない。あー、英語力あればな…

 

画像、ファイルをアップロードすると登録できなくなったぉ

調べていくと「reCAPTCHA」を有効にしていたのだが、これが邪魔していた。

 

フロントで投稿後に日時指定で予約投稿にしようと思ったらエラーで処理登録できなかった件

以下のフック後に予約投稿になるようにステータスを変更して「wp_update_post」したら、エラーで終わった。試したものがちょっとバージョンが古いのかもしれない。

プラグインをバージョンアップすると多方面を修正しないといけないのでupdateの方式を変更してみた。

エラーファイル:wp-user-frontend-pro\admin\coupon.php

add_action('wpuf_add_post_after_insert', 'wpuf_new');
add_action('wpuf_edit_post_after_update', 'wpuf_up' );

 

エラーで失敗したバージョン:

問題箇所は「’edit_date’=>true」があるとwp user frontendプラグインのsave_postのフックにヒットして、エラーとなる。

フォーム作るときに日付の設定に「Set this as publish time input」とあったが、これにチェック入れても同様にエラー。

$publish_date = date( 'Y-m-d H:i:s', strtotime( '+ 7 days' ) );
$my = array(
      'ID' =>$post_id,
      'post_status'   => 'future',
      'post_date'     => $publish_date,
      'post_date_gmt' => get_gmt_from_date($publish_date),
      'edit_date'=>true,
);

$id = wp_update_post( $my );

「Advanced Schedule Posts」のプラグインのバージョンが古かったため発生したようです。

 

ということでクエリで処理してしまおう!

            $publish_date = date( 'Y-m-d H:i:s', strtotime( '+ 7 days' ) );
            global $wpdb;
            $result = $wpdb->update(
                    $wpdb->posts,
                    array(
                        'post_status'   => 'future',
                        'post_date'     => $publish_date,
                        'post_date_gmt' => get_gmt_from_date($publish_date),
                    ),
                    array( 'ID' => $post_id ),
                    array(
                        '%s',
                        '%s',
                        '%s',
                    ),
                    array( '%d' )
            );

 

まあ、あとwp-cronに登録が必要か・・・