如何让自定义WordPress页面提供搜索结果

时间:2015-12-08 作者:Richard Tinkler

我已经定制了标准的Wordpress搜索。php和一切都很好。

现在,我的客户希望能够在搜索结果页面的开头添加一些内容,就像他可以在管理区域中创建的任何其他页面中添加内容一样。

因此,我的想法是声明我的自定义搜索。php作为名为“Search”的模板。然后,我的客户可以使用“搜索”模板创建一个新页面,添加他需要的内容,然后显示搜索结果。

如何获取标准/?s=my+search+query以重定向到新页面,并提供生成搜索结果所需的信息。php?

我试过这个:

function fb_change_search_url_rewrite() {
    if ( is_search() && ! empty( $_GET[\'s\'] ) ) {
        wp_redirect( home_url( "/custom-search-page/" ) . urlencode( get_query_var( \'s\' ) ) );
        exit();
    }   
}
add_action( \'template_redirect\', \'fb_change_search_url_rewrite\' );
还有这个:

function add_rewrite_rules_search_query($aRules) {
    $aNewRules = array(\'^search/(.+)?$\' => \'index.php?pagename=custom-search-page&s=$matches[1]\');
    $aRules = $aNewRules + $aRules;
return $aRules;
}
add_filter(\'rewrite_rules_array\', \'add_rewrite_rules_search_query\');
但到目前为止运气不好。

提前感谢您的帮助!

2 个回复
SO网友:flomei

也许更容易从搜索模板中的不同页面/帖子中输出一些内容,这些页面/帖子有固定的slug。

例如,我使用:

$page = get_posts(array(\'name\' => \'welcome\'));
if ($page)
{
   echo \'<h1>\'.$page[0]->post_title.\'</h1>\';
   echo \'<p>\'.$page[0]->post_content.\'</p>\';
}
这将获取带有slug“welcome”的帖子并显示其内容。由于我不使用单柱显示,这对我的特殊情况很好。

也许它也能帮助你。

SO网友:Robert Bokori

我希望添加一个设置字段,如page_for_posts 在设置区域中的某个位置添加以下代码functions.php. 这将定义page_for_search 选项,轻松获取价值get_option(\'page_for_search\') 作用

add_action(\'admin_init\', \'my_custom_page_settings\');
function my_custom_page_settings() {
  add_settings_section(
    \'custom_page_settings\',
    \'Custom Page Settings\',
    \'custom_page_settings_helper_text\',
    \'reading\'
  );

  add_settings_field(
    \'page_for_search\',
    \'Page For Search\',
    \'page_for_search_callback\',
    \'reading\',
    \'custom_page_settings\',
    array(
      \'page_for_search\'
    )
  );

  register_setting(\'reading\',\'page_for_search\', \'esc_attr\');
}

function custom_page_settings_helper_text() {
  echo \'<p>You can define default pages below.</p>\';
}

function page_for_search_callback($args) {
  echo wp_dropdown_pages( array( \'name\' => $args[0], \'echo\' => 0, \'show_option_none\' => __( \'&mdash; Select &mdash;\' ), \'option_none_value\' => \'0\', \'selected\' => get_option( \'page_for_search\' ) ) );
}
您的客户端将能够在设置->阅读页面中定义搜索页面,您可以轻松地在搜索中添加字段。php模板如下:

<?php $search_page_id = get_option(\'page_for_search\'); ?>
<h1><?php echo get_the_title($search_page_id); ?></h1>
<div class="content"><?php echo get_post_field(\'post_content\', $search_page_id); ?></div>
您可以阅读有关设置api的更多信息here.

相关推荐

Media searching ignored

我们的网站使用WordPress,有很多媒体文件。我们网站的媒体名称格式如下[Car brand\'s name]-[number].jpg, 例如Tesla-1.jpg 或Aston Martin-3.jpg. 因此,我们可以通过搜索文章的名称轻松找到文章的特定媒体。但突然间,我们找不到媒体。我们正在尝试搜索名称为的媒体,但搜索结果不变。(不搜索任何内容时的媒体屏幕)(搜索Aston Martin时的媒体屏幕)当然,在填充搜索文本框后,它会显示一个加载图标,但结果总是一样的。为什么会发生这种情况?更新+