在这里,您要完成的不仅仅是调用函数make_sticky
因为此函数实际上不会打印任何内容供最终用户执行操作。这里将发生的是,循环中的每个帖子都将设置为sticky
每次调用该方法时。
因此,要解决您的问题,您需要在WordPress管理中创建一个页面,然后在主题中创建一个页面模板并将其分配给该页面。
为了便于解释,我会说你调用了此页make-sticky
, 现在,您可以通过创建如下链接访问此页面:
<?php echo add_query_arg( array( \'_post\', get_the_ID() ), get_permalink( get_page_by_path( \'make-sticky\' ) ) );
这将输出
http://yoursite.com/make-sticky/?_post=130
.
模板文件必须仅包含模板元数据部分:
<?php
/*
* Template Name: Make Sticky
* Description: This page will make the Post Sticky
*/
之后,您将在
functions.php
:
<?php
function q166504_make_sticky_redirect(){
// If we are not on that page template just leave
if ( ! is_page_template( \'template-make-sticky.php\' ) ){
return;
}
// If the _post _GET param doesnt exist leave
if ( empty( $_GET[\'_post\'] ) ){
exit( wp_redirect( home_url() ) );
}
$post_id = absint( $_GET[\'_post\'] );
// If the user doesn\'t have permission leave
if ( ! current_user_can( \'edit_others_posts\' ) ){
exit( wp_redirect( get_permalink( $post_id ) ) );
}
// Safe to execute the action
$is_sticky = (bool) get_post_meta( $post_id, \'sticky\', 0 );
// Make the toggle
update_post_meta( $post_id, \'sticky\', ! $is_sticky );
// Now redirect back to the post
exit( wp_redirect( get_permalink( $post_id ) ) );
}
add_action( \'template_redirect\', \'q166504_make_sticky_redirect\' );
此方法将截取WordPress的模板,然后将用户重定向到已编辑的帖子,如果用户没有权限或出现问题,则将重定向到主页。