benjaminmedia/wp-cxense

此插件通过添加元标签和调用cXense API将您的网站与cXense集成

安装次数: 10,603

依赖: 1

建议者: 0

安全: 0

星标: 2

关注者: 14

分支: 1

开放问题: 1

类型:wordpress-plugin


README

此插件使您的WordPress网站能够与cXense集成。它添加了cXense扫描您的网站所需的元标签和脚本。它还会在您更改内容时调用cXense。最后,它还提供了保存针对不同内容类型的cXense推荐小部件的可能性,并提供挂钩在您的视图/主题中调用它们。

要求

  • WordPress 4.3或更高版本
  • 语言支持(可选):必须安装并激活Polylang插件,版本1.8.4或更高
  • PHP 7.1或更高

安装/配置

通过composer安装

composer require benjaminmedia/wp-cxense

从以下位置下载最新版本:https://github.com/BenjaminMedia/wp-cxense/releases 然后解压并将其放置在您的/wp-content/plugins目录中。

设置

安装并激活插件后,请确保您已设置一组cXense API的API凭据。获取您的凭据后,您可以访问标记为cXense的设置页面。在这里,您必须输入您的 cXense 网站IDcXense API用户cXense API密钥以及最终的 cXense 组织前缀

请记住,直到您在设置页面中检查了 启用 开关,插件将不会工作

小部件

插件将为您的WordPress安装中可用的每个帖子类型生成一个 CX 小部件ID 设置字段。在这里,您必须输入要在您的内容类型中表示的cXense推荐小部件ID。

为了调试目的,您可以启用或禁用查询缓存。在生产环境中建议启用。

按小部件ID排序将仅在wp-base中的小部件排序选项中使用。

渲染小部件

为了渲染您的帖子中可用的小部件,您应该确保您已在插件设置页面中填写了 CX 小部件ID 字段。

在渲染小部件时,插件提供了两个选项

  1. 让cXense渲染小部件的HTML
  2. 获取小部件的数据并自己构建HTML

选择您想使用的方法后,您应该前往代表您的post_type单视图的主题文件。从该文件中,您可以调用以下方法来获取小部件数据

让cXense渲染小部件的HTML
WpCxense::instance()->render_widget();

此函数的示例输出可能如下所示

<div id="targetElement">
        <script type="text/javascript">
            document.write(data.response.template + '\n');
        </script>

    <div class="item">
        <a id="cXLinkIditl9abmrwgnm6p94" href="http://api.cxense.com/public/widget/click/GHVxM-yuEld7tlHB8lLrWC5jLoQYrF5gUs1rQK6CLuzqTVYiNXv6oZIhhNasqiBbPYlY2_nBmMn2aM8imnN5Y0VXxers9cYtaPN1-kIKDNd-dw78wcSKMCLNK45PnASBJagtCbsrhK9JwUfBEeuVtGs1L3HeqDWe5qKvKc7dWeFC77wB_w5fBFQlcXCgyOLmfQwO21Cfh2QcoBs4J8A2pN6OkKQOPyC0lwIbM30ZaHAUZ774R5ASnLc6GLOpPyN38YwdvjAL7iAigpE4fpAcq6O5HXG6PbQljmp-wk1GJvw6hWAigKp1gsSJmhPhZjhIP-pbABDfOl7OkS-k42wjAxKuCeukqgJW04_J0tWRGygNzTm4Tno54OQAgHVWnh4iZDyOaXBjkKAGQHDMPY7IGBfSjDZKOiviklKINjAbb1STXbgDr27BhMZKuWC-y4fMWVnganRI7IVRA8bgd6zl0V4DX9VjvTUEJLSOWq-T6kEzsdG-ENGrw4EVauuyd1h9kysOAuH_egm1XoDcmHpYSMzPmhmyeOgfJpGFg6L09vXFTi6GQ39q4kJYMeQSlC_xO3f1vJzIhn9Y9D6kRIVQMASyFC31lcSwR9pVoOcQav5duA-d4wVciKTKq_RehjVfwqEFxYz9v0WTo8Sqcoc0" target="_top">
            <div class="thumbnail" style="width: 300px; height: 200px;  overflow: hidden; position: relative;"><img style="position: relative;   left: 0px;   top: -7.2px;" src="http://content-thumbnail.cxpublic.com/content/dominantthumbnail/f95381682e3604de99d30788b24fb3a1538616ee.jpg?57e79849" width="300" height="236" alt=""></div>

            <div class="text-wrapper">
                <h3 class="title">Hindbærsmoothie med æble og lakrids</h3>

            </div>
        </a>
    </div>



    <div class="item">
        <a id="cXLinkIditl9abmrpj1kla6v" href="http://maaltid.nu/herkules-pavillonens-bedste-frokost-opskrifter" target="_top">
            <div class="thumbnail" style="width: 300px; height: 200px;  overflow: hidden; position: relative;"><img style="position: relative;   left: 0px;   top: -7.2px;" src="http://content-thumbnail.cxpublic.com/content/dominantthumbnail/cf4b03ff330434ddec3447a014ccbd4a15089290.jpg?57d6c1e2" width="300" height="236" alt=""></div>

            <div class="text-wrapper">
                <h3 class="title">Herkules Pavillonens bedste frokost-opskrifter</h3>

            </div>
        </a>
    </div>

	...

