如何将展示库嵌入到自定义帖子类型

时间:2014-07-29 作者:terminator

我有一个自定义的“事件”帖子。每篇文章都附有一个图库。在厨房主页上,我展示了每篇文章的特色图片。现在,我希望当用户单击此特色图像时,他应该被带到一个新模板,在该模板中,使用get\\u post\\u gallery()显示来自帖子嵌入库的图像。我不能使用permalink,因为它会带我去参加“单一活动”。

我该怎么做?请帮帮我。

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

我认为一个很好的可能性是为库的permalink添加一个端点,然后检查模板以包含在template_include 过滤器:

add_action(\'init\', function() {
    add_rewrite_endpoint( \'gallery\', EP_PERMALINK );
});
add_filter( \'template_include\', function($template) {
    if ( get_query_var( \'gallery\' ) ) {
        return get_stylesheet_directory() . \'/single-event-gallery.php\';
    }
    return $template;
});
现在,创建文件single-event-gallery.php 并将其放在您的主题文件夹中。您可以复制single-event.php 替换the_content() 使用:

if ( get_post_gallery() ) {
     echo get_post_gallery();
} else {
     echo "No gallery found";
}
您必须使用URL,如mysite.com/event/a-event-post/gallery/1 (“1”是随机值,“gallery/1”之后的任何值都有效)。

我认为这是一个简单、快速、简单的解决方案,但有以下问题:

它将端点重写规则添加到所有永久链接中,之后需要一些值gallery 在URL中,为了避免这些问题,我们可以仅为“event”post类型定义自定义重写规则,并定义要在中使用的自定义查询变量template_include fiter公司。

add_action( \'init\', \'cyb_event_gallery_rewrite_rule\' );
function cyb_event_gallery_rewrite_rule() {
    add_rewrite_rule( \'^event/([^/]+)/gallery/?$\', \'index.php?event=$matches[1]&gallery=yes\', \'top\' );
}

add_filter( \'query_vars\', \'cyb_register_gallery_query_var\' );
function cyb_register_gallery_query_var( $vars ) {
    $vars[] = \'gallery\';
    return $vars;
}

add_filter( \'template_include\', function($template) {
    if ( get_query_var( \'gallery\' ) ) {
        return get_stylesheet_directory() . \'/single-event-gallery.php\';
    }
    return $template;
});
现在您可以使用URL,如mysite.com/event/a-event-post/gallery/. 您可以在父帖子的循环内生成URL,方法如下(或类似方法,取决于您的永久链接设置):

$gallery_url = get_permalink() . \'gallery/\';
注意:应用此代码后,需要刷新站点的重写规则。您可以访问permalinks设置页面并单击“保存”。

结束

相关推荐

Custom gallery in wp3.5

我使用了我在3.4中为一个光滑的小自定义库找到的教程,但升级到3.5后,它就不再工作了。我仍在努力学习php,但似乎无法再次使用它,因为我要么出错,要么什么都没有。无论如何,在升级之前,用户所要做的就是点击“添加媒体”,上传他想在帖子中显示的任何图像[在本例中是产品],设置图像的顺序,第一个图像是顶部/全尺寸图像,然后在文本字段中键入他的描述,当他点击“提交”时,将以上所有内容以良好的格式显示出来,如下所示:single.php xxxxxxxxxxxxxxxxxxxxxxxxxxxxx