サポート » 使い方全般 » 投稿記事のパーマリンクを「即座に」表示する方法

  • 解決済 meijinochoco

    (@meijinochoco)


    プラグイン「WP User Frontend」によって、ユーザーが記事を投稿できる環境があります。
    (プラグイン概要:http://www.hp-fuzy.com/?p=354)
    (プラグインサイト:https://ja.wordpress.org/plugins/wp-user-frontend/)

    投稿ボタンを押しても、投稿した記事には飛ばず、同じページに【今投稿した記事のパーマリンクは「example.com/xxx」です】のようなメッセージを表示したいと思っているのですが、そのような取得方法はございませんでしょうか?

    調べてみると、テンプレートに書くものはどれも「今表示中のパーマリンクを取得するもの」や「投稿idが分かっている場合」のようで、なかなか困っています。

    パーマリンクはランダムで発行されるので、それをうまいこと取得したいのですが、、

    何卒宜しくお願いいたします。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • Ajax、、初耳です。検索したらたくさん出てきました。いくつか見てみます。またわからなければここに書きますのでお返事ください。
    そちらのリンク先ですが、残念ながら回答がないようです。

    たとえば次のように書くとアラートが表示されるようです。

    //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を書き換えるべきなのでしょうか?

    • この返信は2 週間、 4 日前に  meijinochoco さんが編集しました。

    そうですか…

    このフォームの Create Postボタンをクリックしたとき、通常のsubmit のようなページのリロードではなくて ajax でメッセージの表示とフォームの消去を行っているようなので、DOMContentLoaded のハンドラは実行されないと思います。

    現在の

    window.addEventListener( 'DOMContentLoaded', function(){
    
    }, false );
    

    の中ではなく、

    jQuery(document).ajaxSuccess( function(){
    
    });
    

    の中に処理を書けば、もしかしたら動くかもしれません。

    できました!朝からずっとやっていて、目と頭が痛いのが、吹き飛びました。
    嬉しくて死んじゃうかもしれません。
    こんなに親切な方がいらっしゃるのですね。。笑

    ありがとうございます。誠に、ありがとうございます!

    ビットコインアドレスはお持ちでしょうか?
    せめて気持ちの2千円分だけ贈らせて下さい。<(_ _)>

    • この返信は2 週間、 4 日前に  meijinochoco さんが編集しました。

    うまくいってよかったです。
    せっかくですが、金銭は辞退します。お気持ちだけ受け取ります。
    解決済にしてクローズしてください。

    失礼しました。かしこまりました。(>_<)

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • このトピックに返信するにはログインが必要です。