WordPress操作挂钩和帖子ID?

时间:2011-07-09 作者:dsignr

我正在创建一个非常基本的Wordpress插件,其目的是在每篇文章旁边显示一个数值。

我的插件函数逻辑(plugin.php) 这是:

<?php
function foo($post_id){
$somevalue=1 //Some random value
add_post_meta($post_id, \'posts_numericalvalue\', \'0\', true) or update_post_meta($_post_id, \'posts_numericalvalue\', $somevalue);
}

add_action(\'post_save\', \'foo\');
?>
在我的模板中index.php, 我(在循环中):

<?php
....
printf(__(\'Permanent Link to %s\', \'kubrick\'), the_title_attribute(\'echo=0\'));
$numerical_val = get_post_meta($post->ID, posts_numericalvalue); 
echo \'this post has a value of \' .$numerical_val;
....
?>
1)上述代码显然不起作用。我想这是因为我的插件功能。php要求我传递当前帖子的ID,但我猜操作挂钩不会传递帖子的当前ID(如果我错了,请纠正我)。如何将帖子ID传递给插件内的函数。php使用动作挂钩?

2) 还有其他优雅的方式吗?我只需要给我的帖子分配一个数值,如果帖子已经有了,这个数值应该更新为1;如果帖子还没有,这个数值应该更新为0。

非常感谢您的帮助。谢谢

2 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

挂起save\\u post操作时,您确实需要隔离您的操作,以便每个页面/post/post\\u类型的save都不会试图将您的post meta添加到帖子中。

function foo_save(){
    if(isset($_REQUEST[\'bar\')
        update_post_meta($_REQUEST[\'post_ID\'], \'bar\', $_REQUEST[\'bar\']);
}
add_action(\'save_post\', \'foo_save\');
上面代码的主要问题是posts\\u numericalvalue需要引号。此外,要使用$post->ID,您需要确保您的代码在循环中或声明全局$post;如果您在循环之外使用它,则在代码上方的某个位置。

if(have_posts()):
    while(have_posts()):
        the_post();
        $foo = get_post_meta($post->ID, \'bar\', true);
        echo $foo;
    endwhile;
else:

endif;
此外,如果您将此插件分发给公众,则需要创建一个函数来过滤内容并在其中添加帖子元,因为您无法真正访问模板文件。

如果这只是供您在主题中使用,我会将函数foo\\u save()放在您的函数中。改为php文件。

希望这对你有帮助!

SO网友:Rarst

钩子是save_post, 不post_save.

结束

相关推荐