在循环中的帖子之间插入帖子(来自特定类别)

时间:2014-08-16 作者:stadisco

我想在WordPress循环中的帖子(如“赞助商”)之间添加一篇帖子(来自特定类别)。示例:

P P S
P P S P
P S P P

我怎样才能做到这一点?我是一个编码初学者,所以我不知道如何修改循环。有没有循环编码忍者可以提供解决方案?

请注意,下面是我的当前循环。它用于按价格或随机顺序对帖子进行排序:

指数php

<?php while (have_posts() ) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<?php  the_excerpt(); the_meta ();
endwhile; 

previous_posts_link();
next_posts_link();
?>
功能。php

function my_custom_query($query){
 if ( $query->is_home() && $query->is_main_query() ) {

  $sort= $_GET[\'sort\'];

  if($sort == "A"){
   $query->set( \'orderby\', \'rand\' );
   $query->set( \'posts_per_page\', \'2\' );
  }

  if($sort == "B"){
   $query->set( \'meta_key\', \'price\' );
   $query->set( \'orderby\', \'meta_value_num\' );
   $query->set( \'order\', \'DESC\' );
   $query->set( \'posts_per_page\', \'2\' );
  }
}
}

add_action( \'pre_get_posts\', \'my_custom_query\' );

Edit: Update

Birgire的插件有效!起初,我很难让插件在我的主题上工作。问题是我在索引中的循环中使用的这段代码。php(我使用它来调用自定义字段)。

<?php
    global $wp_query;
    $postid = $wp_query->post->ID;
    echo get_post_meta($postid, \'price\', true);
    wp_reset_query();
?>

1 个回复
最合适的回答,由SO网友:birgire 整理而成

自动赞助商发布注入器:

以下是一个基于my answer 对于问题:How to show Y number of custom posts after every X normal posts?

我希望它更有用一点here on Github, 但它可能会进一步完善(未来的工作)。

这个SponsorPostsInjector 类将帮助您使用过滤器将赞助商帖子自动注入主题the_post, loop_startloop_end.

激活插件并将以下示例添加到functions.php 开始注入的文件:

/**
 * Inject a sponsor post after the first post on the home page,
 * and then again for every third post within the main query.
 */

add_action( \'wp\', \'my_sponsor_injections\' );

function my_sponsor_injections()
{
    if( ! class_exists( \'SponsorPostsInjector\' ) ) return;

    // We want the sponsor posts injections only on the home page:
    if( ! is_home()  ) return;

    // Setup the injection:
    $injector = new SponsorPostsInjector( 
        array(
            \'items_before_each_inject\' => 3,
            \'items_per_inject\'         => 1,
            \'template_part\'            => \'content-sponsor\',
        ) 
    );

    // Setup the injection query:
    $injector->query(
        array(
            \'post_type\'  => \'sponsor\',
            \'tax_query\'  => array( 
                array(
                   \'taxonomy\' => \'country\',
                    \'terms\'   => \'sweden\',    
                    \'field\'   => \'slug\', 
                )
            )
        )
    );

    // Inject:
    $injector->inject();
}
我们在那里创建了content-sponsor.php 我们当前主题目录中的模板文件,用于控制注入赞助商帖子的布局。

其想法是,这也应该考虑分页。

希望您可以根据自己的需要进行调整。

结束

相关推荐

使用PRE_GET_POSTS排除具有特定标记的自定义发布类型

我有一个归档页面,其中列出了一个名为“事件”的自定义帖子类型。我有标记为“regular”的事件帖子(标记的id为53)。我想把这些排除在外。我尝试使用pre\\u get\\u posts,然后使用$query->set(\'tag\\uu not\\u in\',array(\'53\')),但我认为tag\\uu not\\u in不能用于自定义post类型。有没有办法解决这个问题?add_action( \'pre_get_posts\', \'exclude_regular_tag\');