我有一个Wordpress网站,是在自定义分类法完全实现之前,由第三方web开发人员为2.9版编写的。我们已经升级到最新的wordpress版本3.5。x、 有一个SQL Select查询在Wordpress错误中生成了一系列错误。日志文件。
在此模板中,我们使用了一些自定义分类法。我关心的问题如下:
(wp\\u term\\u taxonomy.taxonomy)作业
这里的一个关键点是not all Wordpress posts are using the taxonomy field jobs
. 因此,一些帖子不会有任何与之相关的“工作”术语。
下面是我经常看到的错误
WordPress database error You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near \'))\' at
line 9 for query
SELECT DISTINCT p.* FROM wp_posts p, wp_terms t, wp_term_taxonomy tt,
wp_term_relationships tr, wp_terms t2, wp_term_taxonomy tt2, wp_term_relationships tr2
WHERE p.id = tr.object_id
AND t.term_id = tt.term_id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
AND p.id = tr2.object_id
AND t2.term_id = tt2.term_id
AND tr2.term_taxonomy_id = tt2.term_taxonomy_id
AND (tt.taxonomy = \'category\' AND tt.term_id = t.term_id AND t.term_id = \'22\')
AND (tt2.taxonomy = \'jobs\' AND tt2.term_id = t2.term_id AND t2.name IN ())
made by require(\'wp-blog-header.php\'), require_once(\'wp-includes/template-loader.php\'),
include(\'/themes/generic/page.php\')
下面是PHP模板文件中的代码片段。
<?
else :
$playlist = 0; $jobs = null; $job = null; $terms = null;
$jobs = wp_get_object_terms( $post->ID, \'jobs\', array(\'fields\'=>\'names\'));
$term_count = 0;
foreach($jobs as $job) :
if ($term_count > 0) :
$terms .= ", \'".$job."\'";
else :
$terms .= "\'".$job."\'" ;
endif;
$term_count++;
endforeach;
$sql = "
SELECT DISTINCT p.* FROM $wpdb->posts p, $wpdb->terms t, $wpdb->term_taxonomy tt, $wpdb->term_relationships tr, $wpdb->terms t2, $wpdb->term_taxonomy tt2, $wpdb->term_relationships tr2
WHERE p.id = tr.object_id
AND t.term_id = tt.term_id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
AND p.id = tr2.object_id
AND t2.term_id = tt2.term_id
AND tr2.term_taxonomy_id = tt2.term_taxonomy_id
AND (tt.taxonomy = \'category\' AND tt.term_id = t.term_id AND t.term_id = \'22\')
AND (tt2.taxonomy = \'jobs\' AND tt2.term_id = t2.term_id AND t2.name IN ($terms))
";
if (! $results = $wpdb->get_results($sql)) :
?>
从PHP文件中的逻辑推断,我看到了变量
$terms
使用创建
NULL
价值A.
foreach
循环用于查找
jobs
并将其附加到变量
$terms
. 接下来,SQL Select查询在最后一个AND条件中使用此变量。
如果$terms
变量,则SQL在不存在任何问题的情况下进行评估。
但是如果在$terms
变量是的NULL
. 然后,SQL生成一个语法错误。
如何重写以处理NULL
的值$terms
运行SQL查询时的变量?
我希望我问这个问题足够完整。提前感谢您的任何意见。
最合适的回答,由SO网友:Tom J Nowell 整理而成
不应使用直接SQL查询,而应尝试WP_Query
税务查询,例如:
$args = array(
\'post_type\' => \'post\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'category\',
\'field\' => \'id\',
\'terms\' => array( 22 )
),
array(
\'taxonomy\' => \'job\',
\'field\' => \'name\',
\'terms\' => $terms,
\'operator\' => \'IN\'
)
)
);
$query = new WP_Query( $args );
其中$terms是术语名称的数组。