Intagrate Liteを知ってみる

2021年03月23日

こんにちは。羽柴玲です。
久々の投稿になります。最近は、サイトのメンテナンス程度で、新たな投稿をしていなかったのですが、「Intagrate Lite」関連の記事がわりと読まれていることが気になりました。

なので、少し技術的な投稿をしようかなと思います。

Intagrate Liteって何?

簡単に言えば、Instagramの投稿をWordPressへ自動で投稿するためのプラグインです。
Intagrate Liteって名前で分かるように、これは機能制限のかかっている無償版のプラグインです。
なので、有償版にアップグレードすることも可能です。
有償版は、幾つかの価格がありましたが、個人利用だとこんな感じでした。

$55/年(2021/03/22時点で、5977.57円)
 ・1サイト
 ・すべての機能
 ・年間更新
 ・年間サポート
 ・14日間の返金保証

Intagrateのプラグインサイト

1年間6千円弱なので、リスクを考えれば、有償版を利用してしまった方が簡単で高機能なものが利用できると思います。
複数の画像を投稿したい。とか、マルチ画像とか動画とかも連携したい。とかであれば、有償版が簡単手間いらずでいいです。
あと、複数のInstagramのアカウントを利用したいって場合は、有償版一択です。年間6千円程お支払いください笑

Intagrate Liteはフリーソフトウェア

以前に以下の2つの記事でご紹介していますけども、いろいろなリスクを抱え込めばプラグインに手を入れることで、機能を拡張することができます。

何故かと言うと、Intagrate Liteはフリーソフトウェアで、再配布を許可されているからです。
ライセンスが「GNU General Public License(GPLライセンス)」なんです。
どんなライセンスかっていうのは、ウィキペディアでも確認してください笑

GPLライセンスとは

まぁ、そんなわけで動かなかったり、バグが含まれていても自己責任の範疇であれば手を加えることができるよーってことです。
ただ、プラグインがアップデートされれば、再度対応が必要ですし、利用しているAPIの使用が変われば動作が変わったりする可能性があります。
有償版はまぁ、そのあたりのリスクをお金でつぶす感じですね。無償なので、自分でつぶさないといけない感じです。

Intagrate Liteを見てみよう

と言うわけで、Intagrat Liteを紐解いてみましょう!(私も全てを紐解けているわけじゃないけど笑)

Intagrate Liteの設定

WordPressの管理画面からアカウントの設定等ができます。
以下のリンクから開くことができます。

プラグイン⇒インストール済みプラグイン⇒Intagrate Liteの下にある「settings」リンク

表示すると、左上にInstagrate Lite と表示され、最新のInstagramの投稿イメージが表示されます。
その下には、Settengsとして各種設定が並んでいます。

Last Instagram Image

Last Image:

連携しない最後の投稿を選択します。ここで、選択したInstagramの投稿の次の投稿から連携するようになります。

WordPress Post

WordPressへ投稿する際のイメージのサイズ等を設定します。

Image Size:

イメージの表示サイズを設定します。デフォルトは「500」です。
表示サイズを調整したい場合に変更っします。

Image CSS Class:

CSS関連の設定です。CSS Classと言われてわからないのあれば、変更しないことをお勧めします。
こちらも、イメージの表示サイズを調整したい場合に変更します。

Wrap Image in Link to Image

チェックすると、イメージがリンクになり元画像を表示できるようになります。
Instagramの投稿イメージをスクエアで投稿しているのであれば、チェックなしでも問題ないと思います。

Select Image Saving:

WordPressへ投稿する際のイメージの保存に関する設定です。
以下の2種類から選択が可能。

  • Link to Instagram Image
    WordPressへイメージは保存せず、Instagramのイメージを参照する設定です。
    WordPressが動作しているサーバの容量を抑えることができます。
    ただし、Instagram側で投稿を削除するとイメージが見れなくなります。
  • Save Image To Madia Library
    WordPressへイメージを保存する設定です。
    WordPressが動作しているサーバの容量を圧迫しますが、Instagram側で投稿を削除してもイメージを表示することができます。
Featured Image Config:

確か、アイキャッチ画像と投稿内のイメージに関する設定だったかと思います。
以下の3種類から選択が可能。

  • No Featured Image
    アイキャッチ画像なしの投稿。Instagramで投稿したイメージは、WordPressの投稿記事内に利用する。
  • Featured and Post Image
    アイキャッチ画像ありの投稿。Instagramで投稿したイメージを、アイキャッチ画像とWordPressの投稿記事内に利用する。
  • Featured Only
    アイキャッチ画像ありの投稿。Instagramで投稿したイメージは、アイキャッチ画像に利用する。(記事内には利用しない)
Post Category:

WordPressの投稿記事のカテゴリを設定します。リストからサイト内のカテゴリーを選択する。

