通过SQL查找以类型B的A开头的所有帖子

时间:2013-05-23 作者:Devoted

我对post和分类查询有问题。我需要的是从自定义帖子类型中获取所有帖子,该类型以A开头,并定义了术语。以下是我的sql:

SELECT * FROM $wpdb->posts, $wpdb->terms
    WHERE post_title LIKE \'А%\'
    AND post_type = \'filmi-i-serialii\'
    AND post_status = \'publish\'
    AND slug = \'igralni\';
但这会返回所有filmi-i-serialii中的帖子,而不仅仅是分类中的帖子。

2 个回复
最合适的回答,由SO网友:Rajeev Vyas 整理而成

Try this..

SELECT * 
FROM $wpdb->posts p 
INNER JOIN $wpdb->term_relationships tr 
  ON p.ID = tr.object_id
INNER JOIN $wpdb->term_taxonomy tt 
  ON tr.term_taxonomy_id=tt.term_taxonomy_id 
inner join  $wpdb->terms t 
  on t.term_id=tt.term_id and t.slug=\'igralni\'
WHERE 
  p.post_title LIKE \'А%\'        
  AND p.post_type = \'filmi-i-serialii\' 
  AND p.post_status = \'publish\'
SO网友:s_ha_dum

我将此问题理解为试图将查询限制在taxonomy 已命名igralni, 正如问题所述,“仅限于分类中的igralni”,而不是“标记的”igralni“。但是,接受的答案实际上返回post_tag 术语为igralni.

考虑到这种解释,这将是我认为正确的方法——使用过滤器posts_where. 你可能需要更多的条件,但这是基本的想法。

function posts_by_letter_wpse_100462($where,$qry) {
  $ppl = $qry->get(\'posts_by_letter_where\');
  if (!empty($ppl)) {
    $where .= " AND post_title LIKE \'{$ppl}%\' ";
  }
  return $where;
}
add_filter(\'posts_where\',\'posts_by_letter_wpse_100462\',1,2);

$args = array(
  \'post_type\' => \'filmi-i-serialii\',
  \'posts_per_page\' => 10,
  \'posts_by_letter_where\' => \'m\',
  \'tax_query\' => array(
    array(
      \'taxonomy\' => \'post_tag\',
      \'field\' => \'slug\',
      \'terms\' => \'igralni\'
    )
  )
);
$wp_query = new WP_Query($args);
请注意,我将一个参数添加到WP_Query\'的参数。这些文件未经修改就可以通过,但除非您对其进行了操作,否则不会执行任何操作——非常方便,但没有文档记录,可能是无意的,因此建议谨慎。

如果你真的要用pureSQL, 然后运行查询(带或不带过滤器),转储SQL, 窃取并修改它。

var_dump($wp_query->request); die;

结束

相关推荐

WP_QUERY元_按数组键查询

我有一个自定义的post类型,它的meta位于一个数组中。我需要做的是基于该元数组中键的值进行查询。$args = array( \'post_type\' => \'my-cpt\', \'posts_per_page\' => -1, \'orderby\' => \'meta_value\', // Sort by this value \'meta_key\

通过SQL查找以类型B的A开头的所有帖子 - 小码农CODE - 行之有效找到问题解决它

通过SQL查找以类型B的A开头的所有帖子

时间:2013-05-23 作者:Devoted

我对post和分类查询有问题。我需要的是从自定义帖子类型中获取所有帖子,该类型以A开头,并定义了术语。以下是我的sql:

SELECT * FROM $wpdb->posts, $wpdb->terms
    WHERE post_title LIKE \'А%\'
    AND post_type = \'filmi-i-serialii\'
    AND post_status = \'publish\'
    AND slug = \'igralni\';
但这会返回所有filmi-i-serialii中的帖子,而不仅仅是分类中的帖子。

2 个回复
最合适的回答,由SO网友:Rajeev Vyas 整理而成

Try this..

SELECT * 
FROM $wpdb->posts p 
INNER JOIN $wpdb->term_relationships tr 
  ON p.ID = tr.object_id
INNER JOIN $wpdb->term_taxonomy tt 
  ON tr.term_taxonomy_id=tt.term_taxonomy_id 
inner join  $wpdb->terms t 
  on t.term_id=tt.term_id and t.slug=\'igralni\'
WHERE 
  p.post_title LIKE \'А%\'        
  AND p.post_type = \'filmi-i-serialii\' 
  AND p.post_status = \'publish\'
SO网友:s_ha_dum

我将此问题理解为试图将查询限制在taxonomy 已命名igralni, 正如问题所述,“仅限于分类中的igralni”,而不是“标记的”igralni“。但是,接受的答案实际上返回post_tag 术语为igralni.

考虑到这种解释,这将是我认为正确的方法——使用过滤器posts_where. 你可能需要更多的条件,但这是基本的想法。

function posts_by_letter_wpse_100462($where,$qry) {
  $ppl = $qry->get(\'posts_by_letter_where\');
  if (!empty($ppl)) {
    $where .= " AND post_title LIKE \'{$ppl}%\' ";
  }
  return $where;
}
add_filter(\'posts_where\',\'posts_by_letter_wpse_100462\',1,2);

$args = array(
  \'post_type\' => \'filmi-i-serialii\',
  \'posts_per_page\' => 10,
  \'posts_by_letter_where\' => \'m\',
  \'tax_query\' => array(
    array(
      \'taxonomy\' => \'post_tag\',
      \'field\' => \'slug\',
      \'terms\' => \'igralni\'
    )
  )
);
$wp_query = new WP_Query($args);
请注意,我将一个参数添加到WP_Query\'的参数。这些文件未经修改就可以通过,但除非您对其进行了操作,否则不会执行任何操作——非常方便,但没有文档记录,可能是无意的,因此建议谨慎。

如果你真的要用pureSQL, 然后运行查询(带或不带过滤器),转储SQL, 窃取并修改它。

var_dump($wp_query->request); die;

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post