我没有安装您的滑块,因此无法对此进行测试,但您需要以下内容:
function get_parent_page() {
if (is_singular()) {
global $wpdb,$post;
if (isset($post->ID)) {
$slide = $wpdb->get_var("SELECT DISTINCT slide_id FROM {$wpdb->prefix}smooth_slider WHERE post_id = {$post->ID} LIMIT 1");
if (!empty($parent)) {
$parent = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_status = \'publish\' AND post_type = \'post\' AND post_content LIKE \\"%[smoothslider id=\'".$slide."\']%\\"");
if (!empty($parent)) {
wp_safe_redirect(get_permalink($parent));
}
}
}
}
}
add_action(\'template_redirect\',\'get_parent_page\');
这是非常密集的查询,并且
LIKE
查询并不是特别有效,但由于您没有任何其他方式来连接帖子,这是我的最佳想法。
如果有效(同样,我无法测试),那么应该将单页结果的请求重定向回父级。我推荐这种方法,因为改变主搜索查询来实现这一点(我认为是非常困难的),而且几乎肯定会非常缓慢。你得写几个JOIN
s并更改立柱FIELD
s和WHERE
条款我不可能在任何合理的时间内让它发挥作用。
另一种选择是改变search.php
文件(或创建一个),以便使用的永久链接指向父帖子。您可以使用几乎相同的函数,只需传入post ID即可。
function get_parent_page_permalink($postid) {
global $wpdb;
if (isset($postid)) {
$slide = $wpdb->get_var("SELECT DISTINCT slide_id FROM {$wpdb->prefix}smooth_slider WHERE post_id = {$postid} LIMIT 1");
if (!empty($parent)) {
$parent = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_status = \'publish\' AND post_type = \'post\' AND post_content LIKE \\"%[smoothslider id=\'".$slide."\']%\\"");
if (!empty($parent)) {
return get_permalink($parent);
}
}
}
}
这是服务器上更重的负载。在搜索中,每个结果都会有两个额外的查询,我相信,每个结果都会有另一个查询
get_permalink
.