如何在不访问主题的情况下为自定义帖子类型提供正确的设计

时间:2017-12-23 作者:DannyBoy

我正在尝试为WordPress创建一个音乐播放器插件。使用自定义帖子类型和自定义字段,我可以制作带有URL和插图的帖子。

播放器基于jQuery工作,一旦URL和图片被提供给它,它将使用CSS样式创建布局。但是,由于它将只是一个插件,而不是一个主题,我如何将帖子数据连接到插件?这个想法是,当URL和图片被给出时,玩家的风格将使用这些信息显示在网站上。

看来我必须创造这样的主题single-posttype.php 并插入正确的html和css。但如果它只是一个插件而不是一个主题呢?通常的解决方案是什么?

1 个回复
SO网友:user3135691

假设您的自定义帖子类型是“歌曲”,我想您需要的是如下内容:

首先,允许主题为您的自定义帖子类型提供一个设计/模板文件,如果WordPress找不到,请返回您在插件文件夹中提供的设计。

<?php

    // Template Logic:
   function mp3_player_design_init_template_logic($original_template) {
       // Check Theme Template or Plugin Template for archive-songs.php
       if(is_post_type_archive(\'songs\') || (is_search() && $_GET[\'post_type\'] === \'songs\')) {
           if(file_exists(get_template_directory_uri() . \'/archive-songs.php\')) {
               return get_template_directory_uri() . \'/archive-songs.php\';
           } else {
               return plugin_dir_path(__FILE__) . \'templates/archive-songs.php\';
           } // Check for single page
        } elseif(is_singular(\'songs\')) {
            if(file_exists(get_template_directory_uri() . \'/single-songs.php\')) {
        return get_template_directory_uri() . \'/single-songs.php\';
    } else {
        return plugin_dir_path(__FILE__) . \'templates/single-songs.php\';
        }
    }

    return $original_template;
}
add_action(\'template_include\', \'mp3_player_design_init_template_logic\');
我们向WordPress“添加一个操作”,它使用/可以操作挂钩“template\\u include”。这个动作挂钩接受一个参数($original\\u template),然后通过一些逻辑来确定要使用哪个模板文件。

存档歌曲。php是将所有歌曲/流/播放列表作为一个整体逐一列出的文件。

该文件的逻辑如下:

<?php 
    // Query Arguments, grab all data (up to 30 per page)
    $song_args = array(
        \'post_type\' => \'songs\',
        \'posts_per_page\' => \'30\',
        \'orderby\' => \'name\',
        \'order\'=>\'ASC\'
    );
    $loop = new WP_Query($fsongs_args);
    // now, loop over the result array and build your html design
    // You could also use the WordPress Options/settings api to get some colors or layout options in order to make your design changable by the user
    while ( $loop->have_posts() ) : $loop->the_post();
         // Get song Meta Data
        $slogan = get_post_meta(get_the_ID(), \'slogan\', true);
        $subtext = get_post_meta(get_the_ID(), \'subtext\', true);

   // Some card design with bootstrap for example
   // Start song card
    $html .= \'<div class="col-xs-12 col-sm-6 col-md-4 song-cards" id="song-id-\'.get_the_ID().\'">\';
    $html .= \'<div class="song-card">\';
        $html .= \'<h3>\'.get_the_title().\'</h3>\';
        $html .= $subtext;
        $html .= $slogan;
     $html .= \'</div>\';
    $html .= \'</div>\';
   endwhile;
   // spit out/echo the html design into your document body
   echo $html;
   // Reset the WordPress query to avoid funny results in the next query..
   wp_reset_query();
所有这些代码都会进入主插件文件。另外,请注意,文件,存档歌曲。php和单曲。php位于名为“模板”的子文件夹中。

请记住,这只是一个进入黑暗的建议。正如我在上面所写的,有很多方法可以实现设计自适应。我也不得不承认,我不完全理解你所说的“艺术品”是什么意思。

对我来说,这是一张CD或LP的旧专辑封面,与插件或主题的音乐播放器布局设计无关。

如果你能更好地解释一下你的意思,那会很有帮助的。

然而,我希望这能有所帮助。如果你有任何问题,请告诉我。

结束

相关推荐

Virtual Pages plugins

我很难让插件正常工作Virtual Pages (WordPress插件可简化虚拟页面的创建)我确实进行了编辑,根据查询创建了一个循环。add_action( \'gm_virtual_pages\', function( $controller ) { /* Creating virtuals pages for companies */ $args = array( \'post_type\' => array(\'companies\',), \'post_status\'