最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Why do my custom post types stop displaying over time?

programmeradmin2浏览0评论

I have a skill development project I am working on here: / . This is a custom template page. I am using Custom Posts UI for custom post type meals and ACF for some custom fields. Over time, some of the meals stop displaying on the page. I have meals listed at the bottom depending on the size of the meal and meal groups that are displayed with jquery, ajax and php when you click on the button. BOTH methods stop displaying certain meal post types after a while. It is not always the same type or size. Is it some kind of caching thing? I am still learning all this and I could use some help.

Jquery script

    <div class="mx-auto meal-icons-container">
        <div class="row p-2 mx-auto">
            <div class="col-6 col-md-3">
                <img src=".png" id="emergency-icon" width="75" height="auto" alt="Emergency Meals" class="meal-icon"><span class="meal-icon-caption"> Emergency</span>
            </div>
            <script>
                jQuery(document).ready(function($){
                    $('#emergency-icon').click(function(){
                        $.ajax({
                            method: 'GET',
                url: ajaxurl, // we send all WP ajax requests to this file, it will load all WP's files, plugins. It's WP Ajax approach.
                data: {
                  action: 'load_emergency_meals' // you can name it whatever just use the same in PHP binding ajax action.
              }
          }).done(function(data){
            $("#meal-results").html(data);
          });
      });
                });
            </script>

Function in functions.php

// load emergency meals button
function load_emergency_meals() {
 ?>
    <h2>
        Emergency Binge Control Meals
    </h2>
<div class="justify-content-center d-inline-flex flex-wrap text-center p-2">
    <?php
    $args = array('post_type' => 'meal');
    $meals = new WP_Query($args);

    if($meals->have_posts()) : while($meals->have_posts()) : $meals->the_post();
        $meal_type = get_field('meal_type');
        if ( $meal_type && in_array('emergency', $meal_type)){?>
            <div class="text-center p-2 meal-size-posts">
                <h4><?php the_field('meal_name'); ?></h4>
                <img src="<?php echo get_field('meal_icon'); ?>" class="meal-icon">
                <p class="meal-description"><?php the_field('meal_description'); ?></p>
                <h4><?php the_field('meal_calories'); ?> calories</h4>
            </div>
        <?php } ?>
    <?php endwhile; endif; ?>
</div>
<?php
    die();
}

Actions in function.php

 // this is where we bind our function to `load_meals` action name.
 // the one with `_nopriv` prefix in wp action name is for not logged in users, and without it for logged in users.
add_action('wp_ajax_load_emergency_meals', 'load_emergency_meals');
add_action('wp_ajax_nopriv_load_emergency_meals', 'load_emergency_meals');

Custom Post Type Settings .jpg

Custom Fields Settings

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
    'key' => 'group_5e590c435c453',
    'title' => 'Meal',
    'fields' => array(
        array(
            'key' => 'field_5e591fd27bd3f',
            'label' => 'Name',
            'name' => 'meal_name',
            'type' => 'text',
            'instructions' => 'What is this meal called?',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'default_value' => '',
            'placeholder' => 'name the meal',
            'prepend' => '',
            'append' => '',
            'maxlength' => '',
        ),
        array(
            'key' => 'field_5e5920a99f373',
            'label' => 'Meal Icon',
            'name' => 'meal_icon',
            'type' => 'image',
            'instructions' => 'Choose an icon for this food.',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'return_format' => 'url',
            'preview_size' => 'medium',
            'library' => 'all',
            'min_width' => '',
            'min_height' => '',
            'min_size' => '',
            'max_width' => '',
            'max_height' => '',
            'max_size' => '',
            'mime_types' => '',
        ),
        array(
            'key' => 'field_5e592164996b4',
            'label' => 'Meal Description',
            'name' => 'meal_description',
            'type' => 'textarea',
            'instructions' => 'Describe the meal.',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'default_value' => '',
            'placeholder' => 'What foods are in this meal and what\'s the calorie breakdown?',
            'maxlength' => '',
            'rows' => '',
            'new_lines' => '',
        ),
        array(
            'key' => 'field_5e590c7a69cc7',
            'label' => 'Calories',
            'name' => 'meal_calories',
            'type' => 'number',
            'instructions' => 'Add how many calories this meal contains.',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'default_value' => '',
            'placeholder' => 'add calories',
            'prepend' => '',
            'append' => '',
            'min' => '',
            'max' => '',
            'step' => '',
        ),
        array(
            'key' => 'field_5e6e03dd8dee2',
            'label' => 'Meal Type',
            'name' => 'meal_type',
            'type' => 'checkbox',
            'instructions' => '',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'choices' => array(
                'emergency' => 'emergency',
                'basic' => 'basic',
                'alcoholic' => 'alcoholic',
                'asian' => 'asian',
                'mexican' => 'mexican',
                'comfort' => 'comfort',
                'cooling' => 'cooling',
                'sweet' => 'sweet',
            ),
            'allow_custom' => 0,
            'default_value' => array(
            ),
            'layout' => 'vertical',
            'toggle' => 0,
            'return_format' => 'value',
            'save_custom' => 0,
        ),
        array(
            'key' => 'field_5e6e04b63a353',
            'label' => 'Meal Size',
            'name' => 'meal_size',
            'type' => 'select',
            'instructions' => '',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'choices' => array(
                'small' => 'small',
                'medium' => 'medium',
                'large' => 'large',
                'xl' => 'xl',
            ),
            'default_value' => array(
            ),
            'allow_null' => 0,
            'multiple' => 0,
            'ui' => 0,
            'return_format' => 'value',
            'ajax' => 0,
            'placeholder' => '',
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'meal',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => array(
        0 => 'the_content',
        1 => 'featured_image',
    ),
    'active' => true,
    'description' => '',
));