</div>
获取小部件的数据并自己构建HTML
WpCxense::instance()->get_widget_data();

此函数的示例输出可能如下所示

array (size=12)
  0 =>
    object(stdClass)[2636]
      public 'recs-articleid' => string '795' (length=3)
      public 'bod-pagetype' => string 'recipe' (length=6)
      public 'dominantthumbnail' => string 'http://content-thumbnail.cxpublic.com/content/dominantthumbnail/f95381682e3604de99d30788b24fb3a1538616ee.jpg?57e79849' (length=117)
      public 'dominantthumbnaildimensions' => string '300x236' (length=7)
      public 'title' => string 'Hindbærsmoothie med æble og lakrids' (length=37)
      public 'click_url' => string 'http://api.cxense.com/public/widget/click/HV4bL7qxuVIVUmrMEsh4zQ6S2A5_BkkxEuByIzyDKMZAYCrJlJOTpy7QFvYxf7dkW0ljBE_55ig9vYxG3FNaXmKGsr03HH5w1wa7-E6mbJI-gdqHJNx6pgIjvKyM8TUGnhfwe0NsyjAkgzirNM66WfPhG9_Z9lsiWIJauO3C82KWYdRhA99EBXg6Ynsh9xwIq62wNJAaj_OPTVFhUuGiLxW7uVQ4DNT0BjRcn8ne0Uq6y8Ew0DYUDCfCFp6DwOy_D9MK7j5wpKSfRykLOGNNo35udNcfALBcZJfoMZ7Uqgs19IZeGrAv11RDIz1cNBmWq3yEn-QKqeKFgK7cqwjKeCr91PERbwGbDu4kN9xkv1NPjTK1M_attpQjlCLy3E9_JstO-aCxP6XtmtnIExUnl1Qq7iVPXAbP3fxlT3wmIOetk4IvoGKsXhdFkRIMCD1owQwY27bVvzwuPCgTXJ-7UO'... (length=599)
      public 'url' => string 'http://maaltid.nu/opskrifter/hindbaersmoothie-med-aeble-og-lakrids' (length=66)
  1 =>
    object(stdClass)[2672]
      public 'recs-articleid' => string '1369' (length=4)
      public 'bod-pagetype' => string 'recipe' (length=6)
      public 'dominantthumbnail' => string 'http://content-thumbnail.cxpublic.com/content/dominantthumbnail/6b0ddce458039f3905b5b3515356002536ab614c.jpg?57ea261a' (length=117)
      public 'dominantthumbnaildimensions' => string '300x236' (length=7)
      public 'title' => string 'Italiensk til middag: Risotto med 2 slags græskar og salvie' (length=60)
      public 'click_url' => string 'http://api.cxense.com/public/widget/click/mLsD8MoXunkEcOtky6wQJXpRjzYcvvrFoXsONQdOI5FDqsmnlun6sVcaK-PIsvyT9KoXSvOKxiS4wzBrjGb0PaCtk_1bFn88sHSzq7LJF4CL7-Q4-50nJl3JC3oyrnAM1W_Cub7qXcAHSFmBjVkBjAGRaiA_F-Du9Y1q2by9YikilWco43hRZeUHVyQ2RLOZ7as8C1SeEXdKHeDi8HT5SGqMox-hAdBhwHNLtXLdJ_t1u9G90QOmQw-xitTc4PUknHSdtPyiDgYrBNNxHhOehs0_wHKGxka4k-g6VOAo7ovFGF2aRB-32QAqSPu_ohd-nNO_J0tEMll1uofTI9XCePnkI2O1W0Cq6MkEcyWVZQ-72hWiTrfn2z8x-BRd9ZE8cFvdWV8OU-Ojf02KEKesGfVgUltFY-HLImdE2NCkGV-jk7RoHYXesghIvfTufvKnMORmayI5lkLDZQ5Dp7u9wh'... (length=613)
      public 'url' => string 'http://maaltid.nu/opskrifter/kom-i-godt-humor-med-graeskarrisotto-med-salvie' (length=76)
  2 => ...

文档

搜索文档

