当我使用浏览器返回时,自定义函数出现问题

时间:2014-12-09 作者:Manolo

我有一个自定义函数functions.php 要显示列出的每个帖子(最后的条目、类别和标签页)的典型社交媒体按钮,请执行以下操作:

//Social Media
function showSocialButtons() { ?>
    <div class="social-buttons">
        <div class="twitter">
            <a href="https://twitter.com/share" class="twitter-share-button" data-url="<?php the_permalink() ?>" data-text="<?php the_title() ?>" data-lang="es" data-count="vertical" data-via="twitterUser"></a>
        </div>&nbsp;
        <div class="facebook"><iframe src="http://www.facebook.com/plugins/like.php?href=<?php the_permalink() ?>&amp;layout=box_count&amp;action=like&amp;share=true&amp;colorscheme=light&amp;locale=es_ES" style="height:87px; width:74px"></iframe></div>
        <div class="g-plusone" data-size="tall" data-href="<?php the_permalink() ?>" ></div>
    </div>

<?php
}

add_action(\'show_social_buttons\',\'showSocialButtons\');
然后,在模板文件中的循环内:

<?php do_action( \'show_social_buttons\' ); ?>
这是正确的,但当我回到帖子列表时。E、 我在主页上列出了最近的帖子。我点击一篇帖子,然后返回主页。如果我这样做,社交按钮会显示出来,但并不总是在正确的帖子中,我的意思是,例如,第二篇帖子包含第一篇帖子社交按钮,反之亦然。知道是什么导致了这个问题吗?

1 个回复
SO网友:Joe Bop

恐怕我无法复制你的问题。

我不确定为什么会出错,因为我看不到正在使用的循环,但您可以确保它工作的一种方法是调整您的函数以接受$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;
我希望这有帮助。

结束

相关推荐

需要通过Functions.Php注销脚本

嗯,我有点失望Wordpress注销脚本有多么困难。首先,我得到了所有句柄的列表,所以我查找了它,句柄是jquery migrate然后我将其添加到我的函数中。phpwp_dequeue_script(\'jquery-migrate\'); 还有这个wp_dequeue_script(\'jquery\'); 尽管脚本已正确注册,但它什么也不做。版本字符串出了什么问题,我想不出为什么它们仍然包含这些字符串,应该尽快在下一个WP版本中删除,它们只会在某些情况下阻止缓存正确缓存,这很烦人