我尝试使用以下模式显示快捷码:
class callShortCode {
function __construct() {
global $post;
$this->dos($post);
}
private function dos($post){
global $post;
$pid = get_the_ID();
$archive_id = get_queried_object_id();
if($archive_id == $pid) {
add_action(\'wp_footer\', array($this, \'show\'));
}
}
// shortcode call
function show($post) {
$pid = get_the_ID();
$archive_id = get_queried_object_id();
$the_query = new WP_Query( array(\'post_type\' => \'custom_post_type\') );
if ($the_query->have_posts()) {
while ($the_query->have_posts()){
$the_query->the_post();
if($pid == $archive_id) {
echo do_shortcode("[my_shortcode id=\'5\']");
}
}
}
}
}
new callShortCode();
但它在前端返回如下错误:
Fatal error: Call to a member function get_queried_object_id() on a non-object in D:\\xxxx\\xxxx\\xxxxx\\wp-includes\\query.php on line xx
我试着用
init
操作,但它不希望读取前端上的当前页面id而不显示任何内容。我已经检查过
$pid = get_the_ID();
和
$archive_id = get_queried_object_id();
使用时返回0
init
钩子调用对象。
我还用plugins_loaded
但它返回的是相同的致命错误!
我知道这是因为它叫得太早了!但是我该怎么做才能使它正常工作呢?
最合适的回答,由SO网友:TheDeadMedic 整理而成
在连接到template_redirect
措施:
function wpse_177056_init_shortcode() {
new callShortCode();
}
add_action( \'template_redirect\', \'wpse_177056_init_shortcode\' );
SO网友:cybmeta
当前对象的ID只有在执行实际的主查询之后才可用。而且get_queried_object_id()
使用global $wp_query
对象如果尚未设置此对象,则调用其某些方法或属性将不起作用。
因此,您必须使用get_queried_object_id()
后来符合the codex, 行动挂钩wp
是设置WP对象后第一个可用的。在您的情况下,您还可以使用wp_footer
当您尝试执行快捷码时,请直接执行操作:
class callShortCode {
function __construct() {
$this->dos();
}
function dos() {
$archive_id = get_queried_object_id();
//Replace with your logic
if( $archive_id === 451) {
$this->show();
}
}
// shortcode call
function show() {
$the_query = new WP_Query( array(\'post_type\' => \'custom_post_type\') );
if ($the_query->have_posts()) {
while ($the_query->have_posts()){
$the_query->the_post();
echo do_shortcode("[my_shortcode id=\'5\']");
}
}
wp_reset_postdata();
}
}
add_action( \'wp_footer\', function() {
new callShortCode;
});
Note: 我已经删除了
$pid == $archive_id
因为实际上我不理解你的逻辑
$pid = get_the_ID();
和
get_the_ID()
应返回相同级别的
get_queried_object_id()
在单柱视图中。