WP update_post_meta link loop

时间:2014-10-26 作者:Wojciech Parys

我试图通过循环中的链接更新帖子元。这是代码

function make_sticky($post_id) {
    // Update, add, or delete field ----------------------------------
    if ( get_post_meta($post_id, \'sticky\', FALSE ) ) {
        if ( get_post_meta($post_id, \'sticky\', \'1\' ) ) {
            update_post_meta($post_id, \'sticky\', \'0\');
        } else {
            update_post_meta($post_id, \'sticky\', \'1\');
        }
    } else {
        add_post_meta($post->ID, \'sticky\', \'0\');
    }
}
和链接:

<a href="<?php make_sticky( $post->ID ); ?>"><i class="fa fa-star"></i></a>
这是可行的,但它改变了循环中所有帖子的meta。有什么建议可以绕过它吗?

@编辑更改每页中所有帖子的元数据重新加载:/

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

在这里,您要完成的不仅仅是调用函数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的模板,然后将用户重定向到已编辑的帖子,如果用户没有权限或出现问题,则将重定向到主页。

SO网友:Wojciech Parys

好的,我放弃你的方式,创建页面Make Sticky 使用页面模板。然后我换了一些。。我使用此函数创建了链接:

<?php if( current_user_can(\'editor\') || current_user_can(\'administrator\') ) {  ?> 
            <div class="manage">
                <a href="<?php echo add_query_arg( array( \'_post\' => get_the_ID() ), get_permalink( get_page_by_path( \'make-sticky\' ) ) ); ?>"><i class="fa fa-star"></i></a>
            </div>                
            <?php } ?>
所以现在我不需要检查我是管理员还是编辑器,下一步是页面模板文件。我重新编码你的函数并粘贴到make-sticky.php 模板:

<?php
/*
 * Template Name: Make Sticky
 * Description: This page will make the Post Sticky
 */

    // 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 ) ) );
    }

    // Make the toggle
    if ( get_post_meta($post_id, \'sticky\', \'1\' ) ) {
        update_post_meta($post_id, \'sticky\', \'0\');
    } else {
        update_post_meta($post_id, \'sticky\', \'1\');
    }

    // Now redirect back to the post
    exit( wp_redirect( home_url(\'\') ) );

?>
现在一切正常。感谢您的帮助:)

结束

相关推荐

wordpress nested loop

我正在构建嵌套循环查询。我有一个元框,可以捕获邮件id(分类器和转发器)。到目前为止,我的代码while ( have_posts() ) : the_post(); ?> <div id=\"<?php echo $post->post_name; ?>\"> <h1><?php the_title(); ?></h1> <?php the_content