如何按自定义字段值显示wp_post?

时间:2016-06-23 作者:Aipo

我正在使用wooCommerce。按自定义字段值搜索时,如何显示帖子。目标是?s={custom_field_value} 设置URL以获取结果:?custom_field*={custom_field_value} 并获得一份产品列表custom_field_value 在custom\\u字段中。

*?custom_field 是custom\\u字段的名称。

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

默认情况下,您无法执行此操作,但可以在主题中编写查询来执行此操作。允许在URL中输入任何字段都可能存在安全风险,因此您需要显式检测所需的字段。

在您的functions.php, 您可以添加以下内容(未测试!):

add_action( \'pre_get_posts\', \'wpse230535_custom_posts_by_custom_field\' );

function wpse230535_custom_posts_by_custom_field( $query ) {
  if( !is_admin() && $query->is_main_query() ) {

    $acceptable_fields = array( \'custom-field-1\', \'custom-field-2\' );
    $meta_query = array();

    foreach( $acceptable_fields as $field ) {
      if ( ! isset( $_GET[$field] ) ) { continue; }

      $meta_query[] = array (
        \'key\' => $field,
        \'value\' => sanitize_text_field( $_GET[$field] ),
        \'compare\' => \'=\',
      );

    } // end foreach

    if( count( $meta_query ) ) { $query->set( \'meta_query\', $meta_query ); }

  } // end if
} // end function
这将获取您当前允许的自定义字段custom-field-1custom-field-2, 检查是否在查询字符串中设置了它们(通过$_GET[] superglobal), 如果是这样的话,sanitize them 并将其添加到meta query.

当然,您需要将允许的字段名替换为所需的字段名。例如,当一个人访问http://www.example.com/?custom-field-1=fieldvalue, 仅显示具有名为custom-field-1, 精确值为fieldvalue. 您可以添加任意数量的字段。

有关按自定义字段进行查询的更多参考,请参见WP Meta Query documentation. 希望这有帮助!

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http