自定义帖子类型以覆盖插件目录中主题的css和html?

时间:2011-02-07 作者:Jared

我有一个插件,可以创建一个名为挤压页面的自定义帖子类型。它有各种各样的短代码,用户可以输入来创建一个压缩页面,但我不知道如何才能让压缩页面具有定制设计,与主页完全不同。

这可能吗?如果是,如何做到?

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

下面的代码检索当前显示内容的自定义帖子类型,然后决定是否打印样式表。一切都取决于您的页面名称。你也可以var_dump($ctp_obj_name);printr($ctp_obj_name); 然后查看自定义post类型对象还提供了什么,并决定使用什么来代替名称。

您的函数中应该包含以下内容。php或其中包含的某些文件:

add_action( \'init\', \'print_squeeze_style\' );
function print_squeeze_style() {
    define( \'YOUR_PATH\', get_bloginfo(\'stylesheetpath\').\'/squeeze_css_dir/\' ); // define css folder for squeeze here
    $post_type = \'your_custom_post_type\'; // define custom post type name here

    // ID of post type currently displayed 
    $ctp_ID = get_the_ID();
        // retrieve the whole ctp object of the current "post"
        $ctp_obj = get_post_type( $ctp_ID );
            $ctp_obj_name = $ctp_obj->name; // get name
            $ctp_obj_type = $post->post_type; // type

    // file name depending on Custom Post Type Page Name
    if ( $ctp_obj_name == \'page name A\' ) {
        $file = \'filename_a.css\';
    }
    elseif ( $ctp_obj_name == \'page name B\' ) {
        $file = \'filename_b.css\';
    }
    else {
        $file = \'filename_default.css\';
    }

    // Register the stylesheet for printing
    if ( post_type_exists( $post_type ) )
        wp_register_style( \'squeeze-css\', YOUR_PATH.$file, false, \'0.0\', \'screen\' );


    // print styles depending on Custom Post Type Page Name
    // Then output/print style in head
    if ( $ctp_obj_type == $post_type ) {
        add_action( \'wp_head\', wp_print_styles( \'squeeze-css\' ) );
    }
}
如下文所述(请也更新之前的答案),您需要在body\\u class()函数输出上使用一个过滤器来执行以下操作body.squeeze div.wrapper div.post .some_element_class

add_filter( \'body_class\', \'body_class_for_squeeze\' );
function body_class_for_squeeze( $classes ) {
    $post_type = \'your_custom_post_type\'; // define custom post type name here
    // ID of post type currently displayed 
    $ctp_ID = get_the_ID();
    // retrieve the whole ctp object of the current "post"
    $ctp_obj = get_post_type( $ctp_ID );
        $ctp_obj_name = $ctp_obj->name; // get name
        $ctp_obj_type = $post->post_type; // type

        // abort if we\'re not on a squeeze page
        if ( $ctp_obj_type !== $post_type )
            return;
            $classes[] .= \'squeeze\';

    return $classes;
}

SO网友:Rarst

在主题中使用本机single-{post_type}.php template in hierarchy.

有了插件,这就更加棘手了。我的想法是尝试过滤single_template 钩住get_single_template() 插件文件夹中模板文件的路径(别忘了检查帖子类型)。

SO网友:Norcross

最好是为挤压页面创建一个辅助CSS表。然后,包括一个添加新body类的函数,并在此基础上构建CSS。

结束

相关推荐