Kiểm tra xem Tiêu đề bài viết có tồn tại không, Chèn bài đăng nếu không, Thêm # Tăng dần vào Meta nếu có


9

Tôi đã có một chức năng trong đó người dùng gửi biểu mẫu và tạo một bài đăng tùy chỉnh ...

<?php $postTitle = $_POST['post_title'];
$submit = $_POST['submit'];

if(isset($submit)){

    global $user_ID;

    $new_post = array(
        'post_title' => $postTitle,
        'post_content' => '',
        'post_status' => 'publish',
        'post_date' => date('Y-m-d H:i:s'),
        'post_author' => '',
        'post_type' => 'stuff',
        'post_category' => array(0)
    );

    $post_id = wp_insert_post($new_post);
add_post_meta($post_id, 'times', '1');

}

Tôi muốn kiểm tra xem tiêu đề bài đăng có tồn tại hay không, nếu không, hãy tiếp tục và tạo bài đăng có số 1 trong trường meta và nếu nó tồn tại, chỉ cần thêm 1 vào trường meta

Câu trả lời:


7

Điều này sẽ cần một truy vấn.

Vì vậy, xây dựng trên mã của bạn:

<?php
$postTitle = $_POST['post_title'];
$submit = $_POST['submit'];

if(isset($submit)){

    global $user_ID, $wpdb;

    $query = $wpdb->prepare(
        'SELECT ID FROM ' . $wpdb->posts . '
        WHERE post_title = %s
        AND post_type = \'stuff\'',
        $postTitle
    );
    $wpdb->query( $query );

    if ( $wpdb->num_rows ) {
        $post_id = $wpdb->get_var( $query );
        $meta = get_post_meta( $post_id, 'times', TRUE );
        $meta++;
        update_post_meta( $post_id, 'times', $meta );
    } else {
        $new_post = array(
            'post_title' => $postTitle,
            'post_content' => '',
            'post_status' => 'publish',
            'post_date' => date('Y-m-d H:i:s'),
            'post_author' => '',
            'post_type' => 'stuff',
            'post_category' => array(0)
        );

        $post_id = wp_insert_post($new_post);
        add_post_meta($post_id, 'times', '1');
    }
}

Hãy làm nó


Bạn có thể muốn thêm AND post_status = 'publish'truy vấn ban đầu để chỉ trả lại các bài đăng đã xuất bản.
Barry Carlyon

Cảm ơn một lần nữa vì sự giúp đỡ! Tuy nhiên, vì lý do nào đó, các bài đăng không được đưa vào cơ sở dữ liệu vì một số lý do .. mới hoặc cập nhật cũ
marctain

Có một lỗi đánh máy ở đâu đó không? Tôi không thể tìm ra nó.
marctain

Tôi sẽ có một bài kiểm tra khi tôi đi làm về
Barry Carlyon

Lỗi thất bại về phần tôi WHERE post_title = %dnên đọc WHERE post_title = %s mũ trùm đầu
Barry Carlyon

10

Một phương pháp cập nhật hơn có thể sử dụng post_exists()chức năng như vậy:

if( isset( $_POST['submit'] ) ){

   $post_title = sanitize_title( $_POST['post_title'] );

   $new_post = array(
       'post_title' => $post_title,
       'post_content' => '',
       'post_status' => 'publish',
       'post_date' => date('Y-m-d H:i:s'),
       'post_author' => '',
       'post_type' => 'stuff',
       'post_category' => array(0)
   );

   $post_id = post_exists( $post_title ) or wp_insert_post( $new_post );

   update_post_meta( $post_id, 'times', '1' );

}

1
Một chút không rõ ràng nếu OP muốn tăng trường meta lên 1 nếu bài đăng tồn tại, hoặc chỉ đơn giản là đặt trường meta thành 1. Ở trên sẽ luôn đặt nó thành 1. Để tăng $post_id = post_exists[...]toán tử ternary nên được chia thành một if / other để tăng trường meta.
Tim Hallman

1

Bạn có thể sử dụng hàm get_page_by_title () của WordPress:

<?php $postTitle = $_POST['post_title'];
$submit = $_POST['submit'];


if(isset($submit)){
    $customPost = get_page_by_title($postTitle, OBJECT, 'stuff');

    if(!is_null($customPost)) {
       $meta = get_post_meta($customPost->ID, 'times', true);
       $meta++;
       update_post_meta($customPost->ID, 'times', $meta);

       return
    }

    global $user_ID;

    $new_post = array(
        'post_title' => $postTitle,
        'post_content' => '',
        'post_status' => 'publish',
        'post_date' => date('Y-m-d H:i:s'),
        'post_author' => '',
        'post_type' => 'stuff',
        'post_category' => array(0)
    );

    $post_id = wp_insert_post($new_post);
    add_post_meta($post_id, 'times', '1');

}

