在由WP_QUERY生成的SQL中,围绕关键字的校验和是什么,我也需要使用它们吗?

时间:2020-03-20 作者:guardiancrescent

我使用posts\\u join和posts\\u where过滤器在查询中包含自定义表。

this page 说我应该“使用WordPress所做的一切搜索帖子标题字段来搜索我的自定义表字段(而不是试图复制WordPress相当复杂的逻辑)”

。。。但是他们提供的代码不起作用。替换未找到任何内容,因此未添加任何内容。

    $where = preg_replace( "/\\(\\s*post_title\\s+LIKE\\s*(\\\'[^\\\']+\\\')\\s*\\)/", "(post_title LIKE $1) OR (wp_mytable.entry LIKE $1)", $where );
我使用$wp\\u query->request来显示查询,发现关键字被包装在校验和中。它们是自动生成的,每次都不同。

“从wp\\u posts中选择SQL\\u CALC\\u FOUND\\u ROWS wp\\u posts.ID在wp\\u posts.ID=wp\\u xxxx\\u entries.post\\u ID,其中1=1和(((wp\\u posts.post\\u标题,如{B12C1EAFDCF04FCB64989A2D3879BD84B16FBFFC9CB81Dee32E0FCE268D5a}关键字{B12C1EAFDCF04FCB64989AD389BD84B16FFC9CB81Dee32FCE268D5a D5a})或(wp\\u posts.post\\u摘录LIKE\'{b12c1eafdcf04fcb64989a2ad3879bd84b16fbffc9cb81dee32e0fce2cc68d5a}关键字{b12c1eafdcf04fcb64989a2ad3879bd84b16fbffc9cb81dee32e0fce2cc68d5a}或(wp\\u posts.post\\u内容,如{b12c1eafdcf04fcb64989a2ad3879bd84b16fbffc9cb81dee32e0fce2cc68d5a}关键字989A2AD3879BD84B16FBFFC9CB81DEE32E0FCE2CC68D5A})和wp\\U岗位。post\\u按wp\\u posts输入(\'post\',\'page\',\'attachment\')和(wp\\u posts.post\\u status=\'publish\'或wp\\u posts.post\\u author=1,wp\\u posts.post\\u status=\'private\')或(wp\\u xxxx\\u entries.entry,如\'\'%keyword%\')顺序。发布\\u标题,如“{b12c1eafdcf04fcb64989a2ad3879bd84b16fbffc9cb81dee32e0fce2cc68d5a}关键字{B12C1EAFDCF04FCB64989AD3879BD84B16FBFFC9CB81DEE32E0FCE2CC68D5A}”,描述wp\\u帖子。post\\u日期描述限制0,10“

我需要复制这个吗?如果是,怎么做?

1 个回复
SO网友:Mark Kaplun

它在文字上是一个占位符,而不是校验和,它指示应将查询的哪一部分转换为% 在执行查询之前。(这样做是为了加强安全性)

我现在看不到一个简单的方法来修复preg_replace 法典建议,我怀疑这个占位符可能是“随机”生成的,但如果您只想搜索其他表中正在搜索的相同术语,可以从WP_Query 对象并使替换代码更易于编写,因为您不需要从查询本身提取术语。

相关推荐

Live search by custom tag

实时搜索:$the_query = new WP_Query( array( \'s\' => esc_attr( $_POST[\'keyword\'] ), \'post_type\' => \'custom_type\', \'sentence\' => \'true\' )); if( $the_query->have_posts() ) : while( $the_query->have_posts() ): $the_query->t