查询所有wordpress帖子标题

时间:2012-10-06 08:36:43

标签: php javascript mysql ajax wordpress

我正在使用Wordpress自动建议使用this snippet代码

目前它正在搜索所有标签,我希望它只搜索帖子标题。任何帮助表示赞赏。

这是sql查询调用所有帖子需要修改的所有标签。

 <?php global $wpdb;
 $search_tags = $wpdb->get_results("SELECT name from wp_terms WHERE name LIKE '$search%'");
 foreach ($search_tags as $mytag)
   {
     echo $mytag->name. " "; 
   }
  ?>

3 个答案:

答案 0 :(得分:3)

这些天我不得不在wordpress主题中做一些请求。 在你的情况下(获取标题比获取标签更容易,如在你的示例链接中),事情可以更轻松地完成(我猜)。

首先你必须制作一个php页面来获取帖子。你可能知道你不能在独立的php文件中使用wp的东西,所以你的文件(让我们称之为 get_posts.php )看起来像

<?php
  // Include the file above for being able to use php stuff
  // In my case this file was in a folder inside my theme ( my_theme/custom_stuff/get_posts.php ).
  // According to this file position you can modify below path to achieve wp-blog-header.php from wp root folder
  include( '../../../../wp-blog-header.php' ); 

  // Get all published posts. 
  $list_posts = get_posts( array( 'numberposts' => -1 ) );

  // Get "q" parameter from plugin
  $typing = strtolower( $_GET["q"] );

  //Save all titles
  $list_titles = array();
  foreach( $list_posts as $post ) { $list_titles[] = $post->post_title; }

  // To see more about this part check search.php from example
  foreach( $list_titles as $title ) {
    if( strpos( strtolower( $title ), $typing ) ){
      echo $title;
    }
  }

?>

我添加了一些评论,试图更好地帮助您。

现在事情变得简单了,你只需通过像

这样的jQuery插件调用你的页面
$('#yourInput').autocomplete( "path_to/get_posts.php" );

答案 1 :(得分:2)

您可以直接使用wordpress in-build功能获取所有帖子标题

// The Query
query_posts( 'posts_per_page=-1' );

// The Loop
while ( have_posts() ) : the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;

答案 2 :(得分:0)

这里没有答案回答您的真实问题:

如何查询仅帖子标题

“原始SQL”方式:

一些重要的事情:

  • 对SQL进行转义搜索!(对于标签搜索也是如此!)请使用$GLOBALS['wpdb']->esc_like()
  • 如果您只需要1列,则可以使用$GLOBALS['wpdb']->get_col()
    $GLOBALS['wpdb']->get_results(),如果您想在一行中获取更多列
  • 使用$GLOBALS['wpdb']->tableBaseName使代码可移植-照顾前缀
    ,例如$GLOBALS['wpdb']->posts
  • 查询帖子时,您还必须考虑要查询哪个 post_type post_status
    =>通常您想要的post_status是{ {1}},但publish可能会根据您的需要而变化
  • WordPress表格“帖子”包含所有帖子类型-帖子,页面,自定义,,也可以包含导航,联系表单等! =>我强烈建议使用显式{{1} } WHERE中的条件! :)

... post_type与全球化variabl相同-今天的性能差异很小

post_type

WP_Query方式

这是更多的wordpress,但开销很小,因为尽管$GLOBALS / <?php // to get ALL published post titles of ALL post types (posts, pages, custom post types, ... $search_post_titles = $GLOBALS['wpdb']->get_col( "SELECT post_title from {$GLOBALS['wpdb']->posts} WHERE ( (post_status = 'publish') AND (post_title LIKE '{$GLOBALS['wpdb']->esc_like($search)}%') ) ORDER BY post_title ASC "); // I also added ordering by title (ascending) // to only get post titles of Posts(Blog) // you would add this to conditions inside the WHERE() // AND (post_type = 'post') // for Posts&Pages // AND ((post_type = 'post') OR (post_type = 'page')) // test output: foreach ($search_post_titles as $my_title) { echo $my_title . " "; } ?> 有一个fields参数,但是它只有以下选项:
'all'-所有字段(也是默认值),'ids'-仅ids,'id => parent'-...如果您传递其他任何内容,您仍然会得到所有,因此您仍然需要添加“全部” BUT -WP但是具有用于更改SELECT中字段的过滤器。

我试图使其与原始SQL版本相同,但但这取决于WP如何进行“搜索” -我认为new WP_Query()表示1个单词+一些如果有更多的单词,则更多的逻辑。您可以利用用于get_posts()的{​​{1}}过滤器,也可以在将%search%添加到$clauses INSTEAD 处添加自定义内容(请记住在不丢失的现有WHERE fields后面附加)。同样,'s' 在导航,联系表单等情况下不会产生与原始查询总是相同的结果。

WP_Query还清理了输入变量,因此实际上不会逃脱$args

$clauses['where' .= "AND ...;

不要混淆-您仍然会得到post_type => 'any'的数组-WP将向其中添加一些默认的属性和值,但实际上,它只会查询和填写您在其中指定的字段的真实值过滤器。

PS:我已经测试了这些-它们是有效的代码(至少在WP 5.4和PHP7上有效:))