XPressME Integration Kit

フォーラム

カスタム投稿

このトピックには10件の返信が含まれ、2人の参加者がいます。5 年、 11 ヶ月前 匿名 さんが最後の更新を行いました。

11件の投稿を表示中 - 1 - 11件目 (全11件中)
  • 投稿者
    投稿
  • #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

    #3437

    toemon
    キーマスター

    うたたねさんこんにちは

    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]を選択しています。

    #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 が見つかりません。

    と表示され、記事のタイトルが表示されません。

    ご多忙の中ご面倒をお掛けしますが、アドバイスをよろしくお願い致します。

    #3439

    toemon
    キーマスター

    うーん、おかしいですね

    まず

    ファイル(中略)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>

    とか、単純なものに変更して、確認ください。

    #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'); ?>

    のように&で繋げるとよいでしょうか。

    お手数ばかりお掛けして申し訳ございませんが、よろしくお願い致します。

    #3441

    匿名

    追記です。

    拡張ブロックの内容が更新されない問題ですが、XOOPSのホームページより

    一度XpressMEのモジュールへアクセスする事で更新されました。

    お騒がせして、申し訳ございませんでした。

    (何故そうなるのかは分からないです。)

    #3442

    toemon
    キーマスター

    なるほど

    ブロックを定義して

    実際のサーバー上のファイル位置に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のほうがよいでしょう。

    #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の書き方も分からないため、あまり冒険できませんでした。

    改善できそうな点などございましたら、アドバイス頂けると

    幸いです。

    ただ何故かこの書き方ですとカスタム投稿に加えて通常の投稿もリストアップ

    されます。

    運用する上で差しさわりは無いのですが、これまた何故通常の投稿も表示

    されるのかは分かりません。

    ひとまず、問題は解決しました。

    お力添え頂き、本当にありがとうございます。

    また壁にぶつかってしまった折には、よろしくお願い致します。

    #3444

    toemon
    キーマスター

    とりあえず解決されたと言うことで、よかったです。

    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>

    みたいな感じです。

    #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を勉強してこちらのコードを元にビシっと表示できるように

    精進していけたらと思います。

    重ねて御礼申し上げます。

    #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>

    本当にお世話になりました。

    重ねて、感謝申し上げます。

11件の投稿を表示中 - 1 - 11件目 (全11件中)

このトピックに返信するにはログインが必要です。