Post Author:

投稿記事の投稿者を選択します。WordPressへの投稿者が複数人いる場合は、1人のみ選択が可能です。

Post Format:

無償版では「Standard」のみ選択可能。有償版になれば選択肢が増えるのだと思います。

Post Date:

WordPressへの投稿日の設定です。
以下の2種類から選択が可能。

  • Date at Posting
    WordPressへ連携された日時を投稿日として利用します。
  • Instagram Image Created Date
    Instagramから連携されたイメージの作成日を投稿日として利用します。
Post Status:

WordPressへの投稿記事の公開状況を設定します。
以下の2種類から選択が可能。

  • Publish
    即時公開の記事として投稿します。
  • Draft
    下書きとして記事を投稿します。
Custom Post Type:

WordPressの投稿記事の種類を設定します。
以下の2種類から選択が可能。

  • 投稿
    投稿として記事を投稿します。
  • 固定ページ
    固定ページとして記事を投稿します。
Default Title Text:

WordPressの投稿記事のタイトルを指定します。
Instagramの投稿でキャプションを書いていない場合や後に出てくる「Custom Title Text:」を指定していない場合に利用されます。
指定がない場合は、Instagram投稿のキャプションがタイトルとして利用されます。
なので、よほどの事がなければ何らか指定しておくことをお勧めします。

Custom Title Text:

WordPressの投稿記事のタイトルを指定します。
「Default Title Text:」同様に、固定の文字列のみを指定できますが、「%%title%%」というものを利用できます。
これは何かと言うと「%%title%%」の箇所に、Instagram投稿のキャプションを埋め込むことができます。
それによって、「Instagram投稿のキャプション + 指定した文字列」といった感じのタイトルをつけることができます。
例えば、Instagramへ「今日の献立」というキャプションで投稿し、「Custom Title Text:」に「%%title%% for Instagram」と指定していた場合、WordPressの投稿記事のタイトルは「今日の献立 for Instagram」となります。

Custom Body Text:

WordPressの投稿の本文を指定します。
指定がない場合は、Instagram投稿のキャプションの後に画像が設定されて投稿されます。
ここでは「%%title%%」と「%%image%%」が利用できます。「%%image%%」の箇所にInstagram投稿の画像が挿入されます。
私の場合は、以下の感じに指定しています。

<h2>インスタからのリポート</h2>
%%image%% 
%%title%%

<h3>インスタへのリンク</h3>
<a href="https://www.instagram.com/_kitten622/" target="_blank" rel="noopener">by Instagram@れい</a>

Advanced Settings

Check this to bypass the is_home() check when the plugin auto posts.

これは、私はよくわからない設定です(´・ω・)
チェックを外したままにしておくのが無難かと思います。

Plugin Link

Show plugin link

これにチェックを入れると、WordPressの投稿記事の下部に「Posted by Instagrate to WordPress」というIntagrateのプラグインサイトへのリンクが挿入されます。

Debug Mode

Enable Debug Mode

これは、開発者関連の設定です。チェックを入れるとデバッグモードが有効になり、ログファイルを出力するようになります。
サーバの容量圧迫につながるので、基本的にはチェックを外しておいてください。
プラグインの編集中等は、チェックを入れておけばログファイルが出力され、処理の途中経過を追うことができるようになります。

インストール場所

Intagrate Liteはプラグインです。なので、WordPressのプラグインディレクトリ内に存在しています。
厳密には

<WordPressのインストールディレクトリ>/wp-content/plugins/instagrate-to-wordpress

が、Intagrate Liteのプラグインです。
レンタルサーバの設定とかでは、「plugins/instagrate-to-wordpress」になるかもしれません。

さて、ここで大事なことが1つ。プラグインに手を加える前には、WordPress自体をバックアップするか、上記のIntagrate Liteのプラグイン自体を必ずバックアップしましょう。
問題があった場合に、まるっと復元できますので、安心です!

Intagrate Liteのメイン処理

メインの処理は「instagrate-to-wordpress」ディレクトリの配下にある「instagrate-to-wordpress.php」にあります。
ファイル名からわかるように、言語はPHPです。対応しているPHPバージョンは「5.5以上」だそうです。
このブログは、ちょこっとバージョン古いです。最新にできるよう日々邁進中ではありますが、なかなかできません。
あ、脱線しましたね。「instagrate-to-wordpress.php」について、話していきます!

instagrate-to-wordpress.php

この中身なんですが…結構いろいろな事をしています。
プラグインの設定画面から変更した内容に関するものもありますので、注意してください。
PHPに詳しい方なら、何をしているかとかわかると思います。簡単な、コメントを記載してくださっていますので、親切なソースコードかと思います笑
私の場合は、なるべくわかりやすい場所を変更するので、「strip_title」というメソッド「blog_post」というメソッドあたりに手を加えます。
それぞれ何をしてるかっていうと、タイトルの編集やブログ投稿本文を編集している箇所ですね。
ただ、ここでいうタイトルは、Instagramの投稿本文キャプション部分の事です。
イメージに関する処理なんかもあるんですが、面倒なのであまり手を加えないです。
個人的に、失敗することが多いので…(´・ω・)

