サポート » プラグイン » advanced custom fieldsで出力したURLがリンクしない

  • advanced custom fieldsを使用しています。
    以下のコードでテキストエリアで表示しています。

    <div class="sample">
    <?php $ctm = get_post_meta($post->ID, 'sample', true);?>
    <?php if(empty($ctm)):?>
    <?php echo ""; ?>
    <?php else:?>
      <p class="fonttitle">タイトル</p>
    <?php the_field('sample',$post->ID); ?>
    <?php endif;?>
    </div>

    このコードで投稿画面のカスタムフィールドで追加した内容は
    表示されるのですが、
    URLを貼った時にリンクされません。
    (例えば、http://ja.forums.wordpress.org/と貼ってもリンクされず、URLが
    表示されているだけの状態です。)

    このURLをリンクさせたいのですが、どうすればいいでしょうか?
    普通に投稿する場合は、リンクさせるためのボタンがあるので出来ますが、
    カスタムフィールドの場合、ボタンも無かったので・・

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • aタグのhrefに入れればいいだけの話です。このままだとaタグの中身がないので、タイトルを囲みました。

    <div class="sample">
    <?php if(get_field('sample', $post->ID): ?>
        <p class="fonttitle"><a href="<?php the_field('sample', $post->ID); ?>">タイトル</a></p>
    <?php endif; ?>
    </div>

    Advanced Custom Fieldsを使用する場合は、get_post_meta()を使用せず、the_field()とget_field()を使うようにしましょう。

    また、if文で「ある」場合を先に設定しておくとelseを書かなくて済み、コードがスッキリしますし、無駄な処理も減ります。

    トピック投稿者 rincan

    (@rincan)

    ixkaitoさん
    ご回答ありがとうございます。

    ixkaitoさんのコードを貼り付けてみたところ、
    カスタムフィールドを表示しようとしているサイトの画面自体が
    表示されなくなってしまいました。

    どうすればよろしいのでしょうか?
    お手数かけます。
    申し訳ございません。

    すみません、ifの閉じカッコが抜けておりました。

    <div class="sample">
    <?php if(get_field('sample', $post->ID)): ?>
        <p class="fonttitle"><a href="<?php the_field('sample', $post->ID); ?>">タイトル</a></p>
    <?php endif; ?>
    </div>
    トピック投稿者 rincan

    (@rincan)

    ixkaitoさん
    修正ありがとうございます。
    コードを貼りましたところ、表示されました。

    ただ、申し訳ございません。
    私の希望と違う結果でして・・

    ixkaitoさんのコードを貼りますと、
    「タイトル」という部分がリンクになっておりまして、
    そのリンクをクリックすると、カスタムフィールドに入力した内容が
    そのままURLに追加されるという仕様でした。
    (カスタムフィールドに、参考にしたサイト:http://ja.forums.wordpress.org/
    と入力した場合、URLにもそのまま「参考にしたサイト:http://ja.forums.wordpress.org/」と追加される、という仕様でした。)

    私の希望としましては、
    カスタムフィールドに、「参考にしたサイト:http://ja.forums.wordpress.org/」と
    追加した場合に、http://ja.forums.wordpress.org/だけがリンクとなり、
    「参考にしたサイト:」の部分はリンクにならないようにしたいです。

    すみません、
    もしご存知でしたら、よろしくお願い致します。

    フィールドタイプはテキストですか?
    「参考にしたサイト」の部分は毎回手入力ですか?
    毎回同じですか?例えば「関連サイト」とかになったりしませんか?

    色々と情報不足の部分がありますが、状況からの推測で答えさせていただきます。

    文字列の検索や置き換えなどでできなくはないですが、入力間違いをする可能性がありますし、無駄な処理なので、「参考にしたサイト」とURL部分を分けてください。

    「参考にしたサイト」が毎回同じなら、フィールドラベルを「参考にしたサイト」にし、フィールドにはURLのみを入力してください。

    この場合のコード

    <div class="sample">
    <?php if(get_field('sample', $post->ID)): ?>
        <p class="fonttitle">タイトル</p>
        <p><a href="<?php the_field('sample', $post->ID); ?>">参考にしたサイト</a></p>
    <?php endif; ?>
    </div>

    「参考にしたサイト」が変わる場合は別にフィールドを用意してください。
    例)フィールドラベル:リンクタイプ/フィールド名:link-type

    この場合のコード

    <div class="sample">
    <?php if(get_field('sample', $post->ID)): ?>
        <p class="fonttitle">タイトル</p>
        <p><a href="<?php the_field('sample', $post->ID); ?>"><?php the_field('link-type', $post->ID); ?></a></p>
    <?php endif; ?>
    </div>

    なお、ご提示のコードに合わせてタイトルをif文の中に入れておりますので、URLを入力していない場合タイトルも出力されません。参考サイトのURLがなくてもタイトルを出力したい場合はifの外に出してください。

    トピック投稿者 rincan

    (@rincan)

    返信遅くなってしまい、すみません。

    フィールドタイプはテキストエリアを使用しています。
    「参考サイト」とした部分は、毎回手入力のため、
    変更することが想定されます。

    もし、URLの部分のみをリンクさせたい場合は、
    カスタムフィールドを2つ用意して、
    一つは表示用、もう一つはリンク用
    というように分けて運用していくことが大切
    という認識でよろしいでしょうか?

    出来れば、1つにまとめて、と考えていましたが、
    やはり難しいでしょうか・・
    私もgoogleで調べましたが、方法が分かりませんでした。

    であれば上記で提示しました2つ目の方法でフィールドを2つに分けましょう。
    「参考サイト」の部分が変わるようでしたらなおさらです。
    URLはURLのみで入力するのが理想です。

    モデレーター Takuro Hishikawa

    (@hissy)

    検索すればいくらでも出てきますよ〜
    http://d.hatena.ne.jp/takeru-c/20080624/1214322048

    トピック投稿者 rincan

    (@rincan)

    ixkaitoさん
    hissyさん
    ご回答ありがとうございます。

    ixkaitoさんが教えてくださいましたように、
    2つに分けるフィールドで現状は進めていこうと思いますが、
    やはり1つにまとまっていると、自分が進めやすいと感じましたので、
    1つでも出来る情報などありましたら、また教えていただけますと嬉しいです。

    hissyさんが教えてくださいましたURLの記事を拝見しました。
    そちらに記載されていましたコードをfunctions.phpに貼り付けてみましたが、
    管理画面にリンクが表示され、サイト上で変化が見られませんでした。
    ごめんなさい。私の解釈が間違っていたら申し訳ないですが、
    もし不足があるようでしたら、教えていただけますと嬉しいです。

    モデレーター Takuro Hishikawa

    (@hissy)

    こんな感じ 😉

    <?php echo autoLink(get_field('sample',$post->ID)); ?>

    「参考にしたサイト:http://ja.forums.wordpress.org/」と入力したとき、
    <a href="http://ja.forums.wordpress.org/">参考にしたサイト</a>
    というソースを生成する仕組みを話しておきます。

    まず、入力した内容から正規表現で「http://」か「https://」とその後に続くURLの文字列を見つけて抽出し、それをaタグのhrefに入れる。その前の部分を「参考にしたサイト」の部分に入れる、後ろの「:」を出したくないならその前に弾いておく。

    ただし、URLに日本語が入っていると動かないので、その場合はURLを検索する前に一度エンコードし、hrefに入れる前にもう一度デコードする。

    さらに、「http(s)://」を変なところにつけてしまうとそれがURLとして認識されてしまう可能性があるし、「http(s)://」がないと動かないので相対パスでの記入は不可能。

    しかしフィールドを2つにすれば上記のことは一切しなくていいです。
    日本語URLにも対応しますし、相対パスの記入もOK。

    運用上入力ミスは必ずと言っていいほどありますので、手間をかけてリスクを取るメリットはどこにもありません。初心者であるならなおさらです。

    hissyさんが提示してくれたサイトのコードが理解できないなら使用するべきではありません。
    理解して使用するなら止めません。

    理解していないことをそのまま教えてもらっても問題が起きた時は自分で解決できない。
    その時はまたここのフォーラムで聞きますか?

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「advanced custom fieldsで出力したURLがリンクしない」には新たに返信することはできません。