保存自定义字段以供WP_QUERY检索

时间:2017-02-28 作者:marwyk87

提前感谢您提供的任何帮助。我正在为wordpress编写一个插件,它有多个自定义帖子类型,共享一些自定义元框和字段。我所有的东西都正常工作和保存,但遇到了一个问题,我需要根据自定义字段中的值使用WP\\u查询检索过滤后的数据。

以下是一些在线示例并参考了codex,我有以下内容

下面是我的自定义元框代码

<label>Listing Type</label>
<select id="details_listing_type" name="details_listing_type" value="\'.$detailsData["details_listing_type"].\'">
在我的保存例程中

if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
       return;

if ( !wp_verify_nonce( $_POST[\'details_noncename\'], plugin_basename( __FILE__ ) ) )
       return;

if ( !current_user_can( \'edit_post\', $post_id ) )
       return;

$detailsData = array();

foreach($_POST as $key => $data) 
{
    if($key == \'details_noncename\')
    continue;
    if(preg_match(\'/^details_listing/i\', $key)) 
    {
        $detailsData [$key] = $data;
    }
}
update_post_meta($post_id, \'details_listing\', $detailsData );

return $detailsData ;
从这里我收集到,我正在用一个键保存自定义字段数据,然后将数组序列化为值。我有多个字段,但在上面的示例中只有一个字段。

现在我想使用WP\\u Query按“details\\u listing\\u type”的值筛选我的帖子,但我能理解的是,由于它是序列化的,所以我需要使用自定义查询。

我想使用WP\\u Query的原因是我了解它的工作原理,并且我已经在插件的大多数地方使用它来检索数据。此外,我还想构建一个真正高级的搜索框,供用户使用任何字段筛选数据,我很乐意使用WP\\u Query来做到这一点。

有人能解释一下我如何使用我的代码,以便我仍然可以使用WP\\u查询并使用每个字段自己的键存储每个字段吗?

再次感谢您的帮助

1 个回复
最合适的回答,由SO网友:marwyk87 整理而成

供日后参考。我通过更新保存例程将每个字段保存到自己的键来解决问题。由于每个字段都保存到其相应的键中,因此这确实可以更好地工作,从而可以更好地从WP\\U查询中检索

    /* check if this is an autosave and if YES then do nothing */
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
       return;

    /* Verify the nonce field of the meta box */
    if ( !wp_verify_nonce( $_POST[\'propdp_details_noncename\'], plugin_basename( __FILE__ ) ) )
       return;

    /* Check if the user can edit the post and if NOT the return and do nothing */
    if ( !current_user_can( \'edit_post\', $post_id ) )
       return;

    /* start my array object to hold all my data to save */
    $detailsData = array();

    /* run through $_POST to check for all matching keys and values */
    foreach($_POST as $key => $data) 
    {
        if($key == \'propdp_details_noncename\')
        continue;
        if(preg_match(\'/^propdp_details/i\', $key)) 
        {
            $detailsData [$key] = $data;                
        }
    }

    /* loop through all gathered keys and values to add, update and delete meta */
    foreach($detailsData as $meta_key => $new_value)
    {

        //get old value of meta key
        $curr_value = get_post_meta( $post_id, $meta_key, true );

        //check if old value exists and add if OLD NOT EXIST
        if($new_value && \'\' == $curr_value)
        {
            add_post_meta( $post_id, $meta_key, $new_value, true );
        }

        //check if old value == new value and update if NEW NOT EQUAL
        elseif($new_value && $new_value != $curr_value)
        {
            update_post_meta( $post_id, $meta_key, $new_value);
        }

        //check if new value exists and delete if NEW NOT EXIST
        elseif(\'\' == $new_value && $curr_value)
        {
            delete_post_meta( $post_id, $meta_key, $curr_value);
        }

    }
这允许我像这样使用WP\\u Query args数组

$myQueryArr = array(
                    \'post_type\' => array(\'custom\', \'post\', \'types\'),
                    \'post_status\' => \'publish\',
                    \'meta_query\' => array(
                                     array(
                                      \'key\'=>\'propdp_details_listing_agent\',
                                      \'value\'=>$currentID
                                     )
                                    )                                           
              );

相关推荐

保存Metabox内容无效

我正在尝试保存一个metabox输入,但它似乎不起作用。我使用的是数组(因为我需要我的metabox有60行),所以我假设问题就出在数组中。这是我为管理员提供的metabox函数(它可以正确显示我要显示的信息):function mock_metabox() { global $post; // Nonce field wp_nonce_field( basename( __FILE__ ), \'mock_fields\' ); // in