strip_titleメソッド

とりあえず、現物を見てみましょう。こちらです。

public static function strip_title( $title ) {

	$clean = '';
	$clean = filter_var( $title, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW );
	$clean = emoji_html_stripped( $clean );
	$clean = trim( $clean );

	return $clean;
}
filter_var( $title, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW );

簡単に言うと、特殊文字を除去する処理。「’」「”」「&」等を除去する感じです。

emoji_html_stripped( $clean );

キャリア依存の絵文字等をPC等で共通に表示できるものに変換する処理。
依存の絵文字も似たようなもので表示するための処理です。

trim( $clean );

余分な前後の余分なホワイトスペース(スペース、タブ、改行等)を除去する処理。
改行を残したい場合は「trim( $clean, “ \n\t\v\0” )」とすればよい。
ただ、タイトルへ設定する際に、もうひと手間必要になります。
あと、動作検証はしていないので、他の処理で悪さをする可能性はあります

編集処理を追加するならば

ハッシュタグの除去は、trimの前あたりで行えばちょうどいいです。因みに、ハッシュタグの除去処理については、上の方で参照している処理を参考にしてください笑
他に投稿内容に変更を入れたい場合は、ここに追加しておけば、Instagramの投稿内容に対して編集を行うことができます。

blog_postメソッド

こちらについては、現物を見てみましょうというには、ちょっと長いので変更を入れやすい箇所を抜粋してみました。
デバッグ関連の「$debug」を編集している処理は省略しています。

public static function blog_post( $post_title, $post_image, $image_id, $post_date, $post_date_gmt ) {
	$orig_title = $post_title;                      //Instagram投稿のキャプション(strip_title実行済)
	$imagesize    = get_option( 'itw_imagesize' );
	$imageclass   = get_option( 'itw_imageclass' );
	$postcats     = get_option( 'itw_postcats' );
	$postauthor   = get_option( 'itw_postauthor' );
	$postformat   = get_option( 'itw_postformat' );
	$customtitle  = get_option( 'itw_customtitle' ); //Custom Title Text:で指定した値
	$customtext   = get_option( 'itw_customtext' );  //Custom Body Text:で指定した値
	$pluginlink   = get_option( 'itw_pluginlink' );
	$imagelink    = get_option( 'itw_imagelink' );
	$imagesave    = get_option( 'itw_imagesave' );
	$imagefeat    = get_option( 'itw_imagefeat' );
	$poststatus   = get_option( 'itw_poststatus' );
	$posttype     = get_option( 'itw_posttype' );
	$defaulttitle = get_option( 'itw_defaulttitle' ); //Default Title Text:で指定した値
	//Image class
	if ( $imageclass != '' ) {
		$imageclass = 'class="' . $imageclass . '" ';
	}
	//Image size
	if ( $imagesize != '' ) {
		$imagesize = 'width="' . $imagesize . '" height="' . $imagesize . '" ';
	}
	//Custom Post Title
	if ( $customtitle != '' ) {
		$pos = strpos( strtolower( $customtitle ), '%%title%%' );
		if ( $pos === false ) {
			//no %%title%% found so put instagram title after custom title
			$post_title = $customtitle;
		} else {
			//%%title%% found so replace it with instagram title
			$post_title = str_replace( "%%title%%", $post_title, $customtitle );
		}
	} else {
		if ( $post_title == '' || $post_title == null ) {
			$post_title = $defaulttitle;
		}
	}
	// Create post object
	$my_post = array(
		'post_title'    => $post_title,
		'post_content'  => '',
		'post_author'   => $postauthor,
		'post_category' => array( $postcats ),
		'post_status'   => 'draft', //$poststatus,
		'post_type'     => $posttype,
		'post_date'     => $post_date, //The time post was made.
		'post_date_gmt' => $post_date_gmt //[ Y-m-d H:i:s ] //The time post was made, in GMT.
	);
	// Insert the post into the database
	$new_post = wp_insert_post( $my_post );
	//image settings
	if ( $imagesave == 'link' ) {
		//link to instagram image
		$image = '<img src="' . $post_image . '" ' . $imageclass . ' alt="' . $post_title . '" ' . $imagesize . ' />';
	} else {
		//put image from instagram into wordpress media library and link to it.
		//load into media library
		$attach = self::attach_image( $post_image, $new_post );
		if ( $attach[0] != 0 ) {
			$attach_id = $attach[0];
			//get new shot image url from media attachment
			$post_image = wp_get_attachment_url( $attach_id );
			$image = '<img src="' . $post_image . '" ' . $imageclass . ' alt="' . $post_title . '" ' . $imagesize . ' />';
			//featured image settings
			if ( $imagefeat == 'featonly' ) {
				//featured only - only set as featured
				$image = '';
			}
		} else {
			$image = '<img src="' . $post_image . '" ' . $imageclass . ' alt="' . $post_title . '" ' . $imagesize . ' />';
		}
	}
	//image link
	if ( $imagelink && $image != '' ) {
		//add link to instagram shot
		$image = '<a href="' . $post_image . '" title="' . $post_title . '" >' . $image . '</a>';
	}
	if ( $customtext != '' ) {
		$customtext = stripslashes( htmlspecialchars_decode( $customtext ) );
		//check if %%image%% has been used 
		$pos = strpos( strtolower( $customtext ), '%%image%%' );
		if ( $pos === false ) {
			//no %%image%% found so put instagram image after custom text
			$post_body = $customtext . '<br/>' . $image;
		} else {
			//%%image%% found so replace it with instagram title
			$post_body = str_replace( "%%image%%", '<br/>' . $image . '<br/>', $customtext );
		}
		//check if %%title%% has been used
		$pos = strpos( strtolower( $customtext ), '%%title%%' );
		if ( $pos === false ) {
			//no %%title%% found so put instagram title after custom title
			$post_body = $post_body;
		} else {
			//%%title%% found so replace it with instagram title
			$post_body = str_replace( "%%title%%", $orig_title, $post_body );
		}
	} else {
		//no custom text just plain old image
		$post_body = $image;
	}
	//Plugin link credit
	if ( $pluginlink == true ) {
		$post_body = $post_body . ' <br/><small>Posted by <a href="http://wordpress.org/extend/plugins/instagrate-to-wordpress/">Intagrate Lite</a></small>';
	}
	//apply custom meta to make sure the image won't get duplicated 
	add_post_meta( $new_post, 'instagrate_id', $image_id );
	//apply format if not standard
	if ( $postformat != 'Standard' ) {
		set_post_format( $new_post, $postformat );
	}
	//apply featured image if needed
	if ( $imagefeat != 'nofeat' && $imagesave != 'link' ) {
		add_post_meta( $new_post, '_thumbnail_id', $attach_id );
	}
	// Update post with content
	$update_post                 = array();
	$update_post['ID']           = $new_post;
	$update_post['post_status']  = $poststatus;
	$update_post['post_content'] = $post_body;
	// Update the post into the database
	wp_update_post( $update_post );
	return $debug;
}

