如何从插件创建自定义帖子类型的归档文件?

时间:2013-02-25 作者:Gazillion

所以我正在创建一个插件来创建列出出售公寓的建筑物。做到这一点最简单的方法就是为建筑创建一个自定义的帖子类型,然后创建列表,但我现在仍停留在如何在存档中显示它们上。我在开发主题时也做过类似的事情,我只想创建一个归档文件-my\\u post\\u类型。php和single-my\\u post\\u类型。php,但我不知道如何预测如何开发主题。

我找到了一个answer on stack overflow 这允许您劫持所选模板,但我担心模板文件可能不仅仅是get\\u header()和the\\u content()等等。。。

这类事情的最佳实践是什么?我是否只需要抓取get\\u template\\u part\\u内容并将其替换为自定义循环?或者像上面的答案那样劫持所选模板,并希望得到最好的结果?

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

在插件中包含模板文件。我把我的贴在/插件/模板上。

您需要挂接到该模板的模板位置:

add_filter(\'archive_template\', \'yourplugin_get_custom_archive_template\');

function yourplugin_get_custom_archive_template($template) {
    global $wp_query;
    if (is_post_type_archive(\'yourCPT\')) {
        $templates[] = \'archive-yourCPT.php\';
        $template = yourplugin_locate_plugin_template($templates);
    }
    return $template;
}
冲洗并对要实现的每个模板(单个、分类法等)进行适当的检查,然后重复操作。

function yourplugin_locate_plugin_template($template_names, $load = false, $require_once = true ) {
    if (!is_array($template_names)) {
        return \'\';
    }
    $located = \'\';  
    $this_plugin_dir = WP_PLUGIN_DIR . \'/\' . str_replace( basename(__FILE__), "", plugin_basename(__FILE__));
    foreach ( $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . \'/\' . $template_name)) {
            $located = STYLESHEETPATH . \'/\' . $template_name;
            break;
        } elseif ( file_exists(TEMPLATEPATH . \'/\' . $template_name) ) {
            $located = TEMPLATEPATH . \'/\' . $template_name;
            break;
        } elseif ( file_exists( $this_plugin_dir . \'/templates/\' . $template_name) ) {
            $located =  $this_plugin_dir . \'/templates/\' . $template_name;
            break;
        }
    }
    if ( $load && $located != \'\' ) {
        load_template( $located, $require_once );
    }
    return $located;
}
这样做意味着WP将首先在主题中查找模板,但如果在主题中找不到模板,则会返回插件的模板文件夹。如果用户想要修改模板以适应其主题,他们只需将其复制到主题文件夹中即可。

如果你真的想聪明一点,你可以强制检查他们的主题文件夹中的模板,如果他们使用插件的模板副本,可以加载一些默认样式:

add_action(\'switch_theme\', \'yourplugin_theme_check\');
add_action(\'wp_enqueue_scripts\', \'yourplugin_css\');


function yourplugin_css() {
    if(get_option(\'yourplugin-own-theme\') != true && !is_admin()) {
    wp_enqueue_style(\'yourplugin-styles\', plugins_url(\'/css/yourplugin.css\', __FILE__));
    }
}

function yourplugin_theme_check() {
    if(locate_template(\'archive-yourCPT.php\') != \'\' && locate_template(\'single-yourCPT.php\') != \'\' && locate_template(\'taxonomy-yourTaxonomy.php\') != \'\' && locate_template(\'taxonomy-anotherTaxonomy.php\') != \'\') {
    update_option(\'yourplugin-own-theme\', true);
     }   
     else {
     update_option(\'yourplugin-own-theme\', false);
     }
}

结束

相关推荐

如何从插件创建自定义帖子类型的归档文件? - 小码农CODE - 行之有效找到问题解决它

如何从插件创建自定义帖子类型的归档文件?

时间:2013-02-25 作者:Gazillion

所以我正在创建一个插件来创建列出出售公寓的建筑物。做到这一点最简单的方法就是为建筑创建一个自定义的帖子类型,然后创建列表,但我现在仍停留在如何在存档中显示它们上。我在开发主题时也做过类似的事情,我只想创建一个归档文件-my\\u post\\u类型。php和single-my\\u post\\u类型。php,但我不知道如何预测如何开发主题。

我找到了一个answer on stack overflow 这允许您劫持所选模板,但我担心模板文件可能不仅仅是get\\u header()和the\\u content()等等。。。

这类事情的最佳实践是什么?我是否只需要抓取get\\u template\\u part\\u内容并将其替换为自定义循环?或者像上面的答案那样劫持所选模板,并希望得到最好的结果?

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

在插件中包含模板文件。我把我的贴在/插件/模板上。

您需要挂接到该模板的模板位置:

add_filter(\'archive_template\', \'yourplugin_get_custom_archive_template\');

function yourplugin_get_custom_archive_template($template) {
    global $wp_query;
    if (is_post_type_archive(\'yourCPT\')) {
        $templates[] = \'archive-yourCPT.php\';
        $template = yourplugin_locate_plugin_template($templates);
    }
    return $template;
}
冲洗并对要实现的每个模板(单个、分类法等)进行适当的检查,然后重复操作。

function yourplugin_locate_plugin_template($template_names, $load = false, $require_once = true ) {
    if (!is_array($template_names)) {
        return \'\';
    }
    $located = \'\';  
    $this_plugin_dir = WP_PLUGIN_DIR . \'/\' . str_replace( basename(__FILE__), "", plugin_basename(__FILE__));
    foreach ( $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . \'/\' . $template_name)) {
            $located = STYLESHEETPATH . \'/\' . $template_name;
            break;
        } elseif ( file_exists(TEMPLATEPATH . \'/\' . $template_name) ) {
            $located = TEMPLATEPATH . \'/\' . $template_name;
            break;
        } elseif ( file_exists( $this_plugin_dir . \'/templates/\' . $template_name) ) {
            $located =  $this_plugin_dir . \'/templates/\' . $template_name;
            break;
        }
    }
    if ( $load && $located != \'\' ) {
        load_template( $located, $require_once );
    }
    return $located;
}
这样做意味着WP将首先在主题中查找模板,但如果在主题中找不到模板,则会返回插件的模板文件夹。如果用户想要修改模板以适应其主题,他们只需将其复制到主题文件夹中即可。

如果你真的想聪明一点,你可以强制检查他们的主题文件夹中的模板,如果他们使用插件的模板副本,可以加载一些默认样式:

add_action(\'switch_theme\', \'yourplugin_theme_check\');
add_action(\'wp_enqueue_scripts\', \'yourplugin_css\');


function yourplugin_css() {
    if(get_option(\'yourplugin-own-theme\') != true && !is_admin()) {
    wp_enqueue_style(\'yourplugin-styles\', plugins_url(\'/css/yourplugin.css\', __FILE__));
    }
}

function yourplugin_theme_check() {
    if(locate_template(\'archive-yourCPT.php\') != \'\' && locate_template(\'single-yourCPT.php\') != \'\' && locate_template(\'taxonomy-yourTaxonomy.php\') != \'\' && locate_template(\'taxonomy-anotherTaxonomy.php\') != \'\') {
    update_option(\'yourplugin-own-theme\', true);
     }   
     else {
     update_option(\'yourplugin-own-theme\', false);
     }
}

相关推荐