问题查询特定的自定义帖子类型

时间:2015-06-19 05:47:14

标签: php custom-post-type wordpress

我刚刚创建了这个网站,有一些自定义帖子类型,一切都运行正常,现在我必须添加一个新的自定义帖子类型,并使用这个新的自定义帖子类型和'帖子&#做了一个循环39;发布类型。

类似的东西:

$args = array (
    'post_type' => array( 'post', 'newsletter' ),
        'posts_per_page' => -1,
        'order'     => 'DESC'
);

出于某种原因,这不起作用......

我有其他帖子类型的相同数组,并且工作正常。

$args = array (
    'post_type' => array( 'post', 'events' ),
        'posts_per_page' => -1,
        'order'     => 'DESC'
);

现在这里有一个奇怪的部分:

如果我发布了' - '事件' (事件是旧的自定义帖子类型)它工作,显示两个帖子自定义帖子类型, 如果我发布了' - ' newsletter' (简报是新的自定义帖子类型)它只显示帖子, 如果我有'事件' - ' newsletter'它只显示事件,

如果我创建新的自定义帖子类型' newsletter2', 如果我有' newsletter' - ' newsletter2'它有效,显示两种自定义帖子类型,但如果我发布了' - ' newsletter2'它只显示' post'

所以...看起来旧的自定义帖子类型由于某种原因不能使用新的自定义帖子类型......任何想法???

感谢!!!

以下是'简报' 自定义帖子类型(顺便提一下,我的所有自定义帖子类型都完全相同,除了他们有自己的名字而不是简报#39;活动','人物',' newsletter2')

function custom_post_newsletter() {

$labels = array(
    'name'                => __( 'Newsletter' ),
    'singular_name'       => __( 'New Newsletter' )
);
$args = array(
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'thumbnail', ),
    'taxonomies'          => array( '', 'post_tag' ),
    'hierarchical'        => false,
    'menu_icon'           => 'dashicons-format-aside',
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 7,
    'can_export'          => true,
    'has_archive'         => false,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'capability_type'     => 'page',
    'rewrite' => array( 'slug' => _x('newsletter', 'URL Slug', 'theTheme')),
);
register_post_type( 'newsletter', $args );

}

add_action( 'init', 'custom_post_newsletter', 0 );

这是循环:

    $args = array (
                'post_type' => array( 'newsletter', 'post' ),
                'posts_per_page' => -1,
                'order'     => 'DESC',
                'post_status' => 'any',
            );
    $loop = new WP_Query( $args );


    if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post();?>

     <li><? the_title(); ?></li> //here only shows post post_type posts.
    <?php   
    // end loop

    endwhile;
    endif;
    wp_reset_query(); ?>

2 个答案:

答案 0 :(得分:2)

即使有赏金,也很难正确回答你的问题。

对于整个场景,真正非常有趣的是您的代码始终保持不变,因此您的问题与用于注册帖子类型的代码无关。

让我们看看可能的问题和默认值

  • WP_Query如果您使用的是get_posts,则保持不变,get_posts使用WP_Query )设置预设值如果没有明确设置,默认情况下会完全排除某些参数。让我们看看可能影响结果的两个:

    • post_type - &gt;默认post

    • post_status - &gt;已注销用户的默认publish,已登录用户的publishprivate

由于您已将post_type设置为包含您的帖子类型,因此我可以想到的唯一其他选项(上述内容)是newsletter帖子类型的帖子未发布或您通过插件或自定义代码为其分配自定义帖子状态。

你需要探索这种可能性。尝试将'post_status' => 'any'添加到您的自定义查询中,看看您是否从newsletter帖子类型返回了帖子。如果您为帖子分配了自定义帖子状态,我不完全确定这是否有用。

除此之外,我真的没有任何关于这个问题的建议。

答案 1 :(得分:0)

也许你有一个主题和/或插件已经创建了一个&#39;时事通讯&#39; CPT?

您可以使用&#34;获取帖子类型&#34;查看您目前拥有的所有帖子类型:

https://codex.wordpress.org/Function_Reference/get_post_types