私は私のテーマのfunction.phpで次のコードスニペットを使用して私が述べたソーシャルメディアのための個々の分け前の数を引いています:
$facebook_like_share_count = function ( $url ) {
$api = file_get_contents( 'http://graph.facebook.com/?id=' . $url );
$count = json_decode( $api );
return $count->shares;
};
$Twitter_Tweet_count = function ( $url ) {
$api = file_get_contents( 'https://cdn.api.Twitter.com/1/urls/count.json?url=' . $url );
$count = json_decode( $api );
return $count->count;
};
$pinterest_pins = function ( $url ) {
$api = file_get_contents( 'http://api.pinterest.com/v1/urls/count.json?callback%20&url=' . $url );
$body = preg_replace( '/^receiveCount\((.*)\)$/', '\\1', $api );
$count = json_decode( $body );
return $count->count;
};
$google_plusones = function ( $url ) {
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, "https://clients6.google.com/rpc" );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . $url . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]' );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Content-type: application/json' ) );
$curl_results = curl_exec( $curl );
curl_close( $curl );
$json = json_decode( $curl_results, true );
return intval( $json[0]['result']['metadata']['globalCounts']['count'] );
};
次のコードを使ってそれらを私のsingle.phpに呼び出します。
<?php $url = get_permalink( $post_id ); echo $facebook_like_share_count ("$url");?>
<?php $url = get_permalink( $post_id ); echo $Twitter_Tweet_count ("$url");?>
<?php $url = get_permalink( $post_id ); echo $pinterest_pins ("$url");?>
<?php $url = get_permalink( $post_id ); echo $google_plusones ("$url");?>
これはうまくいきます。
今、私はこれら4つのサービスのシェア数を追加し、シェア数を表示するコードスニペットを見つけようとしています - おそらく this here のようなものです。
編集: 重要な質問があります。
上のコードが私のブログを遅くしている可能性はありますか?
私はすでに私のホスティングサービスに連絡しました、そして、彼らはそれがプラグインかphpファイルのようなものでなければならないと私に言いました。私は最近プラグインを実際には更新していません。P3Profilierは、いつもの犯人が誰であるかを教えてくれます。しかし、私のsingle.phpでその関数を呼び出した直後に私のサーバーは時々超低速でロードします - スピードチェックサイトではタイムアウトになることさえあります。何か案は?
EDIT2: 多くのテストの後、ページを遅くするのは実際には(エコーされたときに)このコードのようです。 shrugs私はそれを使うのをやめなければならないと思いますか?
私はそれをうまく動かすことができませんでした。あなたが私をここで助けてくれることを願っています。どうもありがとうございます!
はい。 @ialocinは Transients についてメモしました。何らかの奇妙な理由で、私はまだこれに遭遇していません。以前は、カウントを次の方法で表示していました。
しかし、いや、もっと良いものがあります。私はずっと良い。過渡現象。過渡現象。一時的な...何時間も唱えます...瞑想して戻ったら、私があなたのためにカスタマイズした以下のコードを掘り下げてください:
// Check for transient. If none, then execute code
if ( false === ( $data = get_transient( 'trans_' . $post_id ) ) ) {
/* action */
$facebook_like_share_count = function ( $url ) {
$api = file_get_contents( 'http://graph.facebook.com/?id=' . $url );
$count = json_decode( $api );
return $count->shares;
};
$Twitter_Tweet_count = function ( $url ) {
$api = file_get_contents( 'https://cdn.api.Twitter.com/1/urls/count.json?url=' . $url );
$count = json_decode( $api );
return $count->count;
};
$pinterest_pins = function ( $url ) {
$api = file_get_contents( 'http://api.pinterest.com/v1/urls/count.json?callback%20&url=' . $url );
$body = preg_replace( '/^receiveCount\((.*)\)$/', '\\1', $api );
$count = json_decode( $body );
return $count->count;
};
$google_plusones = function ( $url ) {
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, "https://clients6.google.com/rpc" );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . $url . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]' );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Content-type: application/json' ) );
$curl_results = curl_exec( $curl );
curl_close( $curl );
$json = json_decode( $curl_results, true );
return intval( $json[0]['result']['metadata']['globalCounts']['count'] );
};
// store data in array
$data = array (
$facebook_like_share_count,
$Twitter_Tweet_count,
$pinterest_pins,
$google_plusones
);
// Put the results in a transient. Expire after 6 hours
set_transient( 'trans_' . $post_id, $data, 6 * HOUR_IN_SECONDS );
}
if (is_array($data)) {
$facebook_like_share_count = $data[0];
$Twitter_Tweet_count = $data[1];
$pinterest_pins = $data[2];
$google_plusones = $data[3];
}
最初に、$post_id
が既にこのコードを追加するように設定されていることを確認します。このコードはIDを使用して固有のハンドルをトランジェントに追加するためです。
キャッシュされたデータにカスタム名と時間枠を付けて一時的にデータベースに保存します。その後、期限が切れて削除されます。
したがって、6時間ごとに、キャッシュされたアレイを更新します。それはそれと同じくらい簡単です。明確化のためにコメントを参照してください。
コメントスレッドでの議論に従って、コードを調整しました。まず、functions.php
ファイル内に共有関数があることを確認し(現在の設定で既にこれを持っていると思います)、次にsingle.php
ファイルで、get
カウント値。
// get post id
$post_id = get_the_ID();
// get perm url to be used for share count functions
$url = get_permalink( $post_id );
// Check for transient. If none, then execute code
if ( false === ( $data = get_transient( 'trans_' . $post_id ) ) ) {
/* action */
$facebook_like_share_count ("$url");
$Twitter_Tweet_count ("$url");
$pinterest_pins ("$url");
$google_plusones ("$url");
// store data in array
$data = array (
$facebook_like_share_count,
$Twitter_Tweet_count,
$pinterest_pins,
$google_plusones
);
// Put the results in a transient. Expire after 6 hours
set_transient( 'trans_' . $post_id, $data, 6 * HOUR_IN_SECONDS );
}
if (is_array($data)) {
// these are your variables containing the share count
$facebook_like_share_count = $data[0];
$Twitter_Tweet_count = $data[1];
$pinterest_pins = $data[2];
$google_plusones = $data[3];
}
明確にするためにコード内に入れたコメントを読んでください。