WordPress简码:指的是DOM中的元素

时间:2019-03-02 02:42:48

标签: php wordpress dom shortcode

我想创建一个短代码,以在文档中搜索某个元素,该元素的DOM位置与该短代码具有定义的关系。

示例:

<div>
  <div class="target" data-target="SomeValue">SomeValue<div>
  <div>more html here</div>
  <div>[gettarget]</div>
</div>

<div>
  <div class="target" data-target="SomeOtherValue">SomeOtherValue<div>
  <div>more html here</div>
  <div>[gettarget]</div>
</div>

函数gettarget如何访问类target的同级div(将恰好是一个)并获取其内容(或其data-target属性),这无关紧要)。所以最后我想要

  • gettarget的第一个呼叫,可以访问SomeValue
  • 第二次致电gettarget才能访问SomeOtherValue

我能得到的最远的是:

$doc = new DOMDocument();
echo $_SERVER['SCRIPT_NAME'];
$doc->loadHTMLFile($_SERVER['SCRIPT_NAME']);
$xpath = new DOMXpath($doc);
var_dump($xpath);

产生:

/wp-admin/admin-ajax.phpobject(DOMXPath)#11113 (1) { ["document"]=> string(22) "(object value omitted)" }

那不是我的文档:-/

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说

  

-函数gettarget如何访问类target的同级div?-不能,在wordpress中,当调用[您的简码]时,页面尚未完成。此外,仅将打开和关闭短代码[start]content[/start]中的内容传递给该短代码,所有外部内容均不可访问(无需使用javascript)

     

您可以使用过滤器,例如add_filter( 'the_content', 'filter_function_name' ),正则表达式/\[gettarget\]/,以及不是短代码[gettarget]的东西,因为WP如果它们不是实际的短代码,则WP会将其保留。然后,当您掌握了全部内容后,就可以访问DOM中想要的内容。等等

这似乎和其他答案一样好,所以...

类似这样的东西:

add_filter( 'the_content', 'filter_function_name' );

function filter_function_name($content){
    //if no [gettarget] bail
    if(false === strpos($content,'[gettarget]')) return $content;


    $doc = DOMDocument::loadHTML($content);
    $xpath = new DOMXpath($doc);
    var_dump($xpath);

    //for example remove [gettarget] our not shortcode, shortcode
    $content = preg_replace('/\[gettarget\]/', '', $content);

    return $content;
}

我只使用过一次Dom Document,(那时我了解了PHPQuery,从此再也没有看过)。但是通过这种方式,您不必两次加载页面,我真的不确定您从wordpress内部从这个$doc->loadHTMLFile($_SERVER['SCRIPT_NAME'])得到什么。也许只是模板文件之类的?

通过上面的方法,我知道content是wordpress将在页面上显示的内容。更不用说我不知道​​您将如何以自己的方式进行任何输出更改。这样,您可以修改内容并将其返回并进行更改。

-note-最后一分钟,已经一分钟了,但是如果我记得您是否有一个简码[gettarget],但实际上没有简码,它只会保留在内容中。如果是正确的话,那么我上面所说的应该很接近。我们可以利用它来发挥自己的优势,并使其看起来像是WP管理区域内和输出中的简码(通过删除它)。

我考虑过要用JavaScript来做,但是我懒得在其中投入太多...

无论如何希望它会有所帮助。