トップページの最新ニュースタイトルをリンク無しにするには?
-
トップページによくあります、「最新ニュース」というエリアの各ニュースタイトルにリンクをしない書き方はどうすれば出来るでしょうか?
例えば、
2012/03/12 : ○○イベントは終了しました。多くのご来場頂き有難う御座いました
などという記事を「投稿」によって作成した場合、詳細記事のページはありません。
ただ単に、
○○イベントは終了しました。多くのご来場頂き有難う御座いました
ということが伝えられたらそれで終わりにしたいのです。通常は詳細が載っているページへのリンクがされてしまうので、これをリンクにしないただのテキスト文にしたいのです。
どうやったら一番簡単かつ長期的に使えるようにできるでしょうか?
カスタム投稿タイプ、というものでやるのかな??
-
ん~、最新ニュースに載せる記事一覧のうち、例えば期日を過ぎたものにはリンクを貼らないとかでしょうか?
例えばこれが通常は記事にリンクするけど、任意の記事だけリンクをはずしたいとなると、少々工夫が必要ですかね。最新ニュース一覧などはfunctions.phpなどでショートコードなどを利用して作ると仮定して…
1.期日を過ぎたものにリンクを貼らない場合
表示部分を作る段階で、記事の日付を比較してリンクをつけるかつけないかの判定をする。
この場合通常表示する記事はすべて未来投稿ということになりますかね?予約投稿にせずに未来の日付で投稿し表示する方法は過去フォーラムでもあったと思います。2.任意の記事だけリンクをはずしたい場合
同じく表示部分を作る段階で、例えばリンクをはずしたい記事に特定のタグをつけておいて、該当のタグが付いている場合はリンクをつけないなどの判定を行う。
この場合、自動的に記事のリンクをはずすことはできないですね。あくまでも手動でタグを付与し、タグが付いたらリンクはしないという処理になると思います。ご質問の内容から判断した感じだとこのようなロジックになると思いますが、もしかして質問の意図が違うかな?
感謝申し上げます。
ちょっぴりだけ伝えたいこととご理解いただいていることに差がございました。
「投稿」で投稿するときには必ずURLがつくられますよね。最初は勝手にページタイトルで入力した日本語が生成されるヤツです。
パーマリンク: http://www.mysite.com/news/( ).html
というところです。
※( )の中に日本語が勝手に入ります。パーマリンクと呼ぶのですかね。
「このニュースは詳細ページがあるのでURLを入れよう」
とか、
「このニュースは単なる”有難うございました”的内容だから、詳細ページは無しにしよう。だからリンクも無しだ。URLを空欄にしとこう」このように、記事によってアンカーリンクをONにしたりOFFにしたりしたいのです。
もちろん、おっしゃいますように、投稿した後に、事情が変わって、
「最初はリンクをONにして詳細ページを作っていた投稿だったが、イベントが終わったので詳細ページは閉鎖しよう。だからリンクも無しに変更しよう」
というような、「投稿後の変更」ができるとなお良いです。パーマリンクエリアのURL欄の付近に、
「リンクを付与する」
などというチェックボックスがあるといいのかな、と思いましたが、
そうするとなんかこう、大掛かりな変更になりそうにも思いますし、目的が達成できれば何でもいいので、
最新ニュースのHTMLのところのPHPコードに何かを追加して作成できるのであればそれでもぜんぜん結構です。現在のトップページの最新ニュースエリアのソースを以下に入れておきますので。
<ul class="news"> <?php $lastposts = get_posts('numberposts=5'); foreach($lastposts as $post) : setup_postdata($post); ?> <!-- 別窓リンク用カスタマイズエリア(太字にするカスタマイズも) --> <?php $link = get_permalink(); $link_target = ''; $ex_link = get_post_meta(get_the_ID(), 'uri', true); if ( $ex_link ) { $link = $ex_link; $link_target = ' target="_blank"'; } ?> <li <?php post_class(); ?>><?php the_time('Y/m/d'); ?>:<a href="<?php echo $link; ?>" name="post-<?php the_ID(); ?>" id="post-<?php the_ID(); ?>"<?php echo $link_target; ?>><?php the_title(); ?></a> <!-- 最新から○日以内の記事タイトルだけNEWアイコンを表示させるカスタマイズ --> <?php $days=30; $today=date('U'); $entry=get_the_time('U'); $sa=date('U',($today - $entry))/86400; if( $days > $sa ){ echo " <img src=\"/wp-content/themes/mytmpl/img/home/icon_new.gif\" width=\"30\" height=\"16\" alt=\"NEW\" />"; } ?> </li> <?php endforeach; ?> </ul>
これで情報は足りるでしょうか。
宜しくお願いします。すでにリンクを表示するロジックは組まれているようですね。
そうですねー、色々方法はあるのでしょうが、おそらく簡単なのはカスタムフィールドにリンクの有無のような項目(ラジオボタンなど)を作って、カスタムフィールドの内容を分岐点にして表示を分ければいいんじゃないっすかね。
デフォルトではリンクをONにしておいて、リンク不要の場合だけOFFに切り替えるようにすれば、最初はリンクあり、後で変更も可能ですね。<?php if( get_post_meta($post_id, 'link_url', true) ) { ?> <li <?php post_class(); ?>><?php the_time('Y/m/d'); ?>:<a href="<?php echo $link; ?>" name="post-<?php the_ID(); ?>" id="post-<?php the_ID(); ?>"<?php echo $link_target; ?>><?php the_title(); ?></a> <?php } else { ?> <li <?php post_class(); ?>><?php the_time('Y/m/d'); ?>:<?php the_title(); ?> <?php } ?>
カスタムフィールドのキーがlink_urlだった場合の例(未検証)
感謝、感謝申し上げます。
すでにリンクを表示するロジックは組まれているようですね。
はい、投稿ニュースはデフォルトカテゴリを「ニュース」としています。
そして、それに加えて「ニュース(強調)」というカテゴリを新たに設けていて、これをチェックONしたら、
そのニュースタイトルを太字にするようにしています。
当方、ノンプログラマでして、上記PHPコードはこのフォーラムの皆様に教えていただいたものです。
また、本日只今から過去一ヶ月以内のニュースタイトルだけNEWアイコンを表示させたり、
カスタムフィールドで「uri」という名前を選択している記事のみ、値の欄にURLを入れれば、
そのニュースタイトルのリンクはそのURLが別ウィンドウとして開きます。
以上の三点が機能として入れられております。そうですねー、色々方法はあるのでしょうが、おそらく簡単なのはカスタムフィールドにリンクの有無のような項目(ラジオボタンなど)を作って、カスタムフィールドの内容を分岐点にして表示を分ければいいんじゃないっすかね。
デフォルトではリンクをONにしておいて、リンク不要の場合だけOFFに切り替えるようにすれば、最初はリンクあり、後で変更も可能ですね。ご紹介いただいたソースを、以下のように当方のPHPソースに入れ込んでみたところ、
全てのニュースタイトルからアンカーリンクが消えました。<ul class="news"> <?php $lastposts = get_posts('numberposts=5'); foreach($lastposts as $post) : setup_postdata($post); ?> <!-- 別窓リンク用カスタマイズエリア(太字にするカスタマイズも) --> <?php $link = get_permalink(); $link_target = ''; $ex_link = get_post_meta(get_the_ID(), 'uri', true); if ( $ex_link ) { $link = $ex_link; $link_target = ' target="_blank"'; } ?> <?php if( get_post_meta($post_id, 'link_url', true) ) { ?> <li <?php post_class(); ?>><?php the_time('Y/m/d'); ?>:<a href="<?php echo $link; ?>" name="post-<?php the_ID(); ?>" id="post-<?php the_ID(); ?>"<?php echo $link_target; ?>><?php the_title(); ?></a> <?php } else { ?> <li <?php post_class(); ?>><?php the_time('Y/m/d'); ?>:<?php the_title(); ?> <?php } ?> <!-- 最新から○日以内の記事タイトルだけNEWアイコンを表示させるカスタマイズ --> <?php $days=30; $today=date('U'); $entry=get_the_time('U'); $sa=date('U',($today - $entry))/86400; if( $days > $sa ){ echo " <img src=\"/wp-content/themes/custom_sideline/img/home/icon_new.gif\" width=\"30\" height=\"16\" alt=\"NEW\" />"; } ?> </li> <?php endforeach; ?> </ul>
なので、
過去のリンク付けたいニュース(今のところ全てのタイトルになりますが)のうち、ひとつを選んで編集画面を開きまして、カスタムフィールドに新たに「link_url」という名前のカスタムフィールドを設けてみましたら、
「カスタムフィールドの値を入力してください。」
と出てしまってわからなくなりました。知識が追い付かず申し訳ありません。追記です。
当方のしがない理解ですと、
投稿ページの投稿画面のカスタムフィールドにおいて、名前欄に「link_url」と記載した記事はtrueとなるので、リンクをONにしている方のif文内のHTMLソースが出力され、
逆に、名前欄に「link_url」が無い記事はリンクがOFFになっている方のif文内のソースが表示されるのかな?と想像して操作しておりました。カスタムフィールドの名前欄に「link_url」と登録し、値欄も入れないと「ダメだ」と出るので、
値欄にも同じく「link_url」と入れたり、
その記事のポストID(編集画面のURLを見ると書いてある。post.php?post=251&action=edit&message=1と書いてあったので、251と入れてみた)を入れたりしたのですが、
どちらも結果は同じで、全てのニュースタイトルからアンカーリンクが消えております。いや、それ以前に、いただいたソースを当方の元々のソースに仕込んだ時点ですでに間違って仕込んでいるかも知れません・・・
再追記です。
カスタムフィールドのキーがlink_urlだった場合の例(未検証)
と記載いただいていたのに気付いたので、もう一度やってみました。
キーとは名前欄のこととネット検索でわかりました。
そして、値には、パーマリンクにすでにURLがあるのですが、そのURLをここに張り付けてみました。
それでも現象変わらずでした。shokun0803さま、修正したらなんとなくできた感じになってきましたが、
やり方ははたしてあっているでしょうか。※編集ページにて、要らないカスタムフィールドを削除してから「更新」ボタンを押しても、なぜか削除したカスタムフィールドが再び出現する、という意味不明な現象が起こるものの、意図した表示になってくれているようです。
PHPプログラミングの教材を読み始めておりまして、教材中に出てきたPHPの書き方を考えたら、
「これはこうするのでは?」
と思った点があったので、いただいたソースの中でそれを試してみました。(1) $post_idという変数(?)をif文の前で定義(?)してみた
if( get_post_meta($post_id, …..
とあるところの$post_idというのは、WordPressが決めているものかと思っていたのですが、
もしかしてユーザ定義なんとか、というものかも知れないと思って、if文の前に以下のように書いてみました。$post_id = get_the_ID();
これをおこなってWP投稿画面でテストしてみたところ、これまでとは違う結果が得られました。
リンク無しにしたいニュースタイトルだけがリンク有りになって、その他のリンク有りのままのニュースタイトルがリンク無しになって、つまり逆になってしまいました。(2) if文とelse文の条件ソースを逆にしてみた
これをおこなったところ、逆になっていたのが直りました。
これで合っているでしょうか。
それとも、たまたま偶発的にできているにすぎず、書き方が違うでしょうか。
何度も申し訳御座いません。
- トピック「トップページの最新ニュースタイトルをリンク無しにするには?」には新たに返信することはできません。