get_option WordPress 间歇性失败

get_option intermittently fail WordPress

这是我的第一个问题。

我在 functions.php 文件中的主题中设置了自定义分类法。

我为自定义分类法(类别)添加了一些额外的元字段,也是通过 functions.php 文件设置的。

我正在使用 update_option() 函数。

这是将选项保存到数据库的部分:

<?php
// save extra category extra fields hook
add_action ( 'edited_artists', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key){
            if (isset($_POST['Cat_meta'][$key])){
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
    //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}
?>

在我的模板文件中,我这样称呼它们:

<?php 
     $terms = wp_get_post_terms( $post->ID, 'artists');


    foreach ($terms as $term){
       $term_id = $term->term_id;
       $term_name = $term->name;
       $term_taxonomy_id = $term->term_taxonomy_id;
       $term_slug = $term->slug;
       //do you term meta stuff here

       //print_r($term);
    }
?>

这是我使用它们的地方(除其他外),当然是在 LOOP 内:

<div class="single-sculpture-artist-info">
<?php 
    $category_meta = get_option( "category_$term_taxonomy_id");
?>

<a href="<?php echo get_site_url(); ?>/artists/<?php echo $term_slug; ?>">
    <img src="<?php echo $category_meta['artists_photo'] ?>" alt="<?php echo    $term_name; ?>">
</a>

<h3>
    <a href="<?php echo get_site_url(); ?>/artists/<?php echo $term_slug; ?>"><?php echo $term_name; ?></a>
</h3>

<p><?php echo $category_meta['artists_city_province'] ?></p>

<p><?php echo $category_meta['artists_bio_excerpt'] ?></p>
</div>

所有这些代码都能完美运行。

我开始添加内容,但突然开始失败。我认为它是在我尝试使用我在开发整个系统时使用的类别(分类)名称之一时开始的(我猜它被缓存在某处或某处),但后来我尝试使用不同的名称,并添加一些其他以前没有的,它也失败了。我最好的猜测是选项 table 以某种方式超载了数据(限制或其他)。

这可能吗?我没有太多,该分类法中的 56 个工作职位和 34 个类别(分类法术语)。

我尽我最大的努力去解决这个问题,但找不到问题所在。

当我再插入 2 或 3 个帖子时,它开始乱七八糟。所以,这个:

<a href="<?php echo get_site_url(); ?>/artists/<?php echo $term_slug; ?>"> 

输出正确 link,但是,这:

<img src="<?php echo $category_meta['artists_photo'] ?>"

没有。它输出来自其他类别(来自同一 CPT)的数据。我可以根据要求提供更多信息。

没有回答你的问题,但你知道 WP 4.2+ 发生了很大的变化,他们将拆分分类术语,这样如果分类术语匹配,它们就不会共享相同的术语 ID .

请查看下面的链接,了解有关如何解决此问题的一些详细信息

https://make.wordpress.org/core/2015/02/16/taxonomy-term-splitting-in-4-2-a-developer-guide/

https://developer.wordpress.org/plugins/taxonomy/working-with-split-terms-in-wp-4-2/

通过网络的帮助,我找到了解决问题的方法。我拨打的线路:

<?php 
    $category_meta = get_option( "category_$term_taxonomy_id");
?>

我切换到这个:

<?php 
    $category_meta = get_option( "category_$term_id");
?>

这似乎已经解决了问题。但是,这里有一些其他解决方案可能在类似情况下更相关:

https://en.bainternet.info/tax-meta-class-faq/

此外,请务必阅读 Joe Wilson 上面发布的内容。再次感谢。