Home > Net >  php add 2 or more post_type in $query
php add 2 or more post_type in $query

Time:07-09

code original

if ( 'property' != $post->post_type ) {
        return $query;
    }

what i want to do but it doesn't work like that

 if ( 'property' != $post->post_type ) {
 if ( 'testimonial' != $post->post_type ) {
            return $query;
        }

How to add 2 or 3 post types ?

I add the full code so you can maybe understand why it doesn't work and figure out how to make it work for different post types

add_filter( 'ajax_query_attachments_args', 'filter_query_attachments_args' );

function filter_query_attachments_args( $query ) {
    // 1. Only users with access
    if ( ! current_user_can( 'upload_files' ) ) {
        wp_send_json_error();
    }

    // 2. No manipulation for admins.
    // After all they have access to all images.
    //if ( current_user_can( 'administrator' ) ) {
        //return $query;
    //}

    // 3. No images, if the post_id is not provided
    if ( ! isset( $_REQUEST['post_id'] ) ) {
        wp_send_json_error();
    }

    // 4. No images, if you are not the post type manager or author
    $post = get_post( (int) $_REQUEST['post_id'] );
    if ( ! $post instanceof \WP_Post ) {
        return $query;
    }

    // 5. You can also restrict the changes to your custom post type
    // Only filter for our custom post types
    if ( 'property' != $post->post_type ) {
        return $query;
    }
    
    // 5. You can also restrict the changes to your custom post type
    if ( 'testimonial' != $post->post_type ) {
        return $query;
    }
    
    // 8. Don't show private images
    $query['post_status'] = 'inherit';

    // 9. Filter to display only the images attached to the post
    $query['post_parent'] = $post->ID;

    // 10. Filter to display only the user uploaded image
    $query['editor'] = $current_user->ID;

    return $query;
}

CodePudding user response:

If I understand what you are asking, you want to be able to check two separate variables from the contents of post. You can put them in the same if block like this:

if ( 'property' != $post->post_type && 'testimonial' != $post->post_type ) {
         return $query;
    }

The two equality comparisons need to be separated by a logical && operator.

Alternatively, you could nest the if blocks like this:

if ( 'property' != $post->post_type) {
    if ('testimonial' != $post->post_type ) {
         return $query;
    }
}

Depending on your implementation, you may want to use !== instead of != to check not only for the value but also the type. See https://www.php.net/manual/en/language.operators.comparison.php for more information about operators in PHP.

CodePudding user response:

You can use in_array

if (in_array($post->post_type, ['property', 'testimonial'])) {}

  • Related