恐怕我无法复制你的问题。
我不确定为什么会出错,因为我看不到正在使用的循环,但您可以确保它工作的一种方法是调整您的函数以接受$post输入:
//Social Media
function showSocialButtons( $post = null ) {
if( ! $post ){
global $post;
}
//The output
}
不过,您需要更改函数来反映这一点。例如:
the_title();
将成为
echo get_the_title( $post->ID );
或者只是
echo $post->post_title;
此外,这不太可能是造成问题的原因,但我认为您没有将动作挂钩用于其预期目的。WP中的操作应被视为类似于javascript中的事件(但保持同步性)。您当前使用它的方式与无参数函数调用的方式是一条冗长的路线。
一般来说,动作应该放在函数内部或脚本的重要部分,以便在这种情况下可以附加多个函数:
function showSocialMediaButtons(){
//Some code here
do_action( \'social_media_buttons_shown\' );
}
结合:
add_action( \'social_media_buttons_shown\', \'myFuncToDoAfterEveryShowingOfSocialMediaButtons\' );
意味着每次
showSocialMediaButtons();
被称为,
myFuncToDoAfterEveryShowingOfSocialMediaButtons();
之后将立即调用。
无论如何,在你的情况下,而不是使用
//functions.php
add_action( \'show_social_buttons\', \'showSocialButtons\' );
以及
//template.php
do_action( \'show_social_buttons\' );
仅使用
//template.php
showSocialButtons();
或者,如果您已将函数更改为使用$post变量作为参数,如我上面所建议的:
//template.php
$q = new WP_Query( $args );
while( $q->have_posts() ): $q->next_post(); //or however you\'ve done your loop
.
.
.
showSocialButtons( $q->post ); //or whatever is referencing the post at this time.
.
.
.
endwhile;
我希望这有帮助。