如果搜索数组中缺少'query'键,则抛出 DocumentSearchMissingSearch 异常。

搜索
WpCxense::instance()->search_documents([
    'query' => 'search_term', // mandatory
    'page' => 1, // optional, defaults to 1
    'count' => 10, // optional, defaults to 10
    'filter_operator => 'AND', // optional, defaults to OR
    'filter' => [ // optional
        'field' => [
            'value',
        ],
    ],
    'filter_exclude' => [ // optional
        'field' => [
             'value',
        ],
    ],
    'facets' => [ // optional
        0 => [
            'type' => 'string',
            'field' => 'field'
        ],
        1 => [
            'type' => 'string',
            'field' => 'field'
        ]
    ],
    'spellcheck' => true, // optional
    'highlights' => [ // optional
        0 => [
            'field' => 'body',
            'start' => '<em>',
            'stop' => '</em>',
            'length' => 50
        ]
    ]
]);

搜索文档将返回以下格式的对象

object(stdClass)[543]
  public 'facets' =>
    array (size=2)
      0 =>
        object(stdClass)[538]
          public 'buckets' =>
            array (size=6)
              ...
      1 =>
        object(stdClass)[542]
          public 'buckets' =>
            array (size=3)
              ...
  public 'totalCount' => int 79
  public 'matches' =>
    array (size=10)
      0 =>
        object(Bonnier\WP\Cxense\Parsers\Document)[521]
          public 'id' => string '551790ba522b4b9427ca947e1b3353e137d78a85' (length=40)
          public 'siteId' => string '1129402680464567580' (length=19)
          public 'score' => float 2.0455377
          public 'fields' =>
            array (size=10)
              ...
          public 'highlights' =>
            array (size=1)
              ...
  public 'spellcheck' =>
      array (size=1)
        0 =>
          object(stdClass)[663]
            public 'term' => string 'mor' (length=3)
            public 'suggestions' =>
              array (size=0)
                ...

'matches'键包含一个对象数组,这些对象具有通过魔术方法 __get() 直接访问的 'fields' 值。这意味着您可以直接使用指针调用 'fields' 中的任何字段

$objResults->matches[0]->author;

完整的文档结果如下

object(Bonnier\WP\Cxense\Parsers\Document)[710]
  public 'id' => string '551790ba522b4b9427ca947e1b3353e137d78a85' (length=40)
  public 'siteId' => string '1129402680464567580' (length=19)
  public 'score' => float 0.40566906
  public 'fields' =>
    array (size=9)
      0 =>
        object(stdClass)[715]
          public 'field' => string 'author' (length=6)
          public 'value' => string 'i form' (length=6)
      1 =>
        object(stdClass)[718]
          public 'field' => string 'bod-cat' (length=7)
          public 'value' => string 'Sund graviditet' (length=15)
      2 =>
        object(stdClass)[719]
          public 'field' => string 'bod-cat-top' (length=11)
          public 'value' => string 'Sundhed' (length=7)
      3 =>
        object(stdClass)[720]
          public 'field' => string 'bod-cat-url' (length=11)
          public 'value' => string 'http://iform.dk/sundhed/sund-graviditet' (length=39)
      4 =>
        object(stdClass)[721]
          public 'field' => string 'bod-pagetype' (length=12)
          public 'value' => string 'article' (length=7)
      5 =>
        object(stdClass)[722]
          public 'field' => string 'description' (length=11)
          public 'value' => string 'Går du med babytanker, har du en fordel, hvis du bor tæt på din mor.' (length=71)
      6 =>
        object(stdClass)[723]
          public 'field' => string 'recs-publishtime' (length=16)
          public 'value' => string '2015-04-19T22:00:00.000Z' (length=24)
      7 =>
        object(stdClass)[724]
          public 'field' => string 'title' (length=5)
          public 'value' => string 'Din mor øger dine baby-chancer' (length=31)
      8 =>
        object(stdClass)[725]
          public 'field' => string 'url' (length=3)
          public 'value' => string 'http://iform.dk/sundhed/sund-graviditet/din-mor-kan-hjaelpe-til-familieforoegelsen' (length=82)

小部件文档

如果输入数组中缺少'widget_id'键,则抛出 WidgetMissingId 异常。

如何获取cxense数据的示例

WidgetDocumentQuery::make()
                    ->addContext('url', get_permalink())
                    ->setMatchingMode($this->getCxenseTaxonomy())
                    ->addParameter('pageType', 'article gallery story')
                    ->setCategories(array($this->getCategory()))
                    ->setTags(array($this->getTag()))
                    ->get();

用户'TAX_RECENT'最近查看

此类分类法需要用户浏览器cookie。要从浏览器控制台获取它,您可以使用

cX.getUserId()