2016-05-10 7 views
0

私はWordPress内にカスタムポストタイプを作成しました。このカスタムポストタイプでは、プロダクトレンタルの価格を入力できるカスタムメタボックスがあります1日に1回または週に1回(2つのメタボックスがあります)。WordpressのPHPは投稿ごとにポストリスティングページにカスタムメタ情報を表示できません

カスタムポストタイプのすべての投稿を表示するページにこれらの価格を表示するとします。私のテーマには、メタ情報を表示したいポストのタイトルの直後にアクションフックがあります。

私はこの行動に取り掛かりましたが、私の情報は最初の投稿にのみ表示されています。

function add_prices_to_products() { 
    global $post; 
    $price_per_day = get_post_meta($post->ID, "_per_day", true); 
    $price_per_week = get_post_meta($post->ID, "_per_week", true); 
    echo '<span class="sl_product_price per_day">£' . $price_per_day . '/day</span>'; 
    echo '<span class="sl_product_price per_week">£' . $price_per_week . '/wk</span>'; 
} 
add_action('layers_after_list_post_title', 'add_prices_to_products'); 

、誰もがそれだけではなく、それらのすべてに最初のポストに追加されている理由を教えてもらえます(私がいることを確認することができます:ここでは

は、私はメタ情報をエコーするために使用していたコードですメタ情報が正しく保存されていますか?)ここで

は、テーマ(index.phpを)からのページのコードです:

<?php get_header(); ?> 

<div class="container content-main archive clearfix"> 
<?php get_sidebar('left'); ?> 

<?php if(have_posts()) : ?> 
    <div <?php layers_center_column_class(); ?>> 
     <?php while(have_posts()) : the_post(); ?> 
      <?php get_template_part('partials/content' , 'list'); ?> 
     <?php endwhile; // while has_post(); ?> 
     <?php the_posts_pagination(); ?> 
    </div> 
<?php endif; // if has_post() ?> 

<?php get_sidebar('right'); ?> 
</div> 
<?php get_footer(); 

それはフックが含まれているものですファイルコンテンツ-list.phpを参照しています。

global $post, $layers_post_meta_to_display; ?> 
<article id="post-<?php the_ID(); ?>" <?php post_class('push-bottom-large'); ?>> 
<?php do_action('layers_before_list_post_title'); ?> 
<header class="section-title large"> 
    <?php do_action('layers_before_list_title'); ?> 
    <h1 class="heading"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> 
    <?php do_action('layers_after_list_title'); ?> 
</header> 
<?php do_action('layers_after_list_post_title'); ?> 

<?php /** 
* Display the Featured Thumbnail 
*/ 
echo layers_post_featured_media(array('postid' => get_the_ID(), 'wrap_class' => 'thumbnail push-bottom', 'size' => 'large')); ?> 

<?php if('' != get_the_excerpt() || '' != get_the_content()) { ?> 
    <?php do_action('layers_before_list_post_content'); ?> 
    <?php do_action('layers_list_post_content'); ?> 
    <?php do_action('layers_after_list_post_content'); ?> 
<?php } ?> 

<?php do_action('layers_before_list_post_meta'); ?> 
    <?php /** 
    * Display the Post Meta 
    */ 
    layers_post_meta(get_the_ID(), NULL, 'footer', 'meta-info push-bottom'); ?> 
<?php do_action('layers_after_list_post_meta'); ?> 

<?php do_action('layers_before_list_read_more'); ?> 
<?php do_action('layers_list_read_more'); ?> 
<?php do_action('layers_after_list_read_more'); ?> 
</article> 

それはまた、私は、リスト内の各ポストの上にプレーンテキストをエコーすることができています「the_post」フックを使用したプラグイン

UPDATE

から引っ掛けていますことを言及する価値がありますしかし、私はまだエコーするために私のメタボックス情報を得ることができません。ここで私が今使っているものです:...あなたはこのような何かをしようと、ループ内の各項目にフックする必要が

add_action('the_post', 'my_custom_loop_start'); 

function my_custom_loop_start($query) 
{ 
echo 'hello'; 
    add_action('loop_end', 'my_custom_loop_end'); 
} 

function my_custom_loop_end() 
{ 
remove_action('layers_after_list_post_title', 'add_prices_to_products'); 
} 
+1

これらのページが表示されると予想されるページ(フック付き)のコードを表示できますか?完全な推測では、1ページに投稿のリストを表示しています。フックはタイトルの後に一度だけ呼び出されます。あなたの投稿を出力しているループ中ではありません。もっと見ることができれば分かりやすくなります:) –

+0

こんにちは@SimonPollard - うん。私はあなたが言うことが正しいと思いますが、プラグインからコーディングする際の問題を解決する方法がわかりません –

+0

$ postをチェックしました。print_r($ post)を使ってチェックしてください。 – Savan

答えて

0

// Hook into the main loop  
add_action('loop_start', 'my_custom_loop_start'); 

    // Add two filters in that loop - your existing function and one to clear it out 
    function my_custom_loop_start($query) 
    { 
     if($query->is_main_query()) 
     { 
      add_filter('layers_after_list_post_title', 'add_prices_to_products'); 
      add_action('loop_end', 'my_custom_loop_end'); 
     } 
    } 

    // This will just remove your action once each loop is done so you get the correct data for each loop 
    function my_custom_loop_end() 
    { 
     remove_action('layers_after_list_post_title', 'add_prices_to_products'); 
    } 

あなたは正しく動作するために、これを微調整する必要があるかもしれませんしかし、ロジックは、各ループに関数を追加して実行してから削除します。

+0

こんにちは@SimonPollard、これをありがとう - それは私を助けている。私は私の質問を更新しました。 "loop_start"の代わりに "the_post"というアクションフックを使うほうがうまく動作し、各投稿のテキストをエコーアウトすることができます。しかし、私はまだ私のメタデータをエコーアウトするためにそれを使用することはできません。それ以上の考え? –

+0

繰り返しコードブロック内にglobal $ postを使用して何が起こったのかをエコーアウトしたら?それは同じ番号(または単にnull)として変更されたり、そのまま残りますか? –

関連する問題