長いです。見るの大変です・・・
ざっくり、何処で何をしているかですが、手を加えやすそうな箇所は以下でしょうか。

25~39行目:投稿記事のタイトルを編集
80~103行目:投稿記事の本文を編集

このあたりを変更すれば、タイトルへはInstagram投稿の一部テキストを利用したり、本文の構成を変更したりできると思います。
そのために、知っておいた方がよさそうな処理を簡単にご説明していきます。

strpos( strtolower( $customtitle ), '%%title%%’ )

strtolowerで「$customtitle」の内容を一律小文字に変換したテキストに、「%%title%%」が含まれているかを検索しています。含まれていれば「true」を返却し、含まれていれば「false」を返却します。

str_replace( “%%title%%", $post_title, $customtitle )

「$customtitle」のテキストに含まれる「%%title%%」を「$post_title」の内容で置換します。
複数「%%title%%」が存在する場合は、全て置換します。
特にないもしていなければ、「$post_title」にはInstagram投稿のキャプションの内容です。
33行目あたりを変更すれば、投稿記事のタイトルに対して手を加えれます。
98行目だと投稿記事の本文です。

あとは、92行目から99行目の様な処理を増やせば「%%title%%」「%%image%%」以外のキーワードも変更できたりします。例えば、「%%time%%」というのを「Custom Body Text:」に設定しておけば、現在時刻へ置換したりも出来るようになります。

そんなに難しいPHP関数も利用していませんし、PHPのお勉強がてらプラグインを拡張するのも面白いかもしれないですね笑

最後に

珍しくとても長い記事を書いてしまいました笑
まだまだ、書き足りないこともあるのですが、力尽きました・・・
新たに導入したプラグインが動かないとか、設定がうまく反映できないとかやっていて、思ったよりも時間がかかってしまったのです。
前回と前々回の「Intagrate Lite」の記事は、こうしたらOKだよ!というだけのものだったので、今回は「Intagrate Lite」のプラグイン自体をメインに記事にしてみました。
こうしてみると、物足りなさはあるものの無償でこれだけのものを提供してくださっていることには感謝しかないですね!笑

と言うわけで、本日はこの辺で……
I will see you again…..