如何在WordPress中将查询SQL转换为短码?

时间:2015-04-16 作者:laur

我想做一个这样的短代码[我的短代码:2:饮料],并查询wrangler我已经设法得到了下面的查询,它显示了2个特定分类的产品

PHP WP\\u查询:

$query = array (
  \'paged\' => 1,
  \'posts_per_page\' => \'2\',
  \'offset\' => 0,
  \'post_status\' => \'publish\',
  \'ignore_sticky_posts\' => 0,
  \'orderby\' => \'date\',
  \'order\' => \'DESC\',
  \'tax_query\' => 
  array (
    0 => 
    array (
      \'taxonomy\' => \'product_brand\',
      \'field\' => \'id\',
      \'terms\' => 
      array (
        0 => 30,
      ),
      \'operator\' => \'IN\',
      \'include_children\' => false,
    ),
  ),
  \'post_type\' => 
  array (
    \'product\' => \'product\',
  ),
);
这个查询工作得很好,但我没有选择输入分类法的名称,只有id。

这就是为什么我想在我放置[产品:2:名称分类法]或[产品:名称分类法]的地方创建一个短代码,并将其保留为固定的2。

感谢您的意见和帮助

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

坦率地说,我不太确定你想做什么,你的术语有点混乱,你的示例短代码也很混乱。

在我开始之前,您应该首先检查以下非常重要的链接

首先,您应该定义您需要使用的属性(及其默认值),并将其传递给快捷码。根据你的例子,你可以这样做

$a = shortcode_atts( 
    array( 
        \'posts_per_page\' => 2,
        \'post_type\' => \'product\',
        \'taxonomy\'   => \'product_brand\', 
        \'term_id\'  => \'\',
        \'term_name\'  => \'\',
        \'term_slug\'  => \'\',
        // Rest of attributes required
    ), 
$atts ); 
您可以根据需要设置任意多个属性以满足您的需要。据我所知,您希望将术语名称或id传递给短代码,因此我相应地设置了属性。我也包括了slug。为了保持短代码的动态性,最好不要对查询的参数进行硬编码。将它们设置为具有默认值的属性。如果需要为另一个分类法或post类型重用短代码,可以通过传递的属性更改值

接下来你需要做的是调整你的tax_query 根据传递的术语值设置正确的field 价值为此,您可以尝试这样的条件

