当点击搜索图标/菜单图标时,Google CSE在移动设备上通过Chrome/Safari出现故障。如何将Google CSE设置为默认主题搜索

时间:2020-02-11 作者:Tug

让我简要回顾一下标题中搜索的问题。在我们的网站上,通过Google Chrome/Safari for mobile或Google Chrome incognito for desktop,触摸标题中的搜索图标或菜单图标,会出现高亮动画,但搜索框不会填充。相反,它会在URL的末尾添加一个标签,并将您跳到顶部。要解决此问题,必须刷新页面。此外,一旦您提交搜索并进入搜索结果页面,然后单击菜单或搜索图标,它会添加一个标签,清除搜索结果,并将您跳到顶部。刷新页面将解决此问题,但您的搜索结果将不存在。我无法通过Mozilla Firefox或Webroot Secure Anywhere浏览器复制此问题,无论是移动浏览器还是桌面浏览器。话虽如此,我已经将其缩小到两个特定的浏览器。我还想提到的是,搜索结果页面本身没有问题。搜索框和结果正常工作。

此外,我的目标是用Google自定义搜索取代标题中的主题搜索,我相信我可以用searchform实现这一点。php文件?我坚信这与searchform有关。php和/或搜索。php文件(下面列出了两个原始代码)。我对如何更改searchform做了一些研究。php文件添加谷歌CSE,我能找到的都是过时的文章。

我们使用WordPress,因此我在这里,并使用默认主题将布局设置为压缩的Google CSE设置为压缩,并添加了CSS来设置搜索框和结果的样式。我做了几次测试,只有一个结果占了上风。此外,在进行所有测试时,我要注意的一件事是,我通过浏览器和网站的超级缓存清除了缓存。改变主题奏效了。谷歌Chrome手机版和隐姓埋名桌面版都没有问题。我们的主题BuddyBoss有一个搜索。php文件和searchform。php文件。我切换到的主题只有一个searchform。php文件(不确定这是否重要)。我删除了searchform中的PHP。php文件并添加了以下代码(使用我的子主题):

