カスタム投稿
永らくありがとうございました › フォーラム › 使い方全般 › カスタム投稿
- このトピックには10件の返信、2人の参加者があり、最後に
匿名により9年、 1ヶ月前に更新されました。
-
投稿者投稿
-
2012 年 10 月 21 日 10:27 AM #2701
匿名
ゲスト初めまして。
こちらのフォーラムには色々とお力を頂いております。
XpressMEでカスタム投稿を2つ設置し投稿を行ったところ、
ブロック「最近の記事内容」の表示エリアに
カスタム投稿分の記事が表示されません。
「最近の記事内容」ブロックにて表示したい内容は
タイトルとカスタムフィールド(テキストエリア)
です。
方法はございますか?
拙い質問で申し分かりませんが、よろしくお願いいたします。
環境は
SERVER::Apache/ASJ2010022300SF.42 (Unix)
PHP Version::5.2.17
libxml Version::2.7.6
MySQL Version::5.0.83
XOOPS Version::XOOPS Cube Legacy 2.1.7
XPressME Version::2.47
WordPress Version::3.4.2
WP DB Version::21707
2012 年 10 月 21 日 12:14 PM #3437toemon
キーマスターうたたねさんこんにちは
XPressMEのブロックは、WordPressの標準コンテンツタイプpost(投稿)及びpage(ページ)にしか対応していません。
ご質問の内容を実現する方法としては
拡張ブロックのご利用をお勧めします。
拡張ブロックでは、WordPressのテンプレートタグや関数、条件分岐タグ、等を利用してブロック内に任意の出力を得ることができます。
[例] カスタム投稿タイプ [movies]のタイトルを5件表示する
拡張ブロックを複製インストールして
タイトルを 「映画一覧」等とします
ブロックオプションの
「カスタムブロックを表示するファイル名を入力してください。:」の部分に
「ファイル名」を my_movies_block.php(moviesの部分だけを入力)として
保存(送信)します。
次に
拡張ブロックで指定したファイル名my_movies_block.php
を作成して
サーバーの…/wp-contents/themes/xpress_default/blocksディレクトリに転送します。
my_movies_block.phpの内容例
<code><?php query_posts('post_type=movies&posts_per_page=5'); ?><br /> <?php if(have_posts()) : while (have_posts()) : the_post(); ?><br /> <a href="<?php the_permalink(); ?>" target="_blank"><?php the_title('<li>','</li>'); ?></a><br /> <?php endwhile; endif; ?></code>
query_posts()でpost_type=moviesを指定してカスタム投稿タイプ[movies]を選択しています。
2012 年 10 月 24 日 12:53 PM #3438匿名
ゲスト>toemon様
返信が遅くなり、失礼しました。
ご返答頂きありがとうございます。
早速カスタムブロックをインストールし、
ファイル名を「my_newitem_block.php」に変更し
保存しました。
次にteraPadを使用して記述にカスタム投稿のIDの部分だけ変更し
<code><?php query_posts('post_type=prmm&posts_per_page=5'); ?><br /> <?php if(have_posts()) : while (have_posts()) : the_post(); ?><br /> <a href="<?php the_permalink(); ?>" target="_blank"><?php the_title('<li>','</li>'); ?></a><br /> <?php endwhile; endif; ?></code>
と書き、文字コードUTF-8Nにして「my_newitem_block.php」と保存、FTPにて
wp-contents/themes/xpress_default/blocks内にアップロードいたしました。
残念ながら
ブロックにはブロックのタイトル名とその直下に
ファイル(中略)wp-content/themes/xpress_default/blocks/my_newitem_block.php が見つかりません。
と表示され、記事のタイトルが表示されません。
ご多忙の中ご面倒をお掛けしますが、アドバイスをよろしくお願い致します。
2012 年 10 月 24 日 2:21 PM #3439toemon
キーマスターうーん、おかしいですね
まず
ファイル(中略)wp-content/themes/xpress_default/blocks/my_newitem_block.php が見つかりません。
の(中略)の部分も含めて、実際のサーバー上のファイル位置にmy_newitem_block.phpが存在していることを確認ください。
またファイルパーミッションを確認いただき、Apacheが読み込み可能であることを確認ください。
上記で問題なければ
my_newitem_block.phpの内容を
<code><?php<br /> echo 'block test';<br /> ?></code>
とか、単純なものに変更して、確認ください。
2012 年 10 月 25 日 7:28 AM #3440匿名
ゲスト>toemon様
ご返信頂きありがとうございます。
(中略)の部分も含めて、実際のサーバー上のファイル位置にmy_newitem_block.phpが存在していることを確認ください。
またファイルパーミッションを確認いただき、Apacheが読み込み可能であることを確認ください。
上記で問題なければ
my_newitem_block.phpの内容を
<?php
echo ‘block test’;
?>
とか、単純なものに変更して、確認ください。
アドバイスにある通り、単純な内容にして再度
wp-content/themes/xpress_default/blocks
にアップロードしましたが、表示される内容に変化がありませんでした。
http://forum.xpressme.info/topic.php?id=164
のやり取りを参考に、xoops_trust_path/cache内にありました
(prefix)_enhanced_block(blockID).xml
と言うファイルがありましたので、削除して拡張ブロックが表示されている
ホームページをリロードすると、
block_test
と表示されました。
うまくいったので、改めて/my_newitem_block.phpの内容を
<code><?php query_posts('post_type=prmm&posts_per_page=5'); ?><br /> <?php if(have_posts()) : while (have_posts()) : the_post(); ?><br /> <a href="<?php the_permalink(); ?>" target="_blank"><?php the_title('<li>','</li>'); ?></a><br /> <?php endwhile; endif; ?></code>
に変更してアップロードし直しリロードしてみたところ
block_test
の表示のままでした。
もう一度(prefix)_enhanced_block(blockID).xml
を削除するとカスタム投稿のタイトルが表示された次第です。
キャッシュ(と読むのだと思います)が残る限り内容が変化ため
新しい投稿があっても、(prefix)_enhanced_block(blockID).xml
を都度削除しないと内容が更新されません。
何か拡張ブロックかその他の設定に不備があるのかもしれません。
XOOPS内のXpressMEのブロック管理にあります
拡張ブロックの設定画面では「キャッシュなし」を選択しています。
話題は飛びますが
カスタム投稿を2つ作成し、その2つを同じブロックに
新着として表示したい場合
<?php query_posts('post_type=fr&prmm&posts_per_page=5'); ?>
のように&で繋げるとよいでしょうか。
お手数ばかりお掛けして申し訳ございませんが、よろしくお願い致します。
2012 年 10 月 25 日 10:02 AM #3441匿名
ゲスト追記です。
拡張ブロックの内容が更新されない問題ですが、XOOPSのホームページより
一度XpressMEのモジュールへアクセスする事で更新されました。
お騒がせして、申し訳ございませんでした。
(何故そうなるのかは分からないです。)
2012 年 10 月 25 日 11:20 AM #3442toemon
キーマスターなるほど
ブロックを定義して
実際のサーバー上のファイル位置にmy_newitem_block.php
を転送前に、モジュールページにアクセスすると
ファイルが見つからない旨のメッセージを含むキャッシュができあがり、それが表示されてしまっていたようですね。
拡張ブロックの内容が更新されない問題ですが
についてはブロックのキャッシュを参照ください。
誰かがモジュールにアクセスしたり、投稿者が記事の投稿・編集を行えば更新されるので、実用上は問題ないと考えてるんですが ^^;
拡張ブロックのファイルmy_newitem_block.phpを変更して確認する前には、このキャッシュ更新条件を考慮に入れ一度モジュールページにアクセス後に確認するようにしてください。
次に
<?php query_posts(‘post_type=fr&prmm&posts_per_page=5’); ?>
の件はたぶんNGです。
query_postsについてはテンプレートタグ/query postsに詳しくあります。
それによると
<code><?php<br /> $args[post_type] = array( 'fr', 'prmm' );<br /> $args[posts_per_page] = 5;<br /> query_posts($args);<br /> ?></code>
のようしして、post_typeに配列で frとprmmを指定すればよいのではでしょうか? 未確認情報です。
* query_postsはメインループ用なので、ブロック側で使うにはテンプレートタグ/get postsのほうがよいでしょう。
2012 年 10 月 25 日 12:32 PM #3443匿名
ゲスト>toemon様
返信頂きありがとうございます。
誰かがモジュールにアクセスしたり、投稿者が記事の投稿・編集を行えば更新されるので、実用上は問題ないと考えてるんですが
了解です。
仕組み自体は相変わらずよく分かりませんが、そういうものなのだと理解でき
ほっとしました。
<?php
$args[post_type] = array( ‘fr’, ‘prmm’ );
$args[posts_per_page] = 5;
query_posts($args);
?>
ですが、このままではXpressMEモジュールにアクセスできない
(真っ白状態でエラーもありません)状態になるため
XpressMEのテーマに書いたソースを活用しました。
<?php query_posts(‘post_type=fr&prmm&posts_per_page=5’); ?>
の部分を
<code><?php<br /> global $wp_query;<br /> get_posts(array_merge(<br /> array(<br /> 'post_type' => array('fr', 'prmm') ),<br /> $wp_query->query<br /> ));<br /> ?></code>
としました。
記事の表示件数は、XpressME側の表示設定にて変更するようにします。
PHPの書き方も分からないため、あまり冒険できませんでした。
改善できそうな点などございましたら、アドバイス頂けると
幸いです。
ただ何故かこの書き方ですとカスタム投稿に加えて通常の投稿もリストアップ
されます。
運用する上で差しさわりは無いのですが、これまた何故通常の投稿も表示
されるのかは分かりません。
ひとまず、問題は解決しました。
お力添え頂き、本当にありがとうございます。
また壁にぶつかってしまった折には、よろしくお願い致します。
2012 年 10 月 25 日 2:32 PM #3444toemon
キーマスターとりあえず解決されたと言うことで、よかったです。
movie とhobbyの2つポストタイプのタイトルと、カスタムフィールド(テキストエリア)weatherの内容を5件表示という条件下で確認してみました。
やりかたは色々でしょうがとりあえず。
<code><?php<br /> $args= array(<br /> 'post_type' => array('movie','hobby'),<br /> 'posts_per_page' => 5<br /> );<br /> $lastposts = get_posts($args);<br /> foreach($lastposts as $lastpost){<br /> echo '<li>';<br /> echo '<a href="'. get_permalink($lastpost->ID). '" target="_blank">'<br /> . apply_filters( 'the_title' , $lastpost->post_title )<br /> . '</a>';<br /> echo '(' . get_post_meta($lastpost->ID, 'weather', true) . ')';<br /> echo '</li>';<br /> }<br /> ?></code>
みたいな感じです。
2012 年 11 月 2 日 12:32 PM #3445匿名
ゲスト>toemon様
ご多忙の中、たくさんのご助言を頂きありがとうございました。
返信が大幅に遅れましたことお詫びいたします。
申し訳ございませんでした。
<code><?php<br /> $args= array(<br /> 'post_type' => array('movie','hobby'),<br /> 'posts_per_page' => 5<br /> );<br /> $lastposts = get_posts($args);<br /> foreach($lastposts as $lastpost){<br /> echo '<li>';<br /> echo '<a href="'. get_permalink($lastpost->ID). '" target="_blank">'<br /> . apply_filters( 'the_title' , $lastpost->post_title )<br /> . '</a>';<br /> echo '(' . get_post_meta($lastpost->ID, 'weather', true) . ')';<br /> echo '</li>';<br /> }<br /> ?></code>
の方法も試してみましたが、私の運用環境ですと色々と問題が出ました。
・ページ全体のレイアウトが崩れる
・最新の1件のみ表示される
今の私のスキルでは原因究明に時間がかかります。
もう少しPHPを勉強してこちらのコードを元にビシっと表示できるように
精進していけたらと思います。
重ねて御礼申し上げます。
2013 年 12 月 13 日 10:01 AM #3446匿名
ゲストtoemon様、ご無沙汰しています。
今更ではございますが、色々な試行錯誤の結果、目標に近い表示
を得る事が出来ましたので、稚拙なコード(?)ではありますが
投稿いたします。
カスタムブロックについて
カスタム投稿は2種類「movie」と「hobby」
カスタムフィールドで必要なフィールド名は「weather」
として、XOOPSのトップページの中央部分に
タイトル
記事の一部分(200文字まで)
の形で表示できました。
<code><?php<br /> global $wp_query;<br /> get_posts(array_merge(<br /> array(<br /> 'post_type' => array('movie','hobby') ),<br /> $wp_query->query<br /> ));<br /> ?><br /> <br /> <?php if(have_posts()) : while (have_posts()) : the_post(); ?><br /> <br /> <div style="margin-bottom : 10px"><br /> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf(__('Permanent Link to %s', 'xpress'), the_title_attribute('echo=0')); ?>"><br /> <b><?php the_title(); ?></b> <!-- 記事タイトル(太字) --><br /> <br><br /> </a><br /> <div style="margin-left:20px;"><br /> <?php<br /> $pattern = '/(^.{200})(.+)/u'; <!-- 200文字制限 --><br /> $subject = post_custom('weather');<br /> $matches = array();<br /> preg_match($pattern, $subject , $matches);<br /> if ($matches[2] != '') {<br /> $out = $matches[1] . '';<br /> } else {<br /> $out = $subject;<br /> }<br /> echo($out);<br /> ?><br /> </div><br /> </div><br /> <?php endwhile; endif; ?></code>
本当にお世話になりました。
重ねて、感謝申し上げます。
-
投稿者投稿
- フォーラム「使い方全般」には新規投稿および返信を追加できません。