我对此绞尽脑汁已经有一段时间了,我不知道如何修复代码。
这就是问题所在;
我在网上找到了一段代码,可以在编辑中过滤我的帖子结果。基于预定信息的php。我已经修改了代码以满足wordpress主题的需要。在本例中,它是属性类型。
预定值为“1居室、2居室、3居室、单身、行政”
这些值是通过主题选项输入的,带有过滤器选项的下拉列表确实有效,但它只会过滤具有整数的值。(即1间卧室、2间卧室等)单身汉、高管等无法正确过滤。
以下是原始代码:
functions.php
function restrict_articles_by_propertytype_value() {
global $wpdb;
$propertytype_values = $wpdb->get_col("
SELECT DISTINCT meta_value
FROM ". $wpdb->postmeta ."
WHERE meta_key = \'propertytype_value\'
ORDER BY meta_value
");
?>
<select name="propertytype_value_restrict_articles" id="propertytype_value">
<option value="">Show All Property Types</option>
<?php foreach ($propertytype_values as $propertytype_value) { ?>
<option value="<?php echo esc_attr( $propertytype_value ); ?>" <?php if(isset($_GET[\'propertytype_value_restrict_articles\']) && !empty($_GET[\'propertytype_value_restrict_articles\']) ) selected($_GET[\'propertytype_value_restrict_articles\'], $propertytype_value); ?>>
<?php
echo $propertytype_value;
?>
</option>
<?php } ?>
</select>
<?php
}
add_action(\'restrict_manage_posts\',\'restrict_articles_by_propertytype_value\');
然后是筛选表上结果的函数。
functions.php
function posts_where( $where ) {
if( is_admin() ) {
global $wpdb;
if ( isset( $_GET[\'propertytype_value_restrict_articles\'] ) && !empty( $_GET[\'propertytype_value_restrict_articles\'] ) && intval( $_GET[\'propertytype_value_restrict_articles\'] ) != 0 ) {
$propertytype_value_number = intval( $_GET[\'propertytype_value_restrict_articles\'] );
$where .= " AND ID IN (SELECT post_id FROM " . $wpdb->postmeta ."
WHERE meta_key=\'propertytype_value\' AND meta_value=$propertytype_value_number )";
}
}
return $where;
}
add_filter( \'posts_where\' , \'posts_where\' );
我可以看到原因是函数intvar(如下所示),但我无法让过滤器与strvar或其他方法一起使用,因为我对PHP开发还是很陌生。
我需要过滤器工作,即使没有数字/整数值存在。
在谷歌搜索了几个小时,我似乎找不到答案。我可能错过了一些非常琐碎的事情。
SO网友:brasofilo
在@vancoder的一些尝试和错误以及帮助下,问题与intval
.
唯一需要修改的部分是posts_where
作用
必须删除以下行:
$propertytype_value_number = intval( $_GET[\'propertytype_value_restrict_articles\'] );
和更改:
AND meta_value=$beds_value_number )";
至
AND meta_value=\'".$_GET[\'propertytype_value_restrict_articles\']."\' )";
我还必须修改原始函数并删除
&& intval( ) !=0
为了让它工作而争论。
下面是修改后的工作代码,用于从自定义字符串中过滤meta\\u值。
function.php
function posts_where( $where ) {
if( is_admin() ) {
global $wpdb;
if ( isset( $_GET[\'propertytype_value_restrict_articles\'] ) && !empty( $_GET[\'propertytype_value_restrict_articles\'] )) {
$where .= " AND ID IN (SELECT post_id FROM " . $wpdb->postmeta ."
WHERE meta_key=\'propertytype_value\' AND meta_value=\'".$_GET[\'propertytype_value_restrict_articles\']."\' )";
}
}
return $where;
}
add_filter( \'posts_where\' , \'posts_where\' );