我想创建一个短代码,以在文档中搜索某个元素,该元素的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)" }
那不是我的文档:-/
答案 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来做,但是我懒得在其中投入太多...
无论如何希望它会有所帮助。