<script>
(function() {
    var cx = \'CSE ID\';
    var gcse = document.createElement(\'script\');
    gcse.type = \'text/javascript\';
    gcse.async = true;
    gcse.src = (document.location.protocol == \'https:\' ? \'https:\' : \'http:\') +
        \'//cse.google.com/cse.js?cx=\' + cx;
    var s = document.getElementsByTagName(\'script\')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>
<gcse:searchbox-only resultsUrl="https://www.example.com/"></gcse:searchbox-only>
我就这个问题联系了Google,他们告诉我我使用了一个不推荐使用的代码,并给了我一个链接,提供了有关元素控制API的详细信息https://developers.google.com/custom-search/docs/element. 那是当我发现上面的代码在我的searchform中时。php文件是以前的版本。然后,我按照谷歌的指示:

<!-- Put the following javascript before the closing </head> tag
and replace 123:456 with your own Custom Search engine ID. -->
<script async src="https://cse.google.com/cse.js?cx=123:456"></script>

<!-- Place this tag where you want both of the search box and the search results to render -->
<div class="gcse-search"></div>
然后我试着保留searchform。php代码与主题开发人员的代码相同:

<?php
/**
 * The template for displaying search form
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#search-result
 *
 * @package BuddyBoss_Theme
 */

?>

<form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
    <label>
        <span class="screen-reader-text"><?php esc_html_e( \'Search for:\', \'buddyboss-theme\' ); ?></span>
        <input type="search" class="search-field-top" placeholder="<?php echo esc_attr( apply_filters( \'search_placeholder\', __( \'Search\', \'buddyboss-theme\' ) ) ); ?>" value="<?php echo get_search_query(); ?>" name="s" />
    </label>
    <input type="submit" class="search-submit" value="<?php echo esc_attr_e( \'Search\', \'buddyboss-theme\' ); ?>" />
</form>
然后,我创建了自己的搜索。php,并用Google CSE的“获取代码”代码填写:

<script async src="https://cse.google.com/cse.js?cx=My ID"></script>
<div class="gcse-search"></div>
这是我们的主题搜索。php文件(如果有人发现它有用):

/**
 * The template for displaying search results pages
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#search-result
 *
 * @package BuddyBoss_Theme
 */

get_header();

$blog_type = \'standard\'; // standard, grid, masonry.
$class = \'bb-standard\';
?>

<div id="primary" class="content-area">
    <main id="main" class="site-main">

        <?php if ( have_posts() ) : ?>
            <header class="page-header">
                <h1 class="page-title">
                <?php
                    /* translators: %s: search query. */
                    printf( esc_html__( "Showing results for \'%s\'", \'buddyboss-theme\' ), \'<span>\' . get_search_query() . \'</span>\' );
                    ?>
                    </h1>
            </header><!-- .page-header -->

            <div class="post-grid <?php echo esc_attr( $class ); ?>">
                <?php
                /* Start the Loop */
                while ( have_posts() ) :
                    the_post();

                    /*
                     * Include the Post-Format-specific template for the content.
                     * If you want to override this in a child theme, then include a file
                     * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                     */
                    get_template_part( \'template-parts/content\', apply_filters( \'bb_blog_content\', get_post_format() ) );

                endwhile;
                ?>
            </div>

            <?php
            buddyboss_pagination();

        else :
            get_template_part( \'template-parts/content\', \'none\' );
            ?>

        <?php endif; ?>

    </main><!-- #main -->
</div><!-- #primary -->

<?php get_sidebar(\'search\'); ?>

<?php
get_footer();
在搜索中实现该代码。php文件无法工作。在这一点上,我只是在尝试不同的东西并进行测试。我现在正试着熟悉WordPress的get\\u search\\u表单(array$args=array()),以便了解如何在我们的webiste上实现我自己的Google CSEhttps://developer.wordpress.org/reference/functions/get_search_form/.

我在编码方面是新手,如果有人能给我指出正确的方向,我希望得到任何关于我能做什么的反馈!我很感激你给我的时间以及我得到的任何帮助。希望这将是一件容易修复的事情。

这是超长的,但我尽量描述。我希望我很清楚,很容易理解,并且回答了你所有的问题。非常感谢。

感谢和问候,

乔希

我需要帮助的博客是www.tips4gamers.com. 这可能是一些有用的信息,哈哈。

1 个回复
SO网友:Tug

我找到了解决问题的方法。在另一个论坛上,有人说,这听起来像是你点击图标时应该触发的脚本掉了下来。事实就是这样。一个名为SG Optimizer的插件将代码添加到我的中。htaccess文件延迟了渲染阻塞JS,所以我停用了该功能,问题就消失了。

我还想出了在我的孩子主题的搜索表单中添加什么。php文件。我稍微修改了主题的代码,您可以比较一下:

我的主题的搜索表单。php文件:

<form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
    <label>
        <span class="screen-reader-text"><?php esc_html_e( \'Search for:\', \'buddyboss-theme\' ); ?></span>
        <input type="search" class="search-field-top" placeholder="<?php echo esc_attr( apply_filters( \'search_placeholder\', __( \'Search\', \'buddyboss-theme\' ) ) ); ?>" value="<?php echo get_search_query(); ?>" name="s" />
    </label>
    <input type="submit" class="search-submit" value="<?php echo esc_attr_e( \'Search\', \'buddyboss-theme\' ); ?>" />
</form>
我的代码:

<form role="search" class="search-form" action="<?php echo ( \'/_search\' ); ?>">
    <label>
        <span class="screen-reader-text"><?php esc_html_e( \'Search for:\', \'buddyboss-theme\' ); ?></span>
        <input type="search" class="search-field-top" placeholder="<?php echo esc_attr( apply_filters( \'search_placeholder\', __( \'Search\', \'buddyboss-theme\' ) ) ); ?>" value="<?php echo get_search_query(); ?>" name="q" />
    </label>
</form>
如您所见,我去掉了get方法,删除了/表单上方的input type=“submit”行,将name=“s”替换为name=“q”,并在第一行更改了echo URL。我可以保持我的主题搜索框的样式,同时让它在谷歌CSE上执行结果。

我不确定我的修复是否合适,但它确实有效!

相关推荐

使用定制post_type的快速草稿小部件(dashboard.php)

我正在尝试修改WP dashboard小部件“快速草稿”,以接受自定义post\\u类型的avada\\u公文包(avada Fusion主题),但页面只是挂起每个提交测试。这里有一个类似的问题:Adding Custom taxonomies to Press This panel 一位成员提到他们已经成功了,但不幸的是,他们删除了他们的例子,因为帖子是关于“按这个”。我想知道我是否正确调用了post\\u类型。任何帮助都将受到感激。就我所知:/** * The Quick Draft wid