1
Này Alex, chào mừng bạn đến với WPSE. Xin vui lòng đi tham quan . Chúng tôi thích sống theo nguyên tắc ở đây là dạy mọi người câu cá hơn là chỉ giao con cá cho họ. Bạn có phiền khi chỉnh sửa bài đăng của mình để thêm một số giải thích về lý do tại sao điều này giải quyết vấn đề của OP không?
Tim Malone


0

Bạn có thể làm điều đó bằng ID


$post_title = "This Awesome Title";
$post_content = "My content of something cool.";
$post_status = "publish"; //publish, draft, etc
$post_type = "page" // or whatever post type desired

/* Attempt to find post id by post name if it exists */
$found_post_title = get_page_by_title( $post_title, OBJECT, $post_type );
$found_post_id = $found_post_title->ID;

/**********************************************************
** Check If Page does not exist, if true, create a new post 
************************************************************/
if ( FALSE === get_post_status( $found_post_id ) ): 

      $post_args = array(
        'post_title' => $post_title,
        'post_type' => $post_type,
        'post_content'=> $post_content,
        'post_status'  => $post_status,
        //'post_author'  => get_current_user_id(),

        /* If you have meta fields to enter data into */ 
        'meta_input'   => array(
            'meta_key1' => 'my value',
            'meta_key2' => 'my other value',
        ),
      );      


      /* Add a new wp post into db, return it's post id */
      $returned_post_id = wp_insert_post( $post_args );  

      /* Update page template only if using "page" as the post_type */ 
      update_post_meta( $returned_post_id, '_wp_page_template', 'my-page-template.php' ); 

      /* Add values into meta fields. Work with ACF CUSTOM FIELDS!! */
      $field_key = "My_Field_KEY";
      $value = "my custom value";
      update_field( $field_key, $value, $returned_post_id );

      $field_key = "My_Other_Field_KEY";
      $value = "my other custom value";
      update_field( $field_key, $value, $returned_post_id );

      /* Save a checkbox or select value */
      // $field_key = "My_Field_KEY";
      // $value = array("red", "blue", "yellow");
      // update_field( $field_key, $value, $returned_post_id );

      /* Save to a repeater field value */
      // $field_key = "My_Field_KEY";
      // $value = array(
      //   array(
      //     "ss_name" => "Foo",
      //     "ss_type" => "Bar"
      //   )
      // );
      // update_field( $field_key, $value, $returned_post_id );

      /* Echo a response! */
      echo "<span class='pg-new'><strong>". $post_title . " Created!</strong></span><br>";
      echo "<a href='".esc_url( get_permalink($returned_post_id) )."' target='_Blank'>". $post_title . "</a><p>";


else:        
/***************************
** IF POST EXISTS, update it 
****************************/

      /* Update post */
      $update_post_args = array(
        'ID'           => $found_post_id,
        'post_title'   => $post_title,
        'post_content' => $post_content,
      );

      /* Update the post into the database */
      wp_update_post( $update_post_args );

      /* Update values into meta fields */
      $field_key = "My_Field_KEY";
      $value = "my custom value";
      update_field( $field_key, $value, $found_post_id );

      $field_key = "My_Other_Field_KEY";
      $value = "my other custom value";
      update_field( $field_key, $value, $found_post_id );

      /* Echo a response! */
      echo "<span class='pg-update'><strong>". $post_title . " Updated!</strong></span><br>"; 
      echo "<a href='".esc_url( get_permalink($found_post_id) )."' target='_Blank'>View</a> | <a href='post.php?post=".$found_post_id."&action=edit'>". $post_title . "</a><p>";

endif;

1
Trên thực tế, an toàn hơn khi sử dụng 2 hàm WP tích hợp được dự định để thực hiện việc này, post_exists and wp_insert_post` như trong câu trả lời của @ TimHallman. Bạn càng giới thiệu nhiều mã không cần thiết, càng có nhiều thay đổi trong việc giới thiệu lỗi hoặc các vấn đề bảo trì dài hạn.
FluffyKitten

-1

Kiểm tra WordPress nếu bài viết tồn tại theo tiêu đề

function wp_exist_post_by_title( $title ) {
    global $wpdb;
    $return = $wpdb->get_row( "SELECT ID FROM wp_posts WHERE post_title = '" . $title . "' && post_status = 'publish' && post_type = 'post' ", 'ARRAY_N' );
    if( empty( $return ) ) {
        return false;
    } else {
        return true;
    }
}

// usage
if( wp_exist_post_by_title( $post->name ) ) {
// post exist
} else { 
// post does not exist
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.