endif;

What could this problem be? Any help appreciated. Thanks.

I have a skill development project I am working on here: https://blog.unicornpoint/wp/safe-foods-meal-generator-diet-assistant/ . This is a custom template page. I am using Custom Posts UI for custom post type meals and ACF for some custom fields. Over time, some of the meals stop displaying on the page. I have meals listed at the bottom depending on the size of the meal and meal groups that are displayed with jquery, ajax and php when you click on the button. BOTH methods stop displaying certain meal post types after a while. It is not always the same type or size. Is it some kind of caching thing? I am still learning all this and I could use some help.

Jquery script

    <div class="mx-auto meal-icons-container">
        <div class="row p-2 mx-auto">
            <div class="col-6 col-md-3">
                <img src="https://blog.unicornpoint/wp/wp-content/uploads/2020/02/panic.png" id="emergency-icon" width="75" height="auto" alt="Emergency Meals" class="meal-icon"><span class="meal-icon-caption"> Emergency</span>
            </div>
            <script>
                jQuery(document).ready(function($){
                    $('#emergency-icon').click(function(){
                        $.ajax({
                            method: 'GET',
                url: ajaxurl, // we send all WP ajax requests to this file, it will load all WP's files, plugins. It's WP Ajax approach.
                data: {
                  action: 'load_emergency_meals' // you can name it whatever just use the same in PHP binding ajax action.
              }
          }).done(function(data){
            $("#meal-results").html(data);
          });
      });
                });
            </script>

Function in functions.php

// load emergency meals button
function load_emergency_meals() {
 ?>
    <h2>
        Emergency Binge Control Meals
    </h2>
<div class="justify-content-center d-inline-flex flex-wrap text-center p-2">
    <?php
    $args = array('post_type' => 'meal');
    $meals = new WP_Query($args);

    if($meals->have_posts()) : while($meals->have_posts()) : $meals->the_post();
        $meal_type = get_field('meal_type');
        if ( $meal_type && in_array('emergency', $meal_type)){?>
            <div class="text-center p-2 meal-size-posts">
                <h4><?php the_field('meal_name'); ?></h4>
                <img src="<?php echo get_field('meal_icon'); ?>" class="meal-icon">
                <p class="meal-description"><?php the_field('meal_description'); ?></p>
                <h4><?php the_field('meal_calories'); ?> calories</h4>
            </div>
        <?php } ?>
    <?php endwhile; endif; ?>
</div>
<?php
    die();
}

Actions in function.php

 // this is where we bind our function to `load_meals` action name.
 // the one with `_nopriv` prefix in wp action name is for not logged in users, and without it for logged in users.
add_action('wp_ajax_load_emergency_meals', 'load_emergency_meals');
add_action('wp_ajax_nopriv_load_emergency_meals', 'load_emergency_meals');

Custom Post Type Settings https://blog.unicornpoint/wp/wp-content/uploads/2020/03/meals-cpt-settings.jpg

