質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1498閲覧

(ワードプレスサイト)画像リンクのクリック回数カウントとダウンロードを同時に行いたい

yuki275

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/05/22 08:25

編集2019/05/23 02:10

前提・実現したいこと

はじめまして。ワードプレスで制作したホームページ上で実現したい処理があるのですが、特にjqueryについては知識がなく、調べてもわからなかったため書き込ませていただきました。
知識不足で申し訳ありませんが、どうか皆様のお力添えをお願いしたく思います。

実現したい処理について。
投稿サイトにおいて、画像ファイルのURLリンクをクリックしたさいにその回数をカウントし、そのまま利用者のPCに画像ファイルがダウンロードされるようにする。
という処理が実行されるようにしたいと考えています。

具体的には、下に記載したLink Clicks Counterを適用した状態で、aタグに設定したdownload属性が適切に適応されるようになると私としてはベストです。

発生している問題・エラーメッセージ

複数のサイトでコードを検索した結果、リンクがクリックされた際にその回数をカスタムフィールドへカウントする、という処理はプラグインとして実現することができました。
しかしその場合、aタグに設定しているdownload属性が適応されず、画像を通常通り開くだけということになってしまいます。

該当のソースコード

PHP javascript jquey

1下記をプラグインとして導入 2<?php 3/* 4Plugin Name: Link Clicks Counter 5*/ 6 7if ( is_admin() ) add_action( 'wp_ajax_nopriv_link_click_counter', 'link_click_counter' ); 8add_action( 'wp_ajax_link_click_counter', 'link_click_counter' ); 9function link_click_counter() { 10 11 if ( isset( $_POST['nonce'] ) && isset( $_POST['post_id'] ) && wp_verify_nonce( $_POST['nonce'], 'link_click_counter_' . $_POST['post_id'] ) ) { 12 $count = get_post_meta( $_POST['post_id'], 'link_click_counter', true ); 13 update_post_meta( $_POST['post_id'], 'link_click_counter', ( $count === '' ? 1 : $count + 1 ) ); 14 } 15 exit(); 16} 17 18 19add_action( 'wp_head', 'link_click_head' ); 20function link_click_head() { 21 global $post; 22 23 if( isset( $post->ID ) ) { 24?> 25 <script type="text/javascript" > 26 jQuery(function ($) { 27 var ajax_options = { 28 action: 'link_click_counter', 29 nonce: '<?php echo wp_create_nonce( 'link_click_counter_' . $post->ID ); ?>', 30 ajaxurl: '<?php echo admin_url( 'admin-ajax.php' ); ?>', 31 post_id: '<?php echo $post->ID; ?>' 32 }; 33 34 $( '.countable_link' ).on( 'click', function() { 35 var self = $( this ); 36 //var url_add = $(this).attr('href'); 37 $.post( ajax_options.ajaxurl, ajax_options, function() { 38 window.location.href = self.attr( "href"); 39        //window.location.href = self.attr( {"href","download"}); 40 //window.open(url_add, '_self'); 41 }); 42 return false; 43 }); 44 }); 45 </script> 46<?php 47 } 48} 49?> 50 51本体部分 52<a download class="countable_link" href="<?php echo $hoge;?>"><img src="<?php echo $hoge;?>"></a> 53と、 54<a download class="countable_link" href="<?php echo $hoge;?>"><?php echo $hoge2;?></a>

試したこと

window.location.href = self.attr( "href");の部分を、 window.location.href = self.attr( {"href","download"}); window.open(url, '_self'); などに変更してみたのですが、無理でした(上記コードのコメントアウト部分が私の試した箇所です)

補足情報(FW/ツールのバージョンなど)

現在は上記プラグインからリンクに関する処理らしき箇所を削り、こちらのサイトのカスタムフィールド関係の部分を削って(こちらは回数カウントの部分がうまく行かなかったため)、2つを組み合わせて無理やりダウンロードされるようにしています。

参考にしたサイト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/05/22 08:31

「特にjavaやjquery」と書かれていますが、JAVAをどこに使用されているのでしょうか。また、「発生している問題」の部分はコードでないので、コードブロックで囲む必要はありません。
m.ts10806

2019/05/22 08:33

>javaやjquery そこで「Java」となると別言語ですので話がおかしくなります。 「JavaScript」ときちんと記載してもらえればと。 見たところWordPressでしょうか。PHPの知識技術よりもWordPress本体の知識技術が求められる場面のほうが多い印象ですので「WordPress」をタグに追加しておいてください。 また、現在どこまでできていて何ができていませんか? 「うまくいかない」「無理だった」「ダメだった」だと何が起きているか伝わりませんので具体的に記載願います。
yuki275

2019/05/22 08:57

ご指摘にありましたタグの修正を行いました。 プログラムにあまり詳しくないため、javaといえばJavaScriptと思い込んでおりました。申し訳ありません。 >また、現在どこまでできていて何ができていませんか? 記載しているLink Clicks Counterを実装すると、カスタムフィールドの更新(クリック回数のカウント)はできるが、aタグに記載したdownload属性が適応されず、画像がそのまま表示される。download属性が無効化されている?という状態です。
tabuu

2019/05/23 00:58

<a href="hoge.jpg" class="countable_link" download><img src="hoge.jpg"></a> こういうタグを出力しようとしているが、download属性が外れてしまうことでしょうか? そうであれば、どのようにコーディングしているか記述されたほうが回答が付きやすいと思います。
guest

回答2

0

プラグイン使えばええがな

WordPress Download Manager
https://ja.wordpress.org/plugins/download-manager/

投稿2019/05/23 03:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki275

2019/05/23 03:38

ご返答ありがとうございます。ただ、管理画面を介さないユーザーからの投稿サイトのため、そのプラグインは利用できないのです。
yuki275

2019/05/23 06:33

投稿フォームを作って、送信してもらった記事に自動で関連付けるということをしていたので無理かと思っていたのですが、試しにインストールしてみたところWYSIWYGエディタにボタンを付けるアドオンがあるのですね。 教えていただいたようにフロントエンドからのファイル管理もできるようですし、要件に合致するか少し試してみます。
guest

0

ベストアンサー

  • ダウンロードさせるダイアログの出し方がわからない
  • 回数をカウントする方法がわからない(そもそも回数カウントの定義もあやしい)
  • 両方がわからない

によります。

  • ダウンロードはアンカータグにdownload属性をつけてクリックすれば表示されます

  • 回数カウントがもしサーバー側にダウンロード回数を表示させることなら

本質的にはアクセスログを引っ張ってくることが望ましいです。
そうでなくアンカーをクリックされた回数をカウントアップしたいなら
ajaxでクリック情報をサーバーに流してやることでしょう

また、アンカーにダウンローダーを設置してやれば、download機能と
カウントアップ機能を両方持たせることは可能だと思います
(その場合アンカーでなくてもボタンもしくは適当なdivなどのHTML要素でもよいでしょう)

投稿2019/05/22 08:42

yambejp

総合スコア114825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki275

2019/05/22 08:58 編集

Link Clicks Counterを実装するとカスタムフィールドによるカウントはできるのですが、aタグに記載したdownload属性が無効化?されているらしく、通常通り画像を開いてしまう、という状態です。 >また、アンカーにダウンローダーを設置してやれば、download機能と カウントアップ機能を両方持たせることは可能だと思います 記事のクリック回数ランキングを実装しているため、カスタムフィールドにカウントアップされる機能が必須なのですが、ダウンローダーというのを利用すれば、それも可能なのでしょうか
yambejp

2019/05/22 08:57

ダウンローダーというのは <a href="download.php?file=hogehoge.jpg">hogehoge</a> みたいにする処理です download.phpによって適当なcontent-typeのheaderを吐けば ダウンロード対象となりますし、処理さえ入れればサーバー上の カウントアップもされるでしょう
yuki275

2019/05/22 09:04

Advanced Custom Fieldsを利用しているため、URLを <?php $file = get_field('userpostfile'); if( $file ): ?> <a href="<?php echo $file['url']; ?>"><?php echo $file['filename']; ?></a> <?php endif; ?> といったコードで取得しているのですが、この場合、 <?php $file = get_field('userpostfile'); if( $file ): ?> <a href="download.php?file=<?php echo $file['url']; ?>"><?php echo $file['filename']; ?></a> <?php endif; ?> と記載すればdownload.phpへリンクするという認識でいいのでしょうか
yambejp

2019/05/22 09:25

> download.phpへリンクするという認識でいいのでしょうか $fileが適切にurlencodeされているならそれでよいでしょう わかっていると思いますがあくまでもdownloa.phpは自力で作るんですよ? header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$file.'"'); header('Content-Transfer-Encoding: binary'); readfile($file); 的な流れになります。 ただし$fileの所在確認及び、パスや拡張子の確認などでどこまで アクセス可能にするか(phpファイルを指定されるとプログラムまで ダウンロードされてしまうので)など緻密なセキュリティ対策は必要です
yuki275

2019/05/22 09:53

丁寧な回答有り難うございます。 downloa.phpのurlがわかっていればサイト内のデータが自由に取得できるようになってしまう、ということでしょうか。確かにそれはセキュリティ対策をしないと危険ですね。 複雑なコードはまだまだわかっていないので、拡張子の制限の仕方などについて少し調べてみることにします。
yambejp

2019/05/22 10:11

ようは (1)サーバー側で適切なヘッダをつけてやるか (2)download属性付きのアンカーで処理するかのどちらかということ download属性付きアンカーはブラウザごとに挙動が違うので いくつかブラウザを想定してpolyfillしていく、想定外のものは なるようになれ・・・という考え方です
yuki275

2019/05/22 10:19

私としては、Link Clicks Counterを適用した状態で、download属性が無効化されないようになるのがベストでしょうか。 セキュリティ的な心配があまりありませんし、商業サイトではないので画像がそのまま表示されるブラウザは右クリックより~、と注意書きすれば問題がないので。 ただ、最初の方にも記載したとおり、jqueyに関しては全く知識がないため解決方法が見当もつかない状態ですので、とりあえずは教えていただいた方法を優先して調べてみようかと思います。
yambejp

2019/05/22 10:25

> download属性が無効化されないようになる 繰り返しになりますがdownload属性はブラウザ依存なので ブラウザ次第ですね。なにか想定するOSとブラウザはあるのでしょうか?
yuki275

2019/05/22 10:45

やはりメインはChrome、これから使用者が増えるであろうエッジでしょうか。 スキルのない状態で高望みをしても仕方がないので、download属性が標準で対応しているブラウザだけで問題ないと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問