按唯一元价值两难境地筛选列表

时间:2013-04-01 作者:Nima Moradi

我对此绞尽脑汁已经有一段时间了,我不知道如何修复代码。

这就是问题所在;

我在网上找到了一段代码,可以在编辑中过滤我的帖子结果。基于预定信息的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开发还是很陌生。

我需要过滤器工作,即使没有数字/整数值存在。

在谷歌搜索了几个小时,我似乎找不到答案。我可能错过了一些非常琐碎的事情。

1 个回复
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\' );

结束

相关推荐

Too many actions/filters!

这里是wordpress的新成员。动作/过滤器的概念本身并不难理解。令我不知所措的是大量可用的操作和过滤器。当我阅读教程/指南时,他们会说“只需将此功能添加到wp\\U head操作或after\\U setup\\u主题”。如果没有这些教程,我究竟如何知道将该函数与该操作挂钩?作为一个初学者,我怎么会知道什么是合适的操作?有没有关于如何导航的建议?谢谢