Periksa apakah Judul Posting ada, Sisipkan posting jika tidak, Tambahkan Incremental # ke Meta jika ada


10

Saya sudah memiliki fungsi di mana pengguna mengirimkan formulir dan membuat pos khusus ...

<?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');

}

Saya ingin memeriksa apakah judul posting kustom ada, lalu jika TIDAK, untuk melanjutkan dan membuat posting dengan # 1 di bidang meta, dan jika memang ada, untuk hanya menambahkan 1 ke bidang meta

Jawaban:


7

Ini akan membutuhkan kueri.

Jadi, kembangkan kode Anda:

<?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');
    }
}

Harus melakukannya


Anda mungkin ingin menambahkan AND post_status = 'publish'ke permintaan awal untuk hanya mengembalikan posting yang dipublikasikan.
Barry Carlyon

Sekali lagi terima kasih atas bantuannya! Namun, postingan tidak sampai ke database untuk beberapa alasan .. baru atau yang diperbarui-lama
marctain

Apakah ada kesalahan ketik di suatu tempat? Saya tidak bisa mengetahuinya.
Marctain

Saya akan menjalani tes ketika saya pulang kerja
Barry Carlyon

Kegagalan episial di pihak saya WHERE post_title = %dharus membaca WHERE post_title = %s headdesk
Barry Carlyon

10

Metode yang lebih diperbarui dapat menggunakan post_exists()fungsi seperti ini:

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
Sedikit tidak jelas apakah OP ingin menambah bidang meta dengan 1 jika ada posting, atau cukup mengatur bidang meta ke 1. Di atas akan selalu mengaturnya menjadi 1. Untuk menambah $post_id = post_exists[...]operator ternary harus dipecah menjadi sebuah jika / lain untuk menambah bidang meta.
Tim Hallman

2

Anda dapat menggunakan fungsi get_page_by_title () di 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
Hei Alex, selamat datang di WPSE. Silahkan mengikuti tur ini . Kami senang hidup dengan prinsip di sini mengajar orang untuk memancing daripada hanya menyerahkan ikan kepada mereka. Maukah Anda mengedit posting Anda untuk menambahkan penjelasan mengapa ini memecahkan masalah OP?
Tim Malone


0

Anda dapat melakukannya dengan 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
Sebenarnya lebih aman untuk menggunakan 2 fungsi WP post_exists and bawaan yang dimaksudkan untuk melakukan ini, wp_insert_post` seperti dalam jawaban @ TimHallman. Semakin banyak kode yang tidak perlu yang Anda perkenalkan, semakin banyak perubahan yang menyebabkan kesalahan atau masalah pemeliharaan jangka panjang.
FluffyKitten

-1

WordPress memeriksa apakah ada tulisan berdasarkan judul

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
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.