投稿文書と画像を別に出力
-
またお世話になります。
PHPで投稿記事を出力する際、<?php the_content(); ?>で出力出来ると思いますが、文書と画像を分けてこの様な記述で別の場所に出力する方法はありませんか?
例えば文書のみを<?php the_document(); ?>、画像のみを<? php the_image(); ?>の様な形で出力できたらいいなと。何がしたいかというと、
こちら
のページをWordpressにて作成したいと思っています。
(HTMLとCSSでサンプルを作ってみました。)このページを見て頂くとわかるように、記事と画像を2段組みに、記事文書は<p></p>で囲み、CSSにてheightを指定してスクロールさせるようにしてあります。
そして画像表示にはSmoothgalleryを使用しています。通常通り記事と画像を投稿すればこの様な状態になる様にしたいのです。
Smoothgalleryのプラグイン版の使い方がちゃんとわかっていないのが原因かもしれませんが、どうもうまくいきません。
そこで最初の質問に戻りますが、投稿文書と画像を別に出力する方法があれば簡単に出来てしまいます。
HTMLで
<p><?php the_document(); ?></p>
として、CSSでpのheightを指定。
2段組みを作って
<div id=”myGallery”><?php the_image(); ?></div>
とすればいいだけなので。
(ちなみにdivのmyGalleryはSmoothgalleryの指定idで、ここで囲ったイメージがSmoothgalleryで表示されます。)そもそも全く別の方法で上記サイトの様な形にする事が可能な場合はそちらもご教授願えたらと思います。
毎度稚拙な質問で申し訳ありませんが、よろしくお願い致します。
-
似たような事を毎回やっているので…。
結論からいうと(知る限りですが)、カスタムコードを書かないとだめなんじゃないかな、と思います。構造的には、エントリの中身を全部取得、IMGタグを抽出して切り分け、別の出力先に吐き出すということだと思います。
手前味噌ですが、
http://www.vjcatkick.com/
このサイトのトップページでは、エントリの中から画像だけ取り出して並べるということをやってます。設計する際にポイントとなるのは
・1エントリに画像が複数あった場合
・1エントリに画像が全くなかった場合
・画像の縦横の比率が変わる場合
等を留意しつつ、かつ、
・WordPress流の画像の持ち方(メディアライブラリに画像がある場合)
・そうでない場合(メディアライブラリにないケース:昔のバージョンで作ったエントリのケース等)
これらを踏まえてコーディングすれば、おそらくお望みのものになるんじゃないかな、と思います。いずれにせよ、カスタムに起こさなければならないと思います。
上記サイトをWordPressにする。というだけに限定すればさほど難しくもないかもです。
http://www.christianschenk.org/projects/wordpress-smoothgallery-plugin/
とか使って、投稿は文章+画像一式をアップローダでアップしたものを全てSmooth Gallery に割り当てる、という決めうちにすればさほど難しくもないと思いますよ。V.J.Catkickさん、ありがとうございます。
きっとその方法でならやりたいことが出来ると思います。
ところが情けないことにphpなどのコンピュータ言語はど素人で全く分かりません。
カスタムコードを書く能力が無いため出来ないのです。kvexさん、毎度ありがとうございます。
そちらのサイトを拙い英語力で読んではいるのですが、そのとおりやっているつもりでもなぜか出来ないんです。
プラグイン版のSmoothgalleryで表示すること自体出来ていないのが現状です。
もしかしたらHow toの訳が間違っているのかもしれません。* go to the edit screen for a post or a page
記事やページの編集画面へ行く
* right below the input field for the title click on Add an Image
タイトル入力欄のすぐ下のイメージ追加をクリック
* upload some images and enter a sensible title and description
いくつかの画像をアップロードし、タイトルや説明を入力
* reorder the images however you want them
画像の並べ替えはあなたがしてください
* insert [smoothgallery] somewhere in the content
コンテンツのどこかに「smoothgallery」を挿入
* add a custom field named smoothgallery with its value set to On
カスタムフィールドを追加。名前をsmoothgallery,値をOnに
* hit save and click on View this Post/Page to see the result
セーブして記事を確認する上記のとおり訳してそのまま行いましたがSmoothgalleryの様なギャラリーにはなりませんでした。
とりあえずそこでストップしているので「投稿は文章+画像一式をアップローダでアップしたものを全てSmooth Gallery に割り当てる」ということを行うまでには至っていません。そこで今回の質問の通りの事が出来れば簡単だと思った為ご質問させて頂いた次第です。
kvexさんありがとうございます。
それが問題でした。
無事に表示する事が出来ました。
毎回基本的な部分で引っかかってるので申し訳ないです。難点と言えば毎回[smoothgallery]というショートコードを記入するのとカスタムフィールドの追加をする必要がある事ですね。
これ以上はわがまま無しにした方がよさそうですが。あとは「投稿は文章+画像一式をアップローダでアップしたものを全てSmooth Gallery に割り当てる」ですがちょっとやり方がわかってません。
http://www.christianschenk.org/projects/wordpress-smoothgallery-plugin/にはこのあたりの事が記述されていますでしょうか?プラグインを入れたわけではないので、思いつきに近いのですが。
要は<div id="myGallery"> <div class="imageElement"> <h3>Bergpark - Bridge</h3> <p>Another stunning picture.</p> <a href="http://www.christianschenk.org/wp-content/uploads/park2.jpg" title="open image" class="open"></a> <img src="http://www.christianschenk.org/wp-content/uploads/park2-400x266.jpg" class="full" alt="Bergpark - Bridge"/> </div> <div class="imageElement"> <h3>Bergpark - Aqueduct</h3> <p>Wow! That's awesome.</p> <a href="http://www.christianschenk.org/wp-content/uploads/park1.jpg" title="open image" class="open"></a> <img src="http://www.christianschenk.org/wp-content/uploads/park1-400x266.jpg" class="full" alt="Bergpark - Aqueduct"/> </div> </div>
こうなっている部分が Smooth Gallery として表示されるんですよね?
となると・・・添付ファイルの一覧を取得する(get_children())
ループさせて、情報を取得しながら上記のソースを生成するということでいいんじゃないですかね?
ありがとうございます。
get_childrenの事がいまいちわかってませんが、様々なサイトを見てみるとよくサムネイル画像を表示する際に利用しているようでした。
(http://beabo.net/2009/02/wordpress%E3%81%AE%E6%9C%80%E6%96%B0%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%8B%E3%82%89%E7%94%BB%E5%83%8F%E3%82%92%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/
こちらを参考にしました。)なんとなくですがこの機能の場合、一度投稿したものを再度別の場所に出力する際に利用するものなのではないのでしょうか?
この機能を使って「Smoothgalleryに割り当てる」や「ループさせて、情報を取得しながら上記のソースを生成する」方法がよく分かりません。やはりphp記述になるとどう記述したらよいか想像すら出来ないみたいです。。。
できましたよ。
やっつけ仕事なので、きたならしいですけど・・・<div id="myGallery"> <?php $images = get_children(array('post_parent' => get_the_ID(),'post_type' =>'attachment')); foreach ( $images as $attachment_id => $attachment ) { //var_dump($attachment); ?> <div class="imageElement"> <h3><?php echo $attachment->post_title; ?></h3> <p></p> <a href="<?php echo wp_get_attachment_url( $attachment_id ); ?>" title="open image" class="open"></a> <img src="<?php echo wp_get_attachment_url( $attachment_id ); ?>" class="full" alt=""/> </div> <?php } ?> </div>
で、なんか、あのプラグインはカスタムフィールドでプラグインをonにしないといけないんですね。めんどくさい・・・
なので、フッタに書いちゃいました。
プラグインを有効しなくてもいいです。直接読んじゃってますので。(あたりまえ?
ですから、プラグイン版じゃなくてもいいかも?フッタ部分</body>の直前にでも
<script src="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/scripts/mootools.js" type="text/javascript"></script> <script src="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/scripts/jd.gallery.js" type="text/javascript"></script> <script src="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/scripts/jd.gallery.transitions.js" type="text/javascript"></script> <script type="text/javascript"> function startGallery() { var myGallery = new gallery($('myGallery'), { showCarousel: false }) } window.addEvent('domready', startGallery); </script>
これで、画像をアップするだけで動くはずです。
とくに記事内にショートコードや、画像をおかなくていいです。すみません。書き忘れです。
実際は、本文との位置関係があるので<div class="content-body"> <?php the_content(); // ここが本文ですね?> </div> <div id="myGallery"> <?php $images = get_children(array('post_parent' => get_the_ID(),'post_type' =>'attachment')); foreach ( $images as $attachment_id => $attachment ) { //var_dump($attachment); ?> <div class="imageElement"> <h3><?php echo $attachment->post_title; ?></h3> <p></p> <a href="<?php echo wp_get_attachment_url( $attachment_id ); ?>" title="open image" class="open"></a> <img src="<?php echo wp_get_attachment_url( $attachment_id ); ?>" class="full" alt=""/> </div> <?php } ?> </div>
こんな感じにしておいて、スタイルシートなりで回り込ませるなりなんなり。
事細かにフォームまで作っていただけるとは至れり尽くせり本当にありがとうございます!
頂いたものを駆使して作成させて頂きます!
また分からない事が出てきましたらご質問させて頂きたいと思います。
よろしくお願い致します。お世話になります。
頂いたソースで試みてみましたが、ちょっとうまくいきませんでした。
いろいろ検証したところ、フッター部分に記述した<script src="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/scripts/mootools.js" type="text/javascript"></script> <script src="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/scripts/jd.gallery.js" type="text/javascript"></script> <script src="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/scripts/jd.gallery.transitions.js" type="text/javascript"></script> <script type="text/javascript"> function startGallery() { var myGallery = new gallery($('myGallery'), { showCarousel: false }) } window.addEvent('domready', startGallery); </script>
この部分を除いてカスタムフィールドをOnにすればちゃんと表示されますのでこの部分に問題があるようです。
よく見ると、.jsファイルの場所が私のPCの場合、
http://localhost/wordpress/wp-content/plugins/smoothgallery/scripts/~
でしたのでその部分は変更しました。変更してもしなくてもどちらもSmoothgalleryとして表示されませんでした。
もしかしたらプラグイン版ではダメなのでしょうか?それともう一つ、”画像のタイトル”は<?php echo $attachment->post_title; ?>で出力していますが、次の<p></p>で囲った部分の”画像の説明”を出力するコードはあるのでしょうか?(post_exceptとか?)
もう少しでやりたい事が完成しそうです。
もう十二分にアドバイスして頂いていますが何卒よろしくお願い致します。jsまでのパスはそのとおりです!適宜置き換えてください、気づかずにすみませんでした。
また、1つコピペ忘れてました;;<link rel="stylesheet" type="text/css" href="http://localhost/_wp31/site01/wp-content/plugins/smoothgallery/smoothgallery.php?smoothgallery_action=css&prefix=http%3A%2F%2Flocalhost%2F_wp31%2Fsite01%2Fwp-content%2Fplugins%2Fsmoothgallery&ct=1&height=345&width=460&bordercolor=000" />
これも見づらいですが、エンコード部分を置き換えるといいかも。
というか、要するにプラグインをカスタムフィールドでonしたときのコードを記述してるだけなので、一度プラグインで表示してコピーしておけばいいかもです。
あとなんだっけ。。。あ、そうそう「説明」ですね。
<p><?php echo $attachment->post_content; ?></p>
- トピック「投稿文書と画像を別に出力」には新たに返信することはできません。