我很忙rewritting a custom function 我最近写了一篇文章,根据URL中保存的标签、类别、自定义分类术语、作者或搜索值来获取相邻的帖子
我使用的是get_adjacent_post
重写我的函数。
这是我的。这将成功检索相邻帖子的ID,并根据query_vars
在URL中设置。如果没有自定义query_vars
设置后,函数将按正常的时间顺序获取相邻的帖子
<?php
function get_adjacent_include_referred_post( $previous = true ) {
global $wpdb;
if ( ( ! $post = get_post() ) )
return null;
$current_post_date = $post->post_date;
$join = \'\';
$where = \'\';
//Alter the SQL query if \'aq\' is set in single page URL
if( is_author_referrer() ) {
$author = $_GET[\'aq\'];
$where .= $wpdb->prepare( "AND p.post_author IN (%s)", $author );
}
//Alter the SQL query if \'tq\' is set in single page URL
if( is_tax_referrer() ) {
$term = $_GET[\'tq\'];
$join = $wpdb->prepare( " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id AND tr.term_taxonomy_id IN (%s)", $term );
}
//Alter the the SQL query if sq is set in single page URL
if( is_search_referrer() ) {
$term = $_GET[\'sq\'];
// **MISSING INFO**
}
//Set next and previous post\'s operators to form the SQL query
$adjacent = $previous ? \'previous\' : \'next\';
$op = $previous ? \'<\' : \'>\';
$order = $previous ? \'DESC\' : \'ASC\';
// Setting the default clauses to build the custom SQL query to get adjacent post
$where = $wpdb->prepare( "WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = \'publish\' $where", $current_post_date, $post->post_type );
$sort = "ORDER BY p.post_date $order LIMIT 1";
$query = "SELECT p.ID FROM $wpdb->posts AS p $join $where $sort";
//Create and set cache to improve performance of the function
$query_key = \'get_the_adjacent_post_\' . md5( $query );
$result = wp_cache_get( $query_key, \'counts\' );
$result = $wpdb->get_var( $query );
if ( null === $result )
$result = \'\';
wp_cache_set( $query_key, $result, \'counts\' );
return $result;
}
我的问题是,我找不到任何可以用于搜索查询的东西(
我的SQL知识太差,无法组装有用的东西)。如果我的搜索查询是rocks
如果有人点击了一篇文章,如何调整我的SQL查询以从同一搜索查询中查看的当前单篇文章中获取相邻的文章?关于我的代码的几点注释is_***_referrer()
条件检查是包装函数,用于检查S_GET[\'***\']
已设置。对于搜索查询,is_search_referrer()
检查是否$_GET[\'sq\']
如果query_vars
存在,失败时为false
的值$_GET[\'sq\']
will是的价值get_search_query()
. 这是用于获取同一搜索查询的相邻帖子的值
我的代码中没有语法错误,可以正常工作。我知道出于某种原因,上面的代码块中的代码看起来很有趣,从中可以看出确实存在语法错误,但实际上没有。
有什么建议吗?
最合适的回答,由SO网友:Pieter Goosen 整理而成
虽然这是可能的,但确实不可行。我在这个问题上做了很多研究,但找不到直接的答案
我去看了一下WP_Query
类来获得可能的解决方案,我得出结论,我试图用一个或两个简单的线性代码实现的目标是不可能的。
陷阱要获得正确的相邻帖子,必须匹配原始搜索查询。与原始搜索查询的任何偏差都将返回不正确的相邻帖子
单个搜索词很容易复制,在大多数情况下都能很好地工作。问题出现在多个搜索词或句子中。这是由WP_Query
班
中有一个停止字过滤器WP_Query
类,该类筛选搜索词并从搜索查询中删除这些停止词(如果存在)。因此,这也需要在自定义searh查询中复制,以便与原始搜索结果保持一致
要获得一致和正确的结果,您必须从WP_Query
类并将其合并到相关函数中。这确实不可行。
最好的解决方案是继续使用WP_Query
保持推荐页面的结果一致,并获得正确的相邻帖子。这个问题的链接答案中的方法有点笨重和多余,我正忙着重写它。通过使用date_query
Wordpress版本3.7中引入的参数