投稿記事のパーマリンクを「即座に」表示する方法
-
プラグイン「WP User Frontend」によって、ユーザーが記事を投稿できる環境があります。
(プラグイン概要:http://www.hp-fuzy.com/?p=354)
(プラグインサイト:https://ja.wordpress.org/plugins/wp-user-frontend/)投稿ボタンを押しても、投稿した記事には飛ばず、同じページに【今投稿した記事のパーマリンクは「example.com/xxx」です】のようなメッセージを表示したいと思っているのですが、そのような取得方法はございませんでしょうか?
調べてみると、テンプレートに書くものはどれも「今表示中のパーマリンクを取得するもの」や「投稿idが分かっている場合」のようで、なかなか困っています。
パーマリンクはランダムで発行されるので、それをうまいこと取得したいのですが、、
何卒宜しくお願いいたします。
-
Ajaxで出来ます
https://teratail.com/questions/107076Ajax、、初耳です。検索したらたくさん出てきました。いくつか見てみます。またわからなければここに書きますのでお返事ください。
そちらのリンク先ですが、残念ながら回答がないようです。たとえば次のように書くとアラートが表示されるようです。
//XHTML <form name=""> <input type="button" value="パスを取得" onClick="showPath()"> </form> //Javascript <script type="text/javascript"> function showPath(){ var path= location.pathname; alert(path); } </script>
これを「アラートに表示する」のではなく「同じページに表示する」(投稿先の新しい記事のページではなく、投稿したページに表示する)ためには、どのように考えればいいか、もう一声頂戴できませんでしょうか?
投稿ボタンを押しても、投稿した記事には飛ばず、同じページに【今投稿した記事のパーマリンクは「example.com/xxx」です】のようなメッセージを表示したい
とのことなので、[User Frontend] > [Post Forms] > [Settings] > [Post Settings] の “Redirect To” を “Same Page” に設定してあると考えてよいのですよね。
その場合、同じ設定画面の “Message to show” に入力してあるテキストが、投稿後に同じページ内に表示されますよね。たとえば、そのメッセージに続けて、今投稿した新しい記事のパーマリンクを表示するのでしたら、テーマの functions.php に下記を記載すればできると思います。
add_filter( 'wpuf_add_post_redirect', 'my_wpuf_post_message', 10, 4 ); function my_wpuf_post_message( $response, $post_id, $form_id, $form_settings ) { $response['message'] = $form_settings['message'] . get_permalink( $post_id ); return $response; }
わー今年イチバン嬉しいです!笑
「wpuf-success」というクラスの中に入った状態でバッチリ表示されました。ありがとうございます!Ajaxというのを使うと良いらしい、と伺ったのですけれど、初心者がgoogleで20ページ先まで検索して、深夜に途方に暮れておりました。本っっ当に、どうもありがとうございます。
ところで、こうして出力されたパーマリンクを、ツイートしたりQRコードで表示したりしたいと思っています。ぶしつけな追加質問なのでスルーで構わないのですが、もしそれもやるならば、phpとjavascriptはどちらが適当でしょうか?
javascriptでもできそうな感触ですし、
https://lab.syncer.jp/Web/JavaScript/Snippet/76/phpでもいけそうな感触がします。
http://www.1×1.jp/blog/2014/06/php_functions_that_get_defined_items.htmlコードをまるごと書いてくれだなどとは言いませんので、ちょびっとヒントを頂戴できませんでしょうか?(>_<)
QRコードは、投稿後にパーマリンクを表示した画面に表示するのでしょうか。
たとえば QR Code Tagプラグインを使うと楽そうですね。インストールして、[設定] > [QR Code Tag] の Help の 3. PHP Function usage に QR Code 画像の URL を取得するコード例が書いてあるので、それを functions.php に追加したコードの中に組み込めば、投稿のパーマリンクとともにQRコードを表示することができそうです。仰るとおり、ちょうど今、まさにそちらのプラグインに挑戦いたしました!
そして「表示されるパーマリンクの直前にそちらのプラグインのQR化ショートコードを挿入しよう」と思い、次のように書いてみました。つまり、
[ショートコード]パーマリンク[ショートコード]
を目指しています。(function($){
$(‘[ショートコード]’).prependTo(‘.wpuf-success’);
})(jQuery);(function($){
$(‘[ショートコード]’).appendTo(‘.wpuf-success’);
})(jQuery);失敗でした。笑
で、何かヒントないかな~、と思いこのページにやってきたら、なんと、ご返信があるではないですか!
なるほど!Help の 3. PHP Function usageのこちら
global $qrcodetag;
echo $qrcodetag->getQrCodeUrl($content, $size, $encoding, $ecc, $margin, $version);を、組み込むことで出来るのですね!最高のヒントです。チャレンジしてみます!どうもありがとうございます。
今度は出力されたURLをツイッターのリンクとつなげたいと思っているのですが、うまくjavascriptで拾ってくれません。
<!-- twitterリンク追加 --> window.addEventListener( 'DOMContentLoaded', function(){ var arr1 = []; // クラスのwpuf-successを指定 var list1 = document.getElementsByClassName('wpuf-success'); var link = document.getElementById('link'); // ループ文で配列に格納 for (var i=0;i<list1.length;i++){ arr1.push(list1.item(i).innerHTML); } // リンクを書き換え link.href = 'https://twitter.com/intent/tweet?text=タイトル&url='+arr1[ 0 ]; }, false );
このようにツイッターのURLをつなげようとしているのです。
が、出来上がるリンクは
「ツイッター投稿リンク + 記事のURL」ではなく、
「ツイッター投稿リンク + undefined」になってしまいます。なんとかうまいことできませんでしょうか?(>_<)
意図がよくわからなかったのですが、最初のコードサンプルの
my_wpuf_post_message()
で出力した URL をツイート用の URL に書き換えたい、ということなのでしょうか。そうだとしたら、後から javascript で加工するよりも、初めから
my_wpuf_post_message()
の中でツイート用 URL を作ってしまう方が手っ取り早いと思うのですが…おはようございます。ご返信&アドバイスありがとうございます。m(_ _)m
>最初のコードサンプルの
my_wpuf_post_message()
で出力した URL をツイート用の URL に書き換えたい、ということではなくて、出力された「記事のURL」はそのままに表示しています。
それとは別に【「記事のURLをツイートするためのURL」が含まれたボタン】も作りたいと思い、そのために「ツイッター投稿リンク + 記事のURL」をjavascriptで上のように書いてみた。
という次第なのです。
けれど、どうやらjavascriptで拾ときにはまだ「記事のURL」は発行されていないせいか、
「ツイッター投稿リンク + 記事のURL」ではなく、
「ツイッター投稿リンク + undefined」になってしまう。というわけです。
長くなってすみません。汗この場合、上のjavascriptを書き換えるべきなのか、それとも教えて頂いたfunctions.phpを書き換えるべきなのでしょうか?
- この返信は7年前にmeijinochocoが編集しました。
そうですか…
このフォームの Create Postボタンをクリックしたとき、通常のsubmit のようなページのリロードではなくて ajax でメッセージの表示とフォームの消去を行っているようなので、DOMContentLoaded のハンドラは実行されないと思います。
現在の
window.addEventListener( 'DOMContentLoaded', function(){ }, false );
の中ではなく、
jQuery(document).ajaxSuccess( function(){ });
の中に処理を書けば、もしかしたら動くかもしれません。
できました!朝からずっとやっていて、目と頭が痛いのが、吹き飛びました。
嬉しくて死んじゃうかもしれません。
こんなに親切な方がいらっしゃるのですね。。笑ありがとうございます。誠に、ありがとうございます!
ビットコインアドレスはお持ちでしょうか?
せめて気持ちの2千円分だけ贈らせて下さい。<(_ _)>- この返信は7年前にmeijinochocoが編集しました。
失礼しました。かしこまりました。(>_<)
- トピック「投稿記事のパーマリンクを「即座に」表示する方法」には新たに返信することはできません。