2

使用自定义帖子类型创建自定义 wordpress 主题:

我添加了自定义帖子类型(通过插件自定义帖子 UI)和自定义字段(通过高级自定义字段)。自定义帖子正确显示在创建的新模板页面 (single-custom.php) 中。因此,各个自定义帖子完全按照我的意愿显示。

然而,问题是在主页上只显示标题。

我做了什么:

1) 我添加了以下代码,以允许通过 functions.php 将新的帖子类型拉入主页/博客提要的提要中:

add_filter( 'pre_get_posts', 'my_get_posts' );

function my_get_posts( $query ) {

if ( ( is_home() && $query->is_main_query() ) || is_feed() )
    $query->set( 'post_type', array( 'post', 'custom' ) );

return $query;

感谢贾斯汀·塔德洛克(Justin Tadlock )

2) 我创建了一个自定义内容页面 content-custom.php 并修改了索引循环以调用该模板:

<?php if ( have_posts() ) : ?>

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

        <?php
           get_template_part( 'content', 'custom', get_post_format() );
        ?>

    <?php endwhile; ?>

我的主页仍然只显示我的自定义帖子的标题,而不是我希望的全部内容。问题与 content-custom.php 中 the_content 的调用有关,但我找不到问题,因为我仍在熟悉 wordpress。content-custom.php 的相关代码如下:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
            //The title below is displayed correctly
    <h1 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h1>  

</header><!-- .entry-header -->

    // The problem begins below. The entry-content div is created but is empty and is not pulling any content from the custom post through the_content call.

<div class="entry-content">
    <?php the_content(); ?>
</div><!-- .entry-content -->
4

2 回答 2

1

默认情况下,get_posts 无法获取一些与帖子相关的数据,例如通过 发布内容the_content()或数字 ID。这可以通过调用内部函数来解决setup_postdata(),其中$post数组作为其参数:

<?php
$args = array( 'posts_per_page' => 3 );
$lastposts = get_posts( $args );
foreach ( $lastposts as $post ) :
  setup_postdata( $post ); ?>
    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <?php the_content(); ?>
<?php endforeach; 
wp_reset_postdata();
?>

请参阅访问所有帖子数据

于 2015-01-05T02:43:39.360 回答
1

我不熟悉您提到的插件,但请检查自定义帖子类型是否真的有“内容”字段。

如果“内容”是一个自定义字段,你必须得到它

get_post_meta($post->ID, 'field name', true);

我有一个类似的问题,并通过在模板中添加以下内容来解决。您也可以尝试添加到您的 content-custom.php:

<?php wp_reset_postdata();  ?>
于 2013-08-14T04:05:53.163 回答