我正在创建一个非常基本的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。
非常感谢您的帮助。谢谢
最合适的回答,由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文件。
希望这对你有帮助!