在现有页面中查询和显示自定义帖子类型

时间:2019-11-07 作者:Ricou

我正在创建一个WordPress网站Avada theme, 我需要使用Custom Post Type.

为此,我安装了扩展CPT UI &;ACF Pro 这使我可以创建自定义的帖子类型(例如称为“Movie”),其字段很好(例如:“releaseDate”、“minimumAgeFor”)。

我的愿望是能够集成到现有页面中(使用Fusion Builder 由Avada主题提供),这是一个显示这些电影列表的部分,可以使布局良好(flexbox…)。

我的问题是,如何最干净地在现有页面中集成PHP代码,以便搜索电影并按需显示它们?

我了解到可以定义自己的页面来列出CPT,但我希望在现有页面中显示它们。

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

您可以创建一个短代码,并将其添加到您想要的任何页面中。此代码将注册您的自定义短代码:

add_action( \'init\', \'register_custom_shortcodes\' );

function register_custom_shortcodes(){
    add_shortcode( \'my-custom-shortcode\', \'display_movies\' );
}
此代码将负责在放置快捷码的任何位置显示的内容:

function display_movies(){

   ob_start();

   //Your code here to display your custom post type posts

   return ob_get_clean();

}
您可以将上述函数放置到您的函数中。php

然后在函数display\\u movies()中,可以运行WP\\u查询来显示帖子。您可以在此处阅读WP\\U Query采用的所有参数:https://developer.wordpress.org/reference/classes/wp_query/

显示自定义帖子类型帖子的示例代码如下:

$args = array(
    \'posts_per_page\'    => 10, //Number of Posts
    \'post_type\'         => \'movie\', //Replace with you custom post type slug
    \'post_status\'       => \'publish\',
);


// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {

    echo \'<div class="movies-wrapper">\';

    while ( $the_query->have_posts() ) {

        $the_query->the_post();
        ?>

        <div class="movie-item">

          <?php the_title(); ?>

          <?php

              //Maybe display a custom field
             echo get_post_meta( get_the_ID(), \'your_custom_meta_key\', true );

           ?>

        </div>
        <?php
    }

    echo \'</div>\';

} 
else {
    // no posts found
}

// Restore original Post Data
// This code is important do not forget to place it
wp_reset_postdata();
wp_reset_query()
您可以将上述代码放在display\\u movies()函数中。

创建快捷码后,您可以将其放置在任何页面上,如下所示:

[my-custom-shortcode][/my-custom-shortcode]
至于搜索功能,它变得有点复杂。如果需要AJAX搜索,这取决于可能要使用的过滤器。在大多数情况下,您仍将使用WP\\u查询来实现搜索功能。

相关推荐