WordPress通过单击管理员中的自定义链接来更新自定义帖子状态

时间:2018-11-02 18:10:36

标签: wordpress custom-post-type custom-wordpress-pages

我有一个网站,可以从用户那里获得帖子,这些帖子以状态待定的方式保存在WP中作为自定义帖子, 管理员在该自定义帖子类型页面中具有自定义链接。拒绝 批准应将职位状态更改为公开 拒绝应将发布状态更改为垃圾桶/删除

enter image description here

任何人都可以通过单击这些自定义链接告诉任何我可以运行以更改后端状态的帖子的钩子

批准代码|拒绝按钮,如果有人想看

$df1
  var1 var2
1    a    a
2    b    b
3    c    c

$df2
  var1 var2
1    a    a
2    b    b
3    c    c

1 个答案:

答案 0 :(得分:1)

您可以执行类似的操作-有点古怪,使用jQuery,但是使用Ajax方法可以快速解决您的问题,因此所有操作都可以在管理屏幕上实时进行。您可以批准/拒绝多个帖子,而无需重新加载页面,包括一些颜色反馈以使您知道发生了什么。

您需要添加2个新操作:

def toLong(s):
  ls = [ord(i) for i in s]
  l = len(ls) -1
  sum = 0
  for i, v in enumerate(ls):
      sum += v*(256**(l-i))
  return sum

print(toLong("\x00\x00\x01f\xd3d\x80X"))

然后添加以下功能:

add_action( 'wp_ajax_set_post_status', 'set_post_status_ajax_handler' );
add_action( 'admin_footer', 'set_post_status_js' );

function set_post_status_js()
{
  $nonce = wp_create_nonce('set_post_status');
  $ajax_url = admin_url('admin-ajax.php'); ?>

  <script type="text/javascript">
    (function($){
      $(document).ready(function(){
        $('.decision a').click(function(event){
          event.preventDefault();
          $.post( "<?= $ajax_url; ?>", {
            nonce: "<?= $nonce; ?>",
            action: 'set_post_status',
            post_id: $(this).data('post_id'),
            status: $(this).data('status'),
          }, function(data){
            if (data.ok) {
              var postStateLabel = (data.status === 'publish') ? '<span style="color: #009900;">Approved</span>' : '<span style="color: #990000;">Rejected</span>';

              $('#post-' + data.id)
                .css('background', data.status === 'publish' ? '#EEFFEE' : '#FFEEEE')
                .find('.post-state').html( postStateLabel );
            }
          });
        });
      });
    })(jQuery)
  </script>

  <?php
}

最后,您需要更改对此HTML的“批准/拒绝”链接:

function set_post_status_ajax_handler()
{
  $nonce = $_POST['nonce'];

  if ( ! wp_verify_nonce( $nonce, 'set_post_status' ) )
    die ( 'Not permitted');

  // Extract the vars from the Ajax request
  $post_id = $_POST['post_id'];
  $status = $_POST['status'];

  // Now update the relevant post
  $post_id = wp_update_post([
    'ID' => $post_id,
    'post_status' => $status,
  ], true);

  // make sure it all went OK
  if (is_wp_error($post_id))
  {
    $response = [
      'ok' => false,
    ];
  } else 
  {
    $response = [
      'ok'      => true,
      'id'      => $post_id,
      'status'  => $status,
    ];
  }

  // Return the response
  wp_send_json( $response );
}

希望这会让您排序。干杯。