$term_id = $a[\'term_id\'];
$term_name = $a[\'term_name\'];
$term_slug = $a[\'term_slug\'];

if ( $term_id ) {
    $terms = $term_id;
    $field = \'term_id\';
} elseif ( $term_name ) {
    $terms = $term_name;
    $field = \'name\';
} elseif ( $term_slug ) {
    $terms = $term_slug;
    $field = \'slug\';
}
你现在可以通过了$terms$field 到您的tax_query

\'tax_query\' => array(
    array(
        \'taxonomy\' => $a[\'taxonomy\'],
        \'field\' => $field,
        \'terms\' => $terms,
        \'include_children\' => false
    )
),
现在,您可以根据需要在短代码中传递术语id、名称或slug,如下所示

[my_shortcode posts_per_page=\'3\' term_id=3]

[my_shortcode posts_per_page=\'3\' term_name=\'My term name\']

[my_shortcode posts_per_page=\'3\' term_slug=\'my-term-slug\']
几点注意事项这只是一个骨架,可以让你走上正轨。根据需要扩展和滥用它

您需要相应地清理和验证来自属性的数据,以避免可能的错误、意外的输出和安全漏洞。例如,您可能首先检查是否有一个术语值,然后检查该术语是否确实存在,然后再将其作为参数传递并构建查询。

结束

相关推荐

是否获取没有发布内容的Query()?

是否有一种方法可以获取包含帖子信息(缩略图、id等)但不包含\\u content()的查询?我已经有了一个插件,可以在主页的侧栏中显示最近的帖子,例如20篇帖子,每个帖子的内容都有1MB,它会在主页上加载20 MB的内容,最后不会显示,因为它只显示缩略图、标题和投票/评论选项。它杀死了网站。有没有办法通过查询将帖子信息加载到此插件,但不包括要加载的帖子内容?代码:<?php $recent=new WP_Query(); ?> <?php

如何在WordPress中将查询SQL转换为短码? - 小码农CODE - 行之有效找到问题解决它

如何在WordPress中将查询SQL转换为短码?

时间:2015-04-16 作者:laur

我想做一个这样的短代码[我的短代码:2:饮料],并查询wrangler我已经设法得到了下面的查询,它显示了2个特定分类的产品

PHP WP\\u查询:

$query = array (
  \'paged\' => 1,
  \'posts_per_page\' => \'2\',
  \'offset\' => 0,
  \'post_status\' => \'publish\',
  \'ignore_sticky_posts\' => 0,
  \'orderby\' => \'date\',
  \'order\' => \'DESC\',
  \'tax_query\' => 
  array (
    0 => 
    array (
      \'taxonomy\' => \'product_brand\',
      \'field\' => \'id\',
      \'terms\' => 
      array (
        0 => 30,
      ),
      \'operator\' => \'IN\',
      \'include_children\' => false,
    ),
  ),
  \'post_type\' => 
  array (
    \'product\' => \'product\',
  ),
);
这个查询工作得很好,但我没有选择输入分类法的名称,只有id。

这就是为什么我想在我放置[产品:2:名称分类法]或[产品:名称分类法]的地方创建一个短代码,并将其保留为固定的2。

感谢您的意见和帮助

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

坦率地说,我不太确定你想做什么,你的术语有点混乱,你的示例短代码也很混乱。

在我开始之前,您应该首先检查以下非常重要的链接

首先,您应该定义您需要使用的属性(及其默认值),并将其传递给快捷码。根据你的例子,你可以这样做

$a = shortcode_atts( 
    array( 
        \'posts_per_page\' => 2,
        \'post_type\' => \'product\',
        \'taxonomy\'   => \'product_brand\', 
        \'term_id\'  => \'\',
        \'term_name\'  => \'\',
        \'term_slug\'  => \'\',
        // Rest of attributes required
    ), 
$atts ); 
您可以根据需要设置任意多个属性以满足您的需要。据我所知,您希望将术语名称或id传递给短代码,因此我相应地设置了属性。我也包括了slug。为了保持短代码的动态性,最好不要对查询的参数进行硬编码。将它们设置为具有默认值的属性。如果需要为另一个分类法或post类型重用短代码,可以通过传递的属性更改值

接下来你需要做的是调整你的tax_query 根据传递的术语值设置正确的field 价值为此,您可以尝试这样的条件

$term_id = $a[\'term_id\'];
$term_name = $a[\'term_name\'];
$term_slug = $a[\'term_slug\'];

if ( $term_id ) {
    $terms = $term_id;
    $field = \'term_id\';
} elseif ( $term_name ) {
    $terms = $term_name;
    $field = \'name\';
} elseif ( $term_slug ) {
    $terms = $term_slug;
    $field = \'slug\';
}
你现在可以通过了$terms$field 到您的tax_query

\'tax_query\' => array(
    array(
        \'taxonomy\' => $a[\'taxonomy\'],
        \'field\' => $field,
        \'terms\' => $terms,
        \'include_children\' => false
    )
),
现在,您可以根据需要在短代码中传递术语id、名称或slug,如下所示

[my_shortcode posts_per_page=\'3\' term_id=3]

[my_shortcode posts_per_page=\'3\' term_name=\'My term name\']

[my_shortcode posts_per_page=\'3\' term_slug=\'my-term-slug\']
几点注意事项这只是一个骨架,可以让你走上正轨。根据需要扩展和滥用它

您需要相应地清理和验证来自属性的数据,以避免可能的错误、意外的输出和安全漏洞。例如,您可能首先检查是否有一个术语值,然后检查该术语是否确实存在,然后再将其作为参数传递并构建查询。

相关推荐

JqueryUi对话框给出未捕获的TypeError:This._addClass不是函数错误

我有一个网站,我们需要一些自定义php编码来连接到外部数据库,以获取几个销售我们产品的供应商的产品评论URL。我们试图实现的基本想法是让用户注册他们的产品,然后如果他们愿意留下评论,就延长保修期。我正在使用XYZScript。com的“插入PHP”插件来实现这一点。该主题最初只加载了jQuery,以避免创建子主题,我们正在php脚本中加载jQueryUI。因此,我们将jQuery加载到文档的标题中,将jQueryUI加载到文档的正文中。我不太确定这是因为加载脚本的顺序造成的,还是其他一些冲突的javasc