Custom Fields Settings

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
    'key' => 'group_5e590c435c453',
    'title' => 'Meal',
    'fields' => array(
        array(
            'key' => 'field_5e591fd27bd3f',
            'label' => 'Name',
            'name' => 'meal_name',
            'type' => 'text',
            'instructions' => 'What is this meal called?',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'default_value' => '',
            'placeholder' => 'name the meal',
            'prepend' => '',
            'append' => '',
            'maxlength' => '',
        ),
        array(
            'key' => 'field_5e5920a99f373',
            'label' => 'Meal Icon',
            'name' => 'meal_icon',
            'type' => 'image',
            'instructions' => 'Choose an icon for this food.',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'return_format' => 'url',
            'preview_size' => 'medium',
            'library' => 'all',
            'min_width' => '',
            'min_height' => '',
            'min_size' => '',
            'max_width' => '',
            'max_height' => '',
            'max_size' => '',
            'mime_types' => '',
        ),
        array(
            'key' => 'field_5e592164996b4',
            'label' => 'Meal Description',
            'name' => 'meal_description',
            'type' => 'textarea',
            'instructions' => 'Describe the meal.',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'default_value' => '',
            'placeholder' => 'What foods are in this meal and what\'s the calorie breakdown?',
            'maxlength' => '',
            'rows' => '',
            'new_lines' => '',
        ),
        array(
            'key' => 'field_5e590c7a69cc7',
            'label' => 'Calories',
            'name' => 'meal_calories',
            'type' => 'number',
            'instructions' => 'Add how many calories this meal contains.',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'default_value' => '',
            'placeholder' => 'add calories',
            'prepend' => '',
            'append' => '',
            'min' => '',
            'max' => '',
            'step' => '',
        ),
        array(
            'key' => 'field_5e6e03dd8dee2',
            'label' => 'Meal Type',
            'name' => 'meal_type',
            'type' => 'checkbox',
            'instructions' => '',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'choices' => array(
                'emergency' => 'emergency',
                'basic' => 'basic',
                'alcoholic' => 'alcoholic',
                'asian' => 'asian',
                'mexican' => 'mexican',
                'comfort' => 'comfort',
                'cooling' => 'cooling',
                'sweet' => 'sweet',
            ),
            'allow_custom' => 0,
            'default_value' => array(
            ),
            'layout' => 'vertical',
            'toggle' => 0,
            'return_format' => 'value',
            'save_custom' => 0,
        ),
        array(
            'key' => 'field_5e6e04b63a353',
            'label' => 'Meal Size',
            'name' => 'meal_size',
            'type' => 'select',
            'instructions' => '',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'choices' => array(
                'small' => 'small',
                'medium' => 'medium',
                'large' => 'large',
                'xl' => 'xl',
            ),
            'default_value' => array(
            ),
            'allow_null' => 0,
            'multiple' => 0,
            'ui' => 0,
            'return_format' => 'value',
            'ajax' => 0,
            'placeholder' => '',
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'meal',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => array(
        0 => 'the_content',
        1 => 'featured_image',
    ),
    'active' => true,
    'description' => '',
));

endif;

What could this problem be? Any help appreciated. Thanks.

Share Improve this question asked Mar 15, 2020 at 22:04 Dawn SummerallDawn Summerall 135 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

So Why?

Because your WP_Query/query is querying the recent posts for your post type (for all meal types), so the results would likely not (always) contain those posts where the meal_type meta contains emergency as part of the value.

Yet, your code below is only displaying the post if it's of the specified meal type, which is emergency in your code:

$meal_type = get_field('meal_type');
if ( $meal_type && in_array('emergency', $meal_type))

Solution

Use meta query in your $args:

$args = array(
    'post_type'  => 'meal',
    'meta_query' => array(
        array(
            'key'     => 'meal_type',
            'value'   => '"emergency"',
            'compare' => 'LIKE',
        ),
    ),
);

A bit of explanation: In the above meta query, we're using the LIKE clause because the meta value is an array with a serialized string which may look like a:1:{i:0;s:9:"emergency";} in the database, so we're using an exact match — "<the type>". And it should work with your current ACF settings, but you'd need to adjust the value accordingly for other meal types. E.g. With the "basic" meal type, you'd use 'value' => '"basic"' (note the quotes/" are necessary).

A Better Practice

I would create a custom taxonomy named meal_type and assign it to the post type (meal). Or I might just use the default Category (category) taxonomy. But either way, I wouldn't need to use the above meta query, or that it's easier to query by the category/taxonomy and categorizing is what taxonomy is meant for. So you should consider that before you create more posts..

发布评论

评论列表(0)

